/ Hex Artifact Content
Login

Artifact fe677be978d8cae19f73272d52f91ba4b95af2da:


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 35 20 32 30  agma.c,v 1.15 20
01d0: 30 34 2f 30 32 2f 32 30 20 31 34 3a 35 30 3a 35  04/02/20 14:50:5
01e0: 38 20 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a 23  8 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 20 20 52  d 2 for FULL.  R
0400: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
0410: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
0420: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
0430: 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20  argument..**.** 
0440: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 76 61  Note that the va
0450: 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20 61 72  lues returned ar
0460: 65 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 74 20  e one less that 
0470: 74 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a  the values that.
0480: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 70 61 73  ** should be pas
0490: 73 65 64 20 69 6e 74 6f 20 73 71 6c 69 74 65 42  sed into sqliteB
04a0: 74 72 65 65 53 65 74 53 61 66 65 74 79 4c 65 76  treeSetSafetyLev
04b0: 65 6c 28 29 2e 20 20 54 68 65 20 69 73 20 64 6f  el().  The is do
04c0: 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74  ne.** to support
04d0: 20 6c 65 67 61 63 79 20 53 51 4c 20 63 6f 64 65   legacy SQL code
04e0: 2e 20 20 54 68 65 20 73 61 66 65 74 79 20 6c 65  .  The safety le
04f0: 76 65 6c 20 75 73 65 64 20 74 6f 20 62 65 20 62  vel used to be b
0500: 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c  oolean.** and ol
0510: 64 65 72 20 73 63 72 69 70 74 73 20 6d 61 79 20  der scripts may 
0520: 68 61 76 65 20 75 73 65 64 20 6e 75 6d 62 65 72  have used number
0530: 73 20 30 20 66 6f 72 20 4f 46 46 20 61 6e 64 20  s 0 for OFF and 
0540: 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61  1 for ON..*/.sta
0550: 74 69 63 20 69 6e 74 20 67 65 74 53 61 66 65 74  tic int getSafet
0560: 79 4c 65 76 65 6c 28 63 68 61 72 20 2a 7a 29 7b  yLevel(char *z){
0570: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
0580: 73 74 72 75 63 74 20 7b 0a 20 20 20 20 63 6f 6e  struct {.    con
0590: 73 74 20 63 68 61 72 20 2a 7a 57 6f 72 64 3b 0a  st char *zWord;.
05a0: 20 20 20 20 69 6e 74 20 76 61 6c 3b 0a 20 20 7d      int val;.  }
05b0: 20 61 4b 65 79 5b 5d 20 3d 20 7b 0a 20 20 20 20   aKey[] = {.    
05c0: 7b 20 22 6e 6f 22 2c 20 20 20 20 30 20 7d 2c 0a  { "no",    0 },.
05d0: 20 20 20 20 7b 20 22 6f 66 66 22 2c 20 20 20 30      { "off",   0
05e0: 20 7d 2c 0a 20 20 20 20 7b 20 22 66 61 6c 73 65   },.    { "false
05f0: 22 2c 20 30 20 7d 2c 0a 20 20 20 20 7b 20 22 79  ", 0 },.    { "y
0600: 65 73 22 2c 20 20 20 31 20 7d 2c 0a 20 20 20 20  es",   1 },.    
0610: 7b 20 22 6f 6e 22 2c 20 20 20 20 31 20 7d 2c 0a  { "on",    1 },.
0620: 20 20 20 20 7b 20 22 74 72 75 65 22 2c 20 20 31      { "true",  1
0630: 20 7d 2c 0a 20 20 20 20 7b 20 22 66 75 6c 6c 22   },.    { "full"
0640: 2c 20 20 32 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69  ,  2 },.  };.  i
0650: 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a 5b 30 5d  nt i;.  if( z[0]
0660: 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b 0a  ==0 ) return 1;.
0670: 20 20 69 66 28 20 69 73 64 69 67 69 74 28 7a 5b    if( isdigit(z[
0680: 30 5d 29 20 7c 7c 20 28 7a 5b 30 5d 3d 3d 27 2d  0]) || (z[0]=='-
0690: 27 20 26 26 20 69 73 64 69 67 69 74 28 7a 5b 31  ' && isdigit(z[1
06a0: 5d 29 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ])) ){.    retur
06b0: 6e 20 61 74 6f 69 28 7a 29 3b 0a 20 20 7d 0a 20  n atoi(z);.  }. 
06c0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65   for(i=0; i<size
06d0: 6f 66 28 61 4b 65 79 29 2f 73 69 7a 65 6f 66 28  of(aKey)/sizeof(
06e0: 61 4b 65 79 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a  aKey[0]); i++){.
06f0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 53 74      if( sqliteSt
0700: 72 49 43 6d 70 28 7a 2c 61 4b 65 79 5b 69 5d 2e  rICmp(z,aKey[i].
0710: 7a 57 6f 72 64 29 3d 3d 30 20 29 20 72 65 74 75  zWord)==0 ) retu
0720: 72 6e 20 61 4b 65 79 5b 69 5d 2e 76 61 6c 3b 0a  rn aKey[i].val;.
0730: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a    }.  return 1;.
0740: 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  }../*.** Interpr
0750: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
0760: 69 6e 67 20 61 73 20 61 20 74 65 6d 70 20 64 62  ing as a temp db
0770: 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65 74 75 72   location. Retur
0780: 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a 2a 2a 20  n 1 for file.** 
0790: 62 61 63 6b 65 64 20 74 65 6d 70 6f 72 61 72 79  backed temporary
07a0: 20 64 61 74 61 62 61 73 65 73 2c 20 32 20 66 6f   databases, 2 fo
07b0: 72 20 74 68 65 20 52 65 64 2d 42 6c 61 63 6b 20  r the Red-Black 
07c0: 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72 79 20 64  tree in memory d
07d0: 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e 64 20 30  atabase.** and 0
07e0: 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 6d 70   to use the comp
07f0: 69 6c 65 2d 74 69 6d 65 20 64 65 66 61 75 6c 74  ile-time default
0800: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
0810: 67 65 74 54 65 6d 70 53 74 6f 72 65 28 63 68 61  getTempStore(cha
0820: 72 20 2a 7a 29 7b 0a 20 20 69 66 28 20 7a 5b 30  r *z){.  if( z[0
0830: 5d 3e 3d 27 30 27 20 7c 7c 20 7a 5b 30 5d 3c 3d  ]>='0' || z[0]<=
0840: 27 32 27 20 29 7b 0a 20 20 20 20 72 65 74 75 72  '2' ){.    retur
0850: 6e 20 7a 5b 30 5d 20 2d 20 27 30 27 3b 0a 20 20  n z[0] - '0';.  
0860: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
0870: 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65  StrICmp(z, "file
0880: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  ")==0 ){.    ret
0890: 75 72 6e 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69  urn 1;.  }else i
08a0: 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70  f( sqliteStrICmp
08b0: 28 7a 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30  (z, "memory")==0
08c0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32   ){.    return 2
08d0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72  ;.  }else{.    r
08e0: 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 0a  eturn 0;.  }.}..
08f0: 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20  /*.** Process a 
0900: 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74  pragma statement
0910: 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61  .  .**.** Pragma
0920: 73 20 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f  s are of this fo
0930: 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50  rm:.**.**      P
0940: 52 41 47 4d 41 20 69 64 20 3d 20 76 61 6c 75 65  RAGMA id = value
0950: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74  .**.** The ident
0960: 69 66 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f  ifier might also
0970: 20 62 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54   be a string.  T
0980: 68 65 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  he value is a st
0990: 72 69 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65  ring, and.** ide
09a0: 6e 74 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75  ntifier, or a nu
09b0: 6d 62 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46  mber.  If minusF
09c0: 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68 65  lag is true, the
09d0: 6e 20 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a  n the value is.*
09e0: 2a 20 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20  * a number that 
09f0: 77 61 73 20 70 72 65 63 65 64 65 64 20 62 79 20  was preceded by 
0a00: 61 20 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2f  a minus sign..*/
0a10: 0a 76 6f 69 64 20 73 71 6c 69 74 65 50 72 61 67  .void sqlitePrag
0a20: 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ma(Parse *pParse
0a30: 2c 20 54 6f 6b 65 6e 20 2a 70 4c 65 66 74 2c 20  , Token *pLeft, 
0a40: 54 6f 6b 65 6e 20 2a 70 52 69 67 68 74 2c 20 69  Token *pRight, i
0a50: 6e 74 20 6d 69 6e 75 73 46 6c 61 67 29 7b 0a 20  nt minusFlag){. 
0a60: 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30   char *zLeft = 0
0a70: 3b 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74  ;.  char *zRight
0a80: 20 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 20 2a   = 0;.  sqlite *
0a90: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
0aa0: 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c  .  Vdbe *v = sql
0ab0: 69 74 65 47 65 74 56 64 62 65 28 70 50 61 72 73  iteGetVdbe(pPars
0ac0: 65 29 3b 0a 20 20 69 66 28 20 76 3d 3d 30 20 29  e);.  if( v==0 )
0ad0: 20 72 65 74 75 72 6e 3b 0a 0a 20 20 7a 4c 65 66   return;..  zLef
0ae0: 74 20 3d 20 73 71 6c 69 74 65 53 74 72 4e 44 75  t = sqliteStrNDu
0af0: 70 28 70 4c 65 66 74 2d 3e 7a 2c 20 70 4c 65 66  p(pLeft->z, pLef
0b00: 74 2d 3e 6e 29 3b 0a 20 20 73 71 6c 69 74 65 44  t->n);.  sqliteD
0b10: 65 71 75 6f 74 65 28 7a 4c 65 66 74 29 3b 0a 20  equote(zLeft);. 
0b20: 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29   if( minusFlag )
0b30: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 30  {.    zRight = 0
0b40: 3b 0a 20 20 20 20 73 71 6c 69 74 65 53 65 74 4e  ;.    sqliteSetN
0b50: 53 74 72 69 6e 67 28 26 7a 52 69 67 68 74 2c 20  String(&zRight, 
0b60: 22 2d 22 2c 20 31 2c 20 70 52 69 67 68 74 2d 3e  "-", 1, pRight->
0b70: 7a 2c 20 70 52 69 67 68 74 2d 3e 6e 2c 20 30 29  z, pRight->n, 0)
0b80: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  ;.  }else{.    z
0b90: 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 53 74  Right = sqliteSt
0ba0: 72 4e 44 75 70 28 70 52 69 67 68 74 2d 3e 7a 2c  rNDup(pRight->z,
0bb0: 20 70 52 69 67 68 74 2d 3e 6e 29 3b 0a 20 20 20   pRight->n);.   
0bc0: 20 73 71 6c 69 74 65 44 65 71 75 6f 74 65 28 7a   sqliteDequote(z
0bd0: 52 69 67 68 74 29 3b 0a 20 20 7d 0a 20 20 69 66  Right);.  }.  if
0be0: 28 20 73 71 6c 69 74 65 41 75 74 68 43 68 65 63  ( sqliteAuthChec
0bf0: 6b 28 70 50 61 72 73 65 2c 20 53 51 4c 49 54 45  k(pParse, SQLITE
0c00: 5f 50 52 41 47 4d 41 2c 20 7a 4c 65 66 74 2c 20  _PRAGMA, zLeft, 
0c10: 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20  zRight, 0) ){.  
0c20: 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a 4c 65    sqliteFree(zLe
0c30: 66 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 46  ft);.    sqliteF
0c40: 72 65 65 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  ree(zRight);.   
0c50: 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 0a 20   return;.  }. . 
0c60: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
0c70: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
0c80: 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ize.  **  PRAGMA
0c90: 20 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73   default_cache_s
0ca0: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
0cb0: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
0cc0: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
0cd0: 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73 65  nt persistent se
0ce0: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
0cf0: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
0d00: 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72  ze.  The value r
0d10: 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d  eturned is the m
0d20: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
0d30: 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74  .  ** pages in t
0d40: 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20 20  he page cache.  
0d50: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
0d60: 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63 75  sets both the cu
0d70: 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20  rrent.  ** page 
0d80: 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65  cache size value
0d90: 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73 74   and the persist
0da0: 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20 73  ent page cache s
0db0: 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73  ize value.  ** s
0dc0: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
0dd0: 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a  abase file..  **
0de0: 0a 20 20 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  .  ** The defaul
0df0: 74 20 63 61 63 68 65 20 73 69 7a 65 20 69 73 20  t cache size is 
0e00: 73 74 6f 72 65 64 20 69 6e 20 6d 65 74 61 2d 76  stored in meta-v
0e10: 61 6c 75 65 20 32 20 6f 66 20 70 61 67 65 20 31  alue 2 of page 1
0e20: 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74   of the.  ** dat
0e30: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
0e40: 20 63 61 63 68 65 20 73 69 7a 65 20 69 73 20 61   cache size is a
0e50: 63 74 75 61 6c 6c 79 20 74 68 65 20 61 62 73 6f  ctually the abso
0e60: 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 0a 20 20  lute value of.  
0e70: 2a 2a 20 74 68 69 73 20 6d 65 6d 6f 72 79 20 6c  ** this memory l
0e80: 6f 63 61 74 69 6f 6e 2e 20 20 54 68 65 20 73 69  ocation.  The si
0e90: 67 6e 20 6f 66 20 6d 65 74 61 2d 76 61 6c 75 65  gn of meta-value
0ea0: 20 32 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68   2 determines th
0eb0: 65 0a 20 20 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f  e.  ** synchrono
0ec0: 75 73 20 73 65 74 74 69 6e 67 2e 20 20 41 20 6e  us setting.  A n
0ed0: 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 6d 65  egative value me
0ee0: 61 6e 73 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  ans synchronous 
0ef0: 69 73 20 6f 66 66 0a 20 20 2a 2a 20 61 6e 64 20  is off.  ** and 
0f00: 61 20 70 6f 73 69 74 69 76 65 20 76 61 6c 75 65  a positive value
0f10: 20 6d 65 61 6e 73 20 73 79 6e 63 68 72 6f 6e 6f   means synchrono
0f20: 75 73 20 69 73 20 6f 6e 2e 0a 20 20 2a 2f 0a 20  us is on..  */. 
0f30: 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43   if( sqliteStrIC
0f40: 6d 70 28 7a 4c 65 66 74 2c 22 64 65 66 61 75 6c  mp(zLeft,"defaul
0f50: 74 5f 63 61 63 68 65 5f 73 69 7a 65 22 29 3d 3d  t_cache_size")==
0f60: 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20  0 ){.    static 
0f70: 56 64 62 65 4f 70 20 67 65 74 43 61 63 68 65 53  VdbeOp getCacheS
0f80: 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ize[] = {.      
0f90: 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c  { OP_ReadCookie,
0fa0: 20 20 30 2c 20 32 2c 20 20 20 20 20 20 20 20 30    0, 2,        0
0fb0: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 41 62  },.      { OP_Ab
0fc0: 73 56 61 6c 75 65 2c 20 20 20 20 30 2c 20 30 2c  sValue,    0, 0,
0fd0: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
0fe0: 20 20 7b 20 4f 50 5f 44 75 70 2c 20 20 20 20 20    { OP_Dup,     
0ff0: 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20      0, 0,       
1000: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
1010: 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20  Integer,     0, 
1020: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  0,        0},.  
1030: 20 20 20 20 7b 20 4f 50 5f 4e 65 2c 20 20 20 20      { OP_Ne,    
1040: 20 20 20 20 20 20 30 2c 20 36 2c 20 20 20 20 20        0, 6,     
1050: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
1060: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 4d  P_Integer,     M
1070: 41 58 5f 50 41 47 45 53 2c 30 2c 20 30 7d 2c 0a  AX_PAGES,0, 0},.
1080: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d        { OP_Colum
1090: 6e 4e 61 6d 65 2c 20 20 30 2c 20 31 2c 20 20 20  nName,  0, 1,   
10a0: 20 20 20 20 20 22 63 61 63 68 65 5f 73 69 7a 65       "cache_size
10b0: 22 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43  "},.      { OP_C
10c0: 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31 2c 20 30  allback,    1, 0
10d0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
10e0: 20 7d 3b 0a 20 20 20 20 69 66 28 20 70 52 69 67   };.    if( pRig
10f0: 68 74 2d 3e 7a 3d 3d 70 4c 65 66 74 2d 3e 7a 20  ht->z==pLeft->z 
1100: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  ){.      sqliteV
1110: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
1120: 41 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63  ArraySize(getCac
1130: 68 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63 68  heSize), getCach
1140: 65 53 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73  eSize);.    }els
1150: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64  e{.      int add
1160: 72 3b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a  r;.      int siz
1170: 65 20 3d 20 61 74 6f 69 28 7a 52 69 67 68 74 29  e = atoi(zRight)
1180: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 69 7a 65  ;.      if( size
1190: 3c 30 20 29 20 73 69 7a 65 20 3d 20 2d 73 69 7a  <0 ) size = -siz
11a0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42  e;.      sqliteB
11b0: 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
11c0: 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 30 29  on(pParse, 0, 0)
11d0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64  ;.      sqliteVd
11e0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e  beAddOp(v, OP_In
11f0: 74 65 67 65 72 2c 20 73 69 7a 65 2c 20 30 29 3b  teger, size, 0);
1200: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62  .      sqliteVdb
1210: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 52 65 61  eAddOp(v, OP_Rea
1220: 64 43 6f 6f 6b 69 65 2c 20 30 2c 20 32 29 3b 0a  dCookie, 0, 2);.
1230: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
1240: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
1250: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 30  OP_Integer, 0, 0
1260: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  );.      sqliteV
1270: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 47  dbeAddOp(v, OP_G
1280: 65 2c 20 30 2c 20 61 64 64 72 2b 33 29 3b 0a 20  e, 0, addr+3);. 
1290: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41       sqliteVdbeA
12a0: 64 64 4f 70 28 76 2c 20 4f 50 5f 4e 65 67 61 74  ddOp(v, OP_Negat
12b0: 69 76 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  ive, 0, 0);.    
12c0: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
12d0: 70 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b 69  p(v, OP_SetCooki
12e0: 65 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20 20 20  e, 0, 2);.      
12f0: 73 71 6c 69 74 65 45 6e 64 57 72 69 74 65 4f 70  sqliteEndWriteOp
1300: 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65 29 3b  eration(pParse);
1310: 0a 20 20 20 20 20 20 64 62 2d 3e 63 61 63 68 65  .      db->cache
1320: 5f 73 69 7a 65 20 3d 20 64 62 2d 3e 63 61 63 68  _size = db->cach
1330: 65 5f 73 69 7a 65 3c 30 20 3f 20 2d 73 69 7a 65  e_size<0 ? -size
1340: 20 3a 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73   : size;.      s
1350: 71 6c 69 74 65 42 74 72 65 65 53 65 74 43 61 63  qliteBtreeSetCac
1360: 68 65 53 69 7a 65 28 64 62 2d 3e 61 44 62 5b 30  heSize(db->aDb[0
1370: 5d 2e 70 42 74 2c 20 64 62 2d 3e 63 61 63 68 65  ].pBt, db->cache
1380: 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20  _size);.    }.  
1390: 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  }else..  /*.  **
13a0: 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
13b0: 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ize.  **  PRAGMA
13c0: 20 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20   cache_size=N.  
13d0: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
13e0: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
13f0: 68 65 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c  he current local
1400: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
1410: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
1420: 20 73 69 7a 65 2e 20 20 54 68 65 20 6c 6f 63 61   size.  The loca
1430: 6c 20 73 65 74 74 69 6e 67 20 63 61 6e 20 62 65  l setting can be
1440: 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 0a   different from.
1450: 20 20 2a 2a 20 74 68 65 20 70 65 72 73 69 73 74    ** the persist
1460: 65 6e 74 20 63 61 63 68 65 20 73 69 7a 65 20 76  ent cache size v
1470: 61 6c 75 65 20 74 68 61 74 20 69 73 20 73 74 6f  alue that is sto
1480: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
1490: 61 73 65 0a 20 20 2a 2a 20 66 69 6c 65 20 69 74  ase.  ** file it
14a0: 73 65 6c 66 2e 20 20 54 68 65 20 76 61 6c 75 65  self.  The value
14b0: 20 72 65 74 75 72 6e 65 64 20 69 73 20 74 68 65   returned is the
14c0: 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
14d0: 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e  of.  ** pages in
14e0: 20 74 68 65 20 70 61 67 65 20 63 61 63 68 65 2e   the page cache.
14f0: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
1500: 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c  m sets the local
1510: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
1520: 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 74   size value.  It
1530: 20 64 6f 65 73 20 6e 6f 74 20 63 68 61 6e 67 65   does not change
1540: 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 0a   the persistent.
1550: 20 20 2a 2a 20 63 61 63 68 65 20 73 69 7a 65 20    ** cache size 
1560: 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20 64 69  stored on the di
1570: 73 6b 20 73 6f 20 74 68 65 20 63 61 63 68 65 20  sk so the cache 
1580: 73 69 7a 65 20 77 69 6c 6c 20 72 65 76 65 72 74  size will revert
1590: 0a 20 20 2a 2a 20 74 6f 20 69 74 73 20 64 65 66  .  ** to its def
15a0: 61 75 6c 74 20 76 61 6c 75 65 20 77 68 65 6e 20  ault value when 
15b0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
15c0: 63 6c 6f 73 65 64 20 61 6e 64 20 72 65 6f 70 65  closed and reope
15d0: 6e 65 64 2e 0a 20 20 2a 2a 20 4e 20 73 68 6f 75  ned..  ** N shou
15e0: 6c 64 20 62 65 20 61 20 70 6f 73 69 74 69 76 65  ld be a positive
15f0: 20 69 6e 74 65 67 65 72 2e 0a 20 20 2a 2f 0a 20   integer..  */. 
1600: 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43   if( sqliteStrIC
1610: 6d 70 28 7a 4c 65 66 74 2c 22 63 61 63 68 65 5f  mp(zLeft,"cache_
1620: 73 69 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  size")==0 ){.   
1630: 20 73 74 61 74 69 63 20 56 64 62 65 4f 70 20 67   static VdbeOp g
1640: 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d 20  etCacheSize[] = 
1650: 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c  {.      { OP_Col
1660: 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20 31 2c 20  umnName,  0, 1, 
1670: 20 20 20 20 20 20 20 22 63 61 63 68 65 5f 73 69         "cache_si
1680: 7a 65 22 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50  ze"},.      { OP
1690: 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31 2c  _Callback,    1,
16a0: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   0,        0},. 
16b0: 20 20 20 7d 3b 0a 20 20 20 20 69 66 28 20 70 52     };.    if( pR
16c0: 69 67 68 74 2d 3e 7a 3d 3d 70 4c 65 66 74 2d 3e  ight->z==pLeft->
16d0: 7a 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  z ){.      int s
16e0: 69 7a 65 20 3d 20 64 62 2d 3e 63 61 63 68 65 5f  ize = db->cache_
16f0: 73 69 7a 65 3b 3b 0a 20 20 20 20 20 20 69 66 28  size;;.      if(
1700: 20 73 69 7a 65 3c 30 20 29 20 73 69 7a 65 20 3d   size<0 ) size =
1710: 20 2d 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71   -size;.      sq
1720: 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c  liteVdbeAddOp(v,
1730: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 73 69 7a   OP_Integer, siz
1740: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
1750: 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69 73 74  iteVdbeAddOpList
1760: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65  (v, ArraySize(ge
1770: 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65 74  tCacheSize), get
1780: 43 61 63 68 65 53 69 7a 65 29 3b 0a 20 20 20 20  CacheSize);.    
1790: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
17a0: 20 73 69 7a 65 20 3d 20 61 74 6f 69 28 7a 52 69   size = atoi(zRi
17b0: 67 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ght);.      if( 
17c0: 73 69 7a 65 3c 30 20 29 20 73 69 7a 65 20 3d 20  size<0 ) size = 
17d0: 2d 73 69 7a 65 3b 0a 20 20 20 20 20 20 69 66 28  -size;.      if(
17e0: 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 3c   db->cache_size<
17f0: 30 20 29 20 73 69 7a 65 20 3d 20 2d 73 69 7a 65  0 ) size = -size
1800: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 63 61 63 68  ;.      db->cach
1810: 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20  e_size = size;. 
1820: 20 20 20 20 20 73 71 6c 69 74 65 42 74 72 65 65       sqliteBtree
1830: 53 65 74 43 61 63 68 65 53 69 7a 65 28 64 62 2d  SetCacheSize(db-
1840: 3e 61 44 62 5b 30 5d 2e 70 42 74 2c 20 64 62 2d  >aDb[0].pBt, db-
1850: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
1860: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f    }.  }else..  /
1870: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 64  *.  **  PRAGMA d
1880: 65 66 61 75 6c 74 5f 73 79 6e 63 68 72 6f 6e 6f  efault_synchrono
1890: 75 73 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  us.  **  PRAGMA 
18a0: 64 65 66 61 75 6c 74 5f 73 79 6e 63 68 72 6f 6e  default_synchron
18b0: 6f 75 73 3d 4f 4e 7c 4f 46 46 7c 4e 4f 52 4d 41  ous=ON|OFF|NORMA
18c0: 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a  L|FULL.  **.  **
18d0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
18e0: 72 65 74 75 72 6e 73 20 74 68 65 20 70 65 72 73  returns the pers
18f0: 69 73 74 65 6e 74 20 76 61 6c 75 65 20 6f 66 20  istent value of 
1900: 74 68 65 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73  the "synchronous
1910: 22 20 73 65 74 74 69 6e 67 0a 20 20 2a 2a 20 74  " setting.  ** t
1920: 68 61 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  hat is stored in
1930: 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
1940: 54 68 69 73 20 69 73 20 74 68 65 20 73 79 6e 63  This is the sync
1950: 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20  hronous setting 
1960: 74 68 61 74 0a 20 20 2a 2a 20 69 73 20 75 73 65  that.  ** is use
1970: 64 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64  d whenever the d
1980: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65  atabase is opene
1990: 64 20 75 6e 6c 65 73 73 20 6f 76 65 72 72 69 64  d unless overrid
19a0: 64 65 6e 20 62 79 20 61 20 73 65 70 61 72 61 74  den by a separat
19b0: 65 0a 20 20 2a 2a 20 22 73 79 6e 63 68 72 6f 6e  e.  ** "synchron
19c0: 6f 75 73 22 20 70 72 61 67 6d 61 2e 20 20 54 68  ous" pragma.  Th
19d0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68  e second form ch
19e0: 61 6e 67 65 73 20 74 68 65 20 70 65 72 73 69 73  anges the persis
19f0: 74 65 6e 74 20 61 6e 64 20 74 68 65 0a 20 20 2a  tent and the.  *
1a00: 2a 20 6c 6f 63 61 6c 20 73 79 6e 63 68 72 6f 6e  * local synchron
1a10: 6f 75 73 20 73 65 74 74 69 6e 67 20 74 6f 20 74  ous setting to t
1a20: 68 65 20 76 61 6c 75 65 20 67 69 76 65 6e 2e 0a  he value given..
1a30: 20 20 2a 2a 0a 20 20 2a 2a 20 49 66 20 73 79 6e    **.  ** If syn
1a40: 63 68 72 6f 6e 6f 75 73 20 69 73 20 4f 46 46 2c  chronous is OFF,
1a50: 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e 6f 74   SQLite does not
1a60: 20 61 74 74 65 6d 70 74 20 61 6e 79 20 66 73 79   attempt any fsy
1a70: 6e 63 28 29 20 73 79 73 74 65 6d 73 20 63 61 6c  nc() systems cal
1a80: 6c 73 0a 20 20 2a 2a 20 74 6f 20 6d 61 6b 65 20  ls.  ** to make 
1a90: 73 75 72 65 20 64 61 74 61 20 69 73 20 63 6f 6d  sure data is com
1aa0: 6d 69 74 74 65 64 20 74 6f 20 64 69 73 6b 2e 20  mitted to disk. 
1ab0: 20 57 72 69 74 65 20 6f 70 65 72 61 74 69 6f 6e   Write operation
1ac0: 73 20 61 72 65 20 76 65 72 79 20 66 61 73 74 2c  s are very fast,
1ad0: 0a 20 20 2a 2a 20 62 75 74 20 61 20 70 6f 77 65  .  ** but a powe
1ae0: 72 20 66 61 69 6c 75 72 65 20 63 61 6e 20 6c 65  r failure can le
1af0: 61 76 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ave the database
1b00: 20 69 6e 20 61 6e 20 69 6e 63 6f 6e 73 69 73 74   in an inconsist
1b10: 65 6e 74 20 73 74 61 74 65 2e 0a 20 20 2a 2a 20  ent state..  ** 
1b20: 49 66 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 69  If synchronous i
1b30: 73 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 2c 20  s ON or NORMAL, 
1b40: 53 51 4c 69 74 65 20 77 69 6c 6c 20 64 6f 20 61  SQLite will do a
1b50: 6e 20 66 73 79 6e 63 28 29 20 73 79 73 74 65 6d  n fsync() system
1b60: 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 6d 61   call to.  ** ma
1b70: 6b 65 20 73 75 72 65 20 64 61 74 61 20 69 73 20  ke sure data is 
1b80: 62 65 69 6e 67 20 77 72 69 74 74 65 6e 20 74 6f  being written to
1b90: 20 64 69 73 6b 2e 20 20 54 68 65 20 72 69 73 6b   disk.  The risk
1ba0: 20 6f 66 20 63 6f 72 72 75 70 74 69 6f 6e 20 64   of corruption d
1bb0: 75 65 20 74 6f 0a 20 20 2a 2a 20 61 20 70 6f 77  ue to.  ** a pow
1bc0: 65 72 20 6c 6f 73 73 20 69 6e 20 74 68 69 73 20  er loss in this 
1bd0: 6d 6f 64 65 20 69 73 20 6e 65 67 6c 69 67 69 62  mode is negligib
1be0: 6c 65 20 62 75 74 20 6e 6f 6e 2d 7a 65 72 6f 2e  le but non-zero.
1bf0: 20 20 49 66 20 73 79 6e 63 68 72 6f 6e 6f 75 73    If synchronous
1c00: 0a 20 20 2a 2a 20 69 73 20 46 55 4c 4c 2c 20 65  .  ** is FULL, e
1c10: 78 74 72 61 20 66 73 79 6e 63 28 29 73 20 6f 63  xtra fsync()s oc
1c20: 63 75 72 20 74 6f 20 72 65 64 75 63 65 20 74 68  cur to reduce th
1c30: 65 20 72 69 73 6b 20 6f 66 20 63 6f 72 72 75 70  e risk of corrup
1c40: 74 69 6f 6e 20 74 6f 20 6e 65 61 72 0a 20 20 2a  tion to near.  *
1c50: 2a 20 7a 65 72 6f 2c 20 62 75 74 20 77 69 74 68  * zero, but with
1c60: 20 61 20 77 72 69 74 65 20 70 65 72 66 6f 72 6d   a write perform
1c70: 61 6e 63 65 20 70 65 6e 61 6c 74 79 2e 20 20 54  ance penalty.  T
1c80: 68 65 20 64 65 66 61 75 6c 74 20 6d 6f 64 65 20  he default mode 
1c90: 69 73 20 4e 4f 52 4d 41 4c 2e 0a 20 20 2a 2f 0a  is NORMAL..  */.
1ca0: 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49    if( sqliteStrI
1cb0: 43 6d 70 28 7a 4c 65 66 74 2c 22 64 65 66 61 75  Cmp(zLeft,"defau
1cc0: 6c 74 5f 73 79 6e 63 68 72 6f 6e 6f 75 73 22 29  lt_synchronous")
1cd0: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69  ==0 ){.    stati
1ce0: 63 20 56 64 62 65 4f 70 20 67 65 74 53 79 6e 63  c VdbeOp getSync
1cf0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f  [] = {.      { O
1d00: 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30  P_ColumnName,  0
1d10: 2c 20 31 2c 20 20 20 20 20 20 20 20 22 73 79 6e  , 1,        "syn
1d20: 63 68 72 6f 6e 6f 75 73 22 7d 2c 0a 20 20 20 20  chronous"},.    
1d30: 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
1d40: 65 2c 20 20 30 2c 20 33 2c 20 20 20 20 20 20 20  e,  0, 3,       
1d50: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
1d60: 44 75 70 2c 20 20 20 20 20 20 20 20 20 30 2c 20  Dup,         0, 
1d70: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  0,        0},.  
1d80: 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20      { OP_If,    
1d90: 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20        0, 0,     
1da0: 20 20 20 30 7d 2c 20 20 2f 2a 20 33 20 2a 2f 0a     0},  /* 3 */.
1db0: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
1dc0: 6f 6f 6b 69 65 2c 20 20 30 2c 20 32 2c 20 20 20  ookie,  0, 2,   
1dd0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
1de0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
1df0: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
1e00: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4c 74 2c  ,.      { OP_Lt,
1e10: 20 20 20 20 20 20 20 20 20 20 30 2c 20 35 2c 20            0, 5, 
1e20: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
1e30: 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20   { OP_AddImm,   
1e40: 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20     1, 0,        
1e50: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43  0},.      { OP_C
1e60: 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31 2c 20 30  allback,    1, 0
1e70: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
1e80: 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20     { OP_Halt,   
1e90: 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20       0, 0,      
1ea0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
1eb0: 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 2d 31 2c  _AddImm,     -1,
1ec0: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   0,        0},  
1ed0: 2f 2a 20 31 30 20 2a 2f 0a 20 20 20 20 20 20 7b  /* 10 */.      {
1ee0: 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20   OP_Callback,   
1ef0: 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   1, 0,        0}
1f00: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 66 28 20  .    };.    if( 
1f10: 70 52 69 67 68 74 2d 3e 7a 3d 3d 70 4c 65 66 74  pRight->z==pLeft
1f20: 2d 3e 7a 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ->z ){.      int
1f30: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 56 64   addr = sqliteVd
1f40: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
1f50: 72 72 61 79 53 69 7a 65 28 67 65 74 53 79 6e 63  rraySize(getSync
1f60: 29 2c 20 67 65 74 53 79 6e 63 29 3b 0a 20 20 20  ), getSync);.   
1f70: 20 20 20 73 71 6c 69 74 65 56 64 62 65 43 68 61     sqliteVdbeCha
1f80: 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b 33 2c  ngeP2(v, addr+3,
1f90: 20 61 64 64 72 2b 31 30 29 3b 0a 20 20 20 20 7d   addr+10);.    }
1fa0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
1fb0: 61 64 64 72 3b 0a 20 20 20 20 20 20 69 6e 74 20  addr;.      int 
1fc0: 73 69 7a 65 20 3d 20 64 62 2d 3e 63 61 63 68 65  size = db->cache
1fd0: 5f 73 69 7a 65 3b 0a 20 20 20 20 20 20 69 66 28  _size;.      if(
1fe0: 20 73 69 7a 65 3c 30 20 29 20 73 69 7a 65 20 3d   size<0 ) size =
1ff0: 20 2d 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71   -size;.      sq
2000: 6c 69 74 65 42 65 67 69 6e 57 72 69 74 65 4f 70  liteBeginWriteOp
2010: 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20  eration(pParse, 
2020: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  0, 0);.      sql
2030: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
2040: 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 30  OP_ReadCookie, 0
2050: 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 2);.      sqli
2060: 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  teVdbeAddOp(v, O
2070: 50 5f 44 75 70 2c 20 30 2c 20 30 29 3b 0a 20 20  P_Dup, 0, 0);.  
2080: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
2090: 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  eVdbeAddOp(v, OP
20a0: 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 30 29 3b  _Integer, 0, 0);
20b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62  .      sqliteVdb
20c0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4e 65 2c  eAddOp(v, OP_Ne,
20d0: 20 30 2c 20 61 64 64 72 2b 33 29 3b 0a 20 20 20   0, addr+3);.   
20e0: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
20f0: 4f 70 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  Op(v, OP_AddImm,
2100: 20 4d 41 58 5f 50 41 47 45 53 2c 20 30 29 3b 0a   MAX_PAGES, 0);.
2110: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
2120: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 41 62 73 56  AddOp(v, OP_AbsV
2130: 61 6c 75 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20  alue, 0, 0);.   
2140: 20 20 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65     db->safety_le
2150: 76 65 6c 20 3d 20 67 65 74 53 61 66 65 74 79 4c  vel = getSafetyL
2160: 65 76 65 6c 28 7a 52 69 67 68 74 29 2b 31 3b 0a  evel(zRight)+1;.
2170: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 73 61        if( db->sa
2180: 66 65 74 79 5f 6c 65 76 65 6c 3d 3d 31 20 29 7b  fety_level==1 ){
2190: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56  .        sqliteV
21a0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4e  dbeAddOp(v, OP_N
21b0: 65 67 61 74 69 76 65 2c 20 30 2c 20 30 29 3b 0a  egative, 0, 0);.
21c0: 20 20 20 20 20 20 20 20 73 69 7a 65 20 3d 20 2d          size = -
21d0: 73 69 7a 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  size;.      }.  
21e0: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64      sqliteVdbeAd
21f0: 64 4f 70 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  dOp(v, OP_SetCoo
2200: 6b 69 65 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20  kie, 0, 2);.    
2210: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
2220: 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  p(v, OP_Integer,
2230: 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65   db->safety_leve
2240: 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  l, 0);.      sql
2250: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
2260: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 30 2c  OP_SetCookie, 0,
2270: 20 33 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   3);.      sqlit
2280: 65 45 6e 64 57 72 69 74 65 4f 70 65 72 61 74 69  eEndWriteOperati
2290: 6f 6e 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  on(pParse);.    
22a0: 20 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65    db->cache_size
22b0: 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73   = size;.      s
22c0: 71 6c 69 74 65 42 74 72 65 65 53 65 74 43 61 63  qliteBtreeSetCac
22d0: 68 65 53 69 7a 65 28 64 62 2d 3e 61 44 62 5b 30  heSize(db->aDb[0
22e0: 5d 2e 70 42 74 2c 20 64 62 2d 3e 63 61 63 68 65  ].pBt, db->cache
22f0: 5f 73 69 7a 65 29 3b 0a 20 20 20 20 20 20 73 71  _size);.      sq
2300: 6c 69 74 65 42 74 72 65 65 53 65 74 53 61 66 65  liteBtreeSetSafe
2310: 74 79 4c 65 76 65 6c 28 64 62 2d 3e 61 44 62 5b  tyLevel(db->aDb[
2320: 30 5d 2e 70 42 74 2c 20 64 62 2d 3e 73 61 66 65  0].pBt, db->safe
2330: 74 79 5f 6c 65 76 65 6c 29 3b 0a 20 20 20 20 7d  ty_level);.    }
2340: 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20  .  }else..  /*. 
2350: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 79 6e   **   PRAGMA syn
2360: 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20 20  chronous.  **   
2370: 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f  PRAGMA synchrono
2380: 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c  us=OFF|ON|NORMAL
2390: 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20  |FULL.  **.  ** 
23a0: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
23b0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
23c0: 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73   the synchronous
23d0: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
23e0: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
23f0: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
2400: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
2410: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
2420: 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c   the.  ** defaul
2430: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  t value will be 
2440: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
2450: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
2460: 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e  ase is.  ** open
2470: 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  ed..  */.  if( s
2480: 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 4c 65  qliteStrICmp(zLe
2490: 66 74 2c 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22  ft,"synchronous"
24a0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74  )==0 ){.    stat
24b0: 69 63 20 56 64 62 65 4f 70 20 67 65 74 53 79 6e  ic VdbeOp getSyn
24c0: 63 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  c[] = {.      { 
24d0: 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20  OP_ColumnName,  
24e0: 30 2c 20 31 2c 20 20 20 20 20 20 20 20 22 73 79  0, 1,        "sy
24f0: 6e 63 68 72 6f 6e 6f 75 73 22 7d 2c 0a 20 20 20  nchronous"},.   
2500: 20 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b     { OP_Callback
2510: 2c 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20  ,    1, 0,      
2520: 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20    0},.    };.   
2530: 20 69 66 28 20 70 52 69 67 68 74 2d 3e 7a 3d 3d   if( pRight->z==
2540: 70 4c 65 66 74 2d 3e 7a 20 29 7b 0a 20 20 20 20  pLeft->z ){.    
2550: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
2560: 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  p(v, OP_Integer,
2570: 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65   db->safety_leve
2580: 6c 2d 31 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  l-1, 0);.      s
2590: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69  qliteVdbeAddOpLi
25a0: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
25b0: 67 65 74 53 79 6e 63 29 2c 20 67 65 74 53 79 6e  getSync), getSyn
25c0: 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  c);.    }else{. 
25d0: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
25e0: 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 3b 0a  db->cache_size;.
25f0: 20 20 20 20 20 20 69 66 28 20 73 69 7a 65 3c 30        if( size<0
2600: 20 29 20 73 69 7a 65 20 3d 20 2d 73 69 7a 65 3b   ) size = -size;
2610: 0a 20 20 20 20 20 20 64 62 2d 3e 73 61 66 65 74  .      db->safet
2620: 79 5f 6c 65 76 65 6c 20 3d 20 67 65 74 53 61 66  y_level = getSaf
2630: 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74 29  etyLevel(zRight)
2640: 2b 31 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62  +1;.      if( db
2650: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 3d 3d  ->safety_level==
2660: 31 20 29 20 73 69 7a 65 20 3d 20 2d 73 69 7a 65  1 ) size = -size
2670: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 63 61 63 68  ;.      db->cach
2680: 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20  e_size = size;. 
2690: 20 20 20 20 20 73 71 6c 69 74 65 42 74 72 65 65       sqliteBtree
26a0: 53 65 74 43 61 63 68 65 53 69 7a 65 28 64 62 2d  SetCacheSize(db-
26b0: 3e 61 44 62 5b 30 5d 2e 70 42 74 2c 20 64 62 2d  >aDb[0].pBt, db-
26c0: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
26d0: 20 20 20 20 73 71 6c 69 74 65 42 74 72 65 65 53      sqliteBtreeS
26e0: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 64 62  etSafetyLevel(db
26f0: 2d 3e 61 44 62 5b 30 5d 2e 70 42 74 2c 20 64 62  ->aDb[0].pBt, db
2700: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 29 3b  ->safety_level);
2710: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
2720: 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49    if( sqliteStrI
2730: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 74 72 69 67  Cmp(zLeft, "trig
2740: 67 65 72 5f 6f 76 65 72 68 65 61 64 5f 74 65 73  ger_overhead_tes
2750: 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  t")==0 ){.    if
2760: 28 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  ( getBoolean(zRi
2770: 67 68 74 29 20 29 7b 0a 20 20 20 20 20 20 61 6c  ght) ){.      al
2780: 77 61 79 73 5f 63 6f 64 65 5f 74 72 69 67 67 65  ways_code_trigge
2790: 72 5f 73 65 74 75 70 20 3d 20 31 3b 0a 20 20 20  r_setup = 1;.   
27a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 6c   }else{.      al
27b0: 77 61 79 73 5f 63 6f 64 65 5f 74 72 69 67 67 65  ways_code_trigge
27c0: 72 5f 73 65 74 75 70 20 3d 20 30 3b 0a 20 20 20  r_setup = 0;.   
27d0: 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
27e0: 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28  ( sqliteStrICmp(
27f0: 7a 4c 65 66 74 2c 20 22 76 64 62 65 5f 74 72 61  zLeft, "vdbe_tra
2800: 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  ce")==0 ){.    i
2810: 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  f( getBoolean(zR
2820: 69 67 68 74 29 20 29 7b 0a 20 20 20 20 20 20 64  ight) ){.      d
2830: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
2840: 54 45 5f 56 64 62 65 54 72 61 63 65 3b 0a 20 20  TE_VdbeTrace;.  
2850: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
2860: 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c  b->flags &= ~SQL
2870: 49 54 45 5f 56 64 62 65 54 72 61 63 65 3b 0a 20  ITE_VdbeTrace;. 
2880: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
2890: 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d  if( sqliteStrICm
28a0: 70 28 7a 4c 65 66 74 2c 20 22 66 75 6c 6c 5f 63  p(zLeft, "full_c
28b0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 29 3d 3d 30  olumn_names")==0
28c0: 20 29 7b 0a 20 20 20 20 69 66 28 20 67 65 74 42   ){.    if( getB
28d0: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 29 20 29  oolean(zRight) )
28e0: 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67  {.      db->flag
28f0: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 46 75 6c 6c  s |= SQLITE_Full
2900: 43 6f 6c 4e 61 6d 65 73 3b 0a 20 20 20 20 7d 65  ColNames;.    }e
2910: 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66  lse{.      db->f
2920: 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f  lags &= ~SQLITE_
2930: 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 3b 0a 20 20  FullColNames;.  
2940: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
2950: 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70  f( sqliteStrICmp
2960: 28 7a 4c 65 66 74 2c 20 22 73 68 6f 72 74 5f 63  (zLeft, "short_c
2970: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 29 3d 3d 30  olumn_names")==0
2980: 20 29 7b 0a 20 20 20 20 69 66 28 20 67 65 74 42   ){.    if( getB
2990: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 29 20 29  oolean(zRight) )
29a0: 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67  {.      db->flag
29b0: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 53 68 6f 72  s |= SQLITE_Shor
29c0: 74 43 6f 6c 4e 61 6d 65 73 3b 0a 20 20 20 20 7d  tColNames;.    }
29d0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
29e0: 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45  flags &= ~SQLITE
29f0: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 3b 0a  _ShortColNames;.
2a00: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
2a10: 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43   if( sqliteStrIC
2a20: 6d 70 28 7a 4c 65 66 74 2c 20 22 73 68 6f 77 5f  mp(zLeft, "show_
2a30: 64 61 74 61 74 79 70 65 73 22 29 3d 3d 30 20 29  datatypes")==0 )
2a40: 7b 0a 20 20 20 20 69 66 28 20 67 65 74 42 6f 6f  {.    if( getBoo
2a50: 6c 65 61 6e 28 7a 52 69 67 68 74 29 20 29 7b 0a  lean(zRight) ){.
2a60: 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
2a70: 7c 3d 20 53 51 4c 49 54 45 5f 52 65 70 6f 72 74  |= SQLITE_Report
2a80: 54 79 70 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65  Types;.    }else
2a90: 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67  {.      db->flag
2aa0: 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 52 65 70  s &= ~SQLITE_Rep
2ab0: 6f 72 74 54 79 70 65 73 3b 0a 20 20 20 20 7d 0a  ortTypes;.    }.
2ac0: 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 73    }else..  if( s
2ad0: 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 4c 65  qliteStrICmp(zLe
2ae0: 66 74 2c 20 22 63 6f 75 6e 74 5f 63 68 61 6e 67  ft, "count_chang
2af0: 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  es")==0 ){.    i
2b00: 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  f( getBoolean(zR
2b10: 69 67 68 74 29 20 29 7b 0a 20 20 20 20 20 20 64  ight) ){.      d
2b20: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
2b30: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 3b 0a 20 20  TE_CountRows;.  
2b40: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
2b50: 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c  b->flags &= ~SQL
2b60: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 3b 0a 20  ITE_CountRows;. 
2b70: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
2b80: 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d  if( sqliteStrICm
2b90: 70 28 7a 4c 65 66 74 2c 20 22 65 6d 70 74 79 5f  p(zLeft, "empty_
2ba0: 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61 63 6b 73  result_callbacks
2bb0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  ")==0 ){.    if(
2bc0: 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67   getBoolean(zRig
2bd0: 68 74 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ht) ){.      db-
2be0: 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
2bf0: 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 3b 0a 20  _NullCallback;. 
2c00: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2c10: 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53 51  db->flags &= ~SQ
2c20: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
2c30: 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  k;.    }.  }else
2c40: 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74  ..  if( sqliteSt
2c50: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 74 61  rICmp(zLeft, "ta
2c60: 62 6c 65 5f 69 6e 66 6f 22 29 3d 3d 30 20 29 7b  ble_info")==0 ){
2c70: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
2c80: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
2c90: 69 74 65 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  iteFindTable(db,
2ca0: 20 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20 20 20   zRight, 0);.   
2cb0: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
2cc0: 20 20 20 73 74 61 74 69 63 20 56 64 62 65 4f 70     static VdbeOp
2cd0: 20 74 61 62 6c 65 49 6e 66 6f 50 72 65 66 61 63   tableInfoPrefac
2ce0: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  e[] = {.        
2cf0: 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  { OP_ColumnName,
2d00: 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 22 63    0, 0,       "c
2d10: 69 64 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b 20  id"},.        { 
2d20: 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20  OP_ColumnName,  
2d30: 31 2c 20 30 2c 20 20 20 20 20 20 20 22 6e 61 6d  1, 0,       "nam
2d40: 65 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b 20 4f  e"},.        { O
2d50: 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 32  P_ColumnName,  2
2d60: 2c 20 30 2c 20 20 20 20 20 20 20 22 74 79 70 65  , 0,       "type
2d70: 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  "},.        { OP
2d80: 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 33 2c  _ColumnName,  3,
2d90: 20 30 2c 20 20 20 20 20 20 20 22 6e 6f 74 6e 75   0,       "notnu
2da0: 6c 6c 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b 20  ll"},.        { 
2db0: 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20  OP_ColumnName,  
2dc0: 34 2c 20 30 2c 20 20 20 20 20 20 20 22 64 66 6c  4, 0,       "dfl
2dd0: 74 5f 76 61 6c 75 65 22 7d 2c 0a 20 20 20 20 20  t_value"},.     
2de0: 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61     { OP_ColumnNa
2df0: 6d 65 2c 20 20 35 2c 20 31 2c 20 20 20 20 20 20  me,  5, 1,      
2e00: 20 22 70 6b 22 7d 2c 0a 20 20 20 20 20 20 7d 3b   "pk"},.      };
2e10: 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  .      int i;.  
2e20: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64      sqliteVdbeAd
2e30: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
2e40: 53 69 7a 65 28 74 61 62 6c 65 49 6e 66 6f 50 72  Size(tableInfoPr
2e50: 65 66 61 63 65 29 2c 20 74 61 62 6c 65 49 6e 66  eface), tableInf
2e60: 6f 50 72 65 66 61 63 65 29 3b 0a 20 20 20 20 20  oPreface);.     
2e70: 20 73 71 6c 69 74 65 56 69 65 77 47 65 74 43 6f   sqliteViewGetCo
2e80: 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65  lumnNames(pParse
2e90: 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66  , pTab);.      f
2ea0: 6f 72 28 69 3d 30 3b 20 69 3c 70 54 61 62 2d 3e  or(i=0; i<pTab->
2eb0: 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nCol; i++){.    
2ec0: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64      sqliteVdbeAd
2ed0: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
2ee0: 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20 20 20 20  r, i, 0);.      
2ef0: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
2f00: 70 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c 20  p(v, OP_String, 
2f10: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  0, 0);.        s
2f20: 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65 50  qliteVdbeChangeP
2f30: 33 28 76 2c 20 2d 31 2c 20 70 54 61 62 2d 3e 61  3(v, -1, pTab->a
2f40: 43 6f 6c 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50 33  Col[i].zName, P3
2f50: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
2f60: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
2f70: 70 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c 20  p(v, OP_String, 
2f80: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  0, 0);.        s
2f90: 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65 50  qliteVdbeChangeP
2fa0: 33 28 76 2c 20 2d 31 2c 20 0a 20 20 20 20 20 20  3(v, -1, .      
2fb0: 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b       pTab->aCol[
2fc0: 69 5d 2e 7a 54 79 70 65 20 3f 20 70 54 61 62 2d  i].zType ? pTab-
2fd0: 3e 61 43 6f 6c 5b 69 5d 2e 7a 54 79 70 65 20 3a  >aCol[i].zType :
2fe0: 20 22 6e 75 6d 65 72 69 63 22 2c 20 50 33 5f 53   "numeric", P3_S
2ff0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
3000: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
3010: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
3020: 54 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 6e 6f 74  Tab->aCol[i].not
3030: 4e 75 6c 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20  Null, 0);.      
3040: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
3050: 70 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c 20  p(v, OP_String, 
3060: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  0, 0);.        s
3070: 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65 50  qliteVdbeChangeP
3080: 33 28 76 2c 20 2d 31 2c 20 70 54 61 62 2d 3e 61  3(v, -1, pTab->a
3090: 43 6f 6c 5b 69 5d 2e 7a 44 66 6c 74 2c 20 50 33  Col[i].zDflt, P3
30a0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
30b0: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
30c0: 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  p(v, OP_Integer,
30d0: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 69   pTab->aCol[i].i
30e0: 73 50 72 69 6d 4b 65 79 2c 20 30 29 3b 0a 20 20  sPrimKey, 0);.  
30f0: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
3100: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c  AddOp(v, OP_Call
3110: 62 61 63 6b 2c 20 36 2c 20 30 29 3b 0a 20 20 20  back, 6, 0);.   
3120: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
3130: 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  se..  if( sqlite
3140: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
3150: 69 6e 64 65 78 5f 69 6e 66 6f 22 29 3d 3d 30 20  index_info")==0 
3160: 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  ){.    Index *pI
3170: 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  dx;.    Table *p
3180: 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d 20  Tab;.    pIdx = 
3190: 73 71 6c 69 74 65 46 69 6e 64 49 6e 64 65 78 28  sqliteFindIndex(
31a0: 64 62 2c 20 7a 52 69 67 68 74 2c 20 30 29 3b 0a  db, zRight, 0);.
31b0: 20 20 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a      if( pIdx ){.
31c0: 20 20 20 20 20 20 73 74 61 74 69 63 20 56 64 62        static Vdb
31d0: 65 4f 70 20 74 61 62 6c 65 49 6e 66 6f 50 72 65  eOp tableInfoPre
31e0: 66 61 63 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  face[] = {.     
31f0: 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61     { OP_ColumnNa
3200: 6d 65 2c 20 20 30 2c 20 30 2c 20 20 20 20 20 20  me,  0, 0,      
3210: 20 22 73 65 71 6e 6f 22 7d 2c 0a 20 20 20 20 20   "seqno"},.     
3220: 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61     { OP_ColumnNa
3230: 6d 65 2c 20 20 31 2c 20 30 2c 20 20 20 20 20 20  me,  1, 0,      
3240: 20 22 63 69 64 22 7d 2c 0a 20 20 20 20 20 20 20   "cid"},.       
3250: 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65   { OP_ColumnName
3260: 2c 20 20 32 2c 20 31 2c 20 20 20 20 20 20 20 22  ,  2, 1,       "
3270: 6e 61 6d 65 22 7d 2c 0a 20 20 20 20 20 20 7d 3b  name"},.      };
3280: 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  .      int i;.  
3290: 20 20 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d      pTab = pIdx-
32a0: 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73  >pTable;.      s
32b0: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69  qliteVdbeAddOpLi
32c0: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
32d0: 74 61 62 6c 65 49 6e 66 6f 50 72 65 66 61 63 65  tableInfoPreface
32e0: 29 2c 20 74 61 62 6c 65 49 6e 66 6f 50 72 65 66  ), tableInfoPref
32f0: 61 63 65 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  ace);.      for(
3300: 69 3d 30 3b 20 69 3c 70 49 64 78 2d 3e 6e 43 6f  i=0; i<pIdx->nCo
3310: 6c 75 6d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  lumn; i++){.    
3320: 20 20 20 20 69 6e 74 20 63 6e 75 6d 20 3d 20 70      int cnum = p
3330: 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d  Idx->aiColumn[i]
3340: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
3350: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
3360: 49 6e 74 65 67 65 72 2c 20 69 2c 20 30 29 3b 0a  Integer, i, 0);.
3370: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64          sqliteVd
3380: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e  beAddOp(v, OP_In
3390: 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20 30 29 3b  teger, cnum, 0);
33a0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56  .        sqliteV
33b0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53  dbeAddOp(v, OP_S
33c0: 74 72 69 6e 67 2c 20 30 2c 20 30 29 3b 0a 20 20  tring, 0, 0);.  
33d0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54        assert( pT
33e0: 61 62 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b  ab->nCol>cnum );
33f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56  .        sqliteV
3400: 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 2d  dbeChangeP3(v, -
3410: 31 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e  1, pTab->aCol[cn
3420: 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 50 33 5f 53 54  um].zName, P3_ST
3430: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
3440: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76  qliteVdbeAddOp(v
3450: 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 33  , OP_Callback, 3
3460: 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 0);.      }.  
3470: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
3480: 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70  f( sqliteStrICmp
3490: 28 7a 4c 65 66 74 2c 20 22 69 6e 64 65 78 5f 6c  (zLeft, "index_l
34a0: 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ist")==0 ){.    
34b0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
34c0: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
34d0: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 46    pTab = sqliteF
34e0: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69  indTable(db, zRi
34f0: 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 69 66 28  ght, 0);.    if(
3500: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76   pTab ){.      v
3510: 20 3d 20 73 71 6c 69 74 65 47 65 74 56 64 62 65   = sqliteGetVdbe
3520: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
3530: 70 49 64 78 20 3d 20 70 54 61 62 2d 3e 70 49 6e  pIdx = pTab->pIn
3540: 64 65 78 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  dex;.    }.    i
3550: 66 28 20 70 54 61 62 20 26 26 20 70 49 64 78 20  f( pTab && pIdx 
3560: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 20 3d  ){.      int i =
3570: 20 30 3b 20 0a 20 20 20 20 20 20 73 74 61 74 69   0; .      stati
3580: 63 20 56 64 62 65 4f 70 20 69 6e 64 65 78 4c 69  c VdbeOp indexLi
3590: 73 74 50 72 65 66 61 63 65 5b 5d 20 3d 20 7b 0a  stPreface[] = {.
35a0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c          { OP_Col
35b0: 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20 30 2c 20  umnName,  0, 0, 
35c0: 20 20 20 20 20 20 22 73 65 71 22 7d 2c 0a 20 20        "seq"},.  
35d0: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d        { OP_Colum
35e0: 6e 4e 61 6d 65 2c 20 20 31 2c 20 30 2c 20 20 20  nName,  1, 0,   
35f0: 20 20 20 20 22 6e 61 6d 65 22 7d 2c 0a 20 20 20      "name"},.   
3600: 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e       { OP_Column
3610: 4e 61 6d 65 2c 20 20 32 2c 20 31 2c 20 20 20 20  Name,  2, 1,    
3620: 20 20 20 22 75 6e 69 71 75 65 22 7d 2c 0a 20 20     "unique"},.  
3630: 20 20 20 20 7d 3b 0a 0a 20 20 20 20 20 20 73 71      };..      sq
3640: 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69 73  liteVdbeAddOpLis
3650: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 69  t(v, ArraySize(i
3660: 6e 64 65 78 4c 69 73 74 50 72 65 66 61 63 65 29  ndexListPreface)
3670: 2c 20 69 6e 64 65 78 4c 69 73 74 50 72 65 66 61  , indexListPrefa
3680: 63 65 29 3b 0a 20 20 20 20 20 20 77 68 69 6c 65  ce);.      while
3690: 28 70 49 64 78 29 7b 0a 20 20 20 20 20 20 20 20  (pIdx){.        
36a0: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
36b0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
36c0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
36d0: 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c  liteVdbeAddOp(v,
36e0: 20 4f 50 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30   OP_String, 0, 0
36f0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
3700: 65 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c  eVdbeChangeP3(v,
3710: 20 2d 31 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65   -1, pIdx->zName
3720: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
3730: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
3740: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65  AddOp(v, OP_Inte
3750: 67 65 72 2c 20 70 49 64 78 2d 3e 6f 6e 45 72 72  ger, pIdx->onErr
3760: 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 2c 20 30 29 3b  or!=OE_None, 0);
3770: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56  .        sqliteV
3780: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43  dbeAddOp(v, OP_C
3790: 61 6c 6c 62 61 63 6b 2c 20 33 2c 20 30 29 3b 0a  allback, 3, 0);.
37a0: 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20          ++i;.   
37b0: 20 20 20 20 20 70 49 64 78 20 3d 20 70 49 64 78       pIdx = pIdx
37c0: 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 7d  ->pNext;.      }
37d0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
37e0: 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49    if( sqliteStrI
37f0: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 66 6f 72 65  Cmp(zLeft, "fore
3800: 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 29 3d 3d  ign_key_list")==
3810: 30 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70  0 ){.    FKey *p
3820: 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  FK;.    Table *p
3830: 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  Tab;.    pTab = 
3840: 73 71 6c 69 74 65 46 69 6e 64 54 61 62 6c 65 28  sqliteFindTable(
3850: 64 62 2c 20 7a 52 69 67 68 74 2c 20 30 29 3b 0a  db, zRight, 0);.
3860: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
3870: 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
3880: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
3890: 0a 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54 61  .      pFK = pTa
38a0: 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 7d 0a  b->pFKey;.    }.
38b0: 20 20 20 20 69 66 28 20 70 54 61 62 20 26 26 20      if( pTab && 
38c0: 70 46 4b 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  pFK ){.      int
38d0: 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 73   i = 0; .      s
38e0: 74 61 74 69 63 20 56 64 62 65 4f 70 20 69 6e 64  tatic VdbeOp ind
38f0: 65 78 4c 69 73 74 50 72 65 66 61 63 65 5b 5d 20  exListPreface[] 
3900: 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
3910: 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c  _ColumnName,  0,
3920: 20 30 2c 20 20 20 20 20 20 20 22 69 64 22 7d 2c   0,       "id"},
3930: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f  .        { OP_Co
3940: 6c 75 6d 6e 4e 61 6d 65 2c 20 20 31 2c 20 30 2c  lumnName,  1, 0,
3950: 20 20 20 20 20 20 20 22 73 65 71 22 7d 2c 0a 20         "seq"},. 
3960: 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75         { OP_Colu
3970: 6d 6e 4e 61 6d 65 2c 20 20 32 2c 20 30 2c 20 20  mnName,  2, 0,  
3980: 20 20 20 20 20 22 74 61 62 6c 65 22 7d 2c 0a 20       "table"},. 
3990: 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75         { OP_Colu
39a0: 6d 6e 4e 61 6d 65 2c 20 20 33 2c 20 30 2c 20 20  mnName,  3, 0,  
39b0: 20 20 20 20 20 22 66 72 6f 6d 22 7d 2c 0a 20 20       "from"},.  
39c0: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d        { OP_Colum
39d0: 6e 4e 61 6d 65 2c 20 20 34 2c 20 31 2c 20 20 20  nName,  4, 1,   
39e0: 20 20 20 20 22 74 6f 22 7d 2c 0a 20 20 20 20 20      "to"},.     
39f0: 20 7d 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74   };..      sqlit
3a00: 65 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  eVdbeAddOpList(v
3a10: 2c 20 41 72 72 61 79 53 69 7a 65 28 69 6e 64 65  , ArraySize(inde
3a20: 78 4c 69 73 74 50 72 65 66 61 63 65 29 2c 20 69  xListPreface), i
3a30: 6e 64 65 78 4c 69 73 74 50 72 65 66 61 63 65 29  ndexListPreface)
3a40: 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 70 46  ;.      while(pF
3a50: 4b 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  K){.        int 
3a60: 6a 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  j;.        for(j
3a70: 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b  =0; j<pFK->nCol;
3a80: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
3a90: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
3aa0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
3ab0: 69 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  i, 0);.         
3ac0: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
3ad0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
3ae0: 6a 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  j, 0);.         
3af0: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
3b00: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c 20 30  (v, OP_String, 0
3b10: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
3b20: 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65  sqliteVdbeChange
3b30: 50 33 28 76 2c 20 2d 31 2c 20 70 46 4b 2d 3e 7a  P3(v, -1, pFK->z
3b40: 54 6f 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  To, P3_STATIC);.
3b50: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
3b60: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
3b70: 53 74 72 69 6e 67 2c 20 30 2c 20 30 29 3b 0a 20  String, 0, 0);. 
3b80: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56           sqliteV
3b90: 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 2d  dbeChangeP3(v, -
3ba0: 31 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70 46  1, pTab->aCol[pF
3bb0: 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d  K->aCol[j].iFrom
3bc0: 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ].zName,.       
3bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3be0: 20 20 20 20 20 20 50 33 5f 53 54 41 54 49 43 29        P3_STATIC)
3bf0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
3c00: 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  teVdbeAddOp(v, O
3c10: 50 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30 29 3b  P_String, 0, 0);
3c20: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
3c30: 65 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c  eVdbeChangeP3(v,
3c40: 20 2d 31 2c 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a   -1, pFK->aCol[j
3c50: 5d 2e 7a 43 6f 6c 2c 20 50 33 5f 53 54 41 54 49  ].zCol, P3_STATI
3c60: 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  C);.          sq
3c70: 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c  liteVdbeAddOp(v,
3c80: 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 35 2c   OP_Callback, 5,
3c90: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   0);.        }. 
3ca0: 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20         ++i;.    
3cb0: 20 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70      pFK = pFK->p
3cc0: 4e 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20  NextFrom;.      
3cd0: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  }.    }.  }else.
3ce0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72  .  if( sqliteStr
3cf0: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 64 61 74  ICmp(zLeft, "dat
3d00: 61 62 61 73 65 5f 6c 69 73 74 22 29 3d 3d 30 20  abase_list")==0 
3d10: 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  ){.    int i;.  
3d20: 20 20 73 74 61 74 69 63 20 56 64 62 65 4f 70 20    static VdbeOp 
3d30: 69 6e 64 65 78 4c 69 73 74 50 72 65 66 61 63 65  indexListPreface
3d40: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f  [] = {.      { O
3d50: 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30  P_ColumnName,  0
3d60: 2c 20 30 2c 20 20 20 20 20 20 20 22 73 65 71 22  , 0,       "seq"
3d70: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f  },.      { OP_Co
3d80: 6c 75 6d 6e 4e 61 6d 65 2c 20 20 31 2c 20 30 2c  lumnName,  1, 0,
3d90: 20 20 20 20 20 20 20 22 6e 61 6d 65 22 7d 2c 0a         "name"},.
3da0: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d        { OP_Colum
3db0: 6e 4e 61 6d 65 2c 20 20 32 2c 20 31 2c 20 20 20  nName,  2, 1,   
3dc0: 20 20 20 20 22 66 69 6c 65 22 7d 2c 0a 20 20 20      "file"},.   
3dd0: 20 7d 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65 56   };..    sqliteV
3de0: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
3df0: 41 72 72 61 79 53 69 7a 65 28 69 6e 64 65 78 4c  ArraySize(indexL
3e00: 69 73 74 50 72 65 66 61 63 65 29 2c 20 69 6e 64  istPreface), ind
3e10: 65 78 4c 69 73 74 50 72 65 66 61 63 65 29 3b 0a  exListPreface);.
3e20: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
3e30: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
3e40: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
3e50: 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74  i].pBt==0 ) cont
3e60: 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73 73 65  inue;.      asse
3e70: 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  rt( db->aDb[i].z
3e80: 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20 20  Name!=0 );.     
3e90: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
3ea0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
3eb0: 69 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  i, 0);.      sql
3ec0: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
3ed0: 4f 50 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30 29  OP_String, 0, 0)
3ee0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64  ;.      sqliteVd
3ef0: 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 2d 31  beChangeP3(v, -1
3f00: 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
3f10: 6d 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  me, P3_STATIC);.
3f20: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
3f30: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 74 72 69  AddOp(v, OP_Stri
3f40: 6e 67 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  ng, 0, 0);.     
3f50: 20 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67   sqliteVdbeChang
3f60: 65 50 33 28 76 2c 20 2d 31 2c 20 73 71 6c 69 74  eP3(v, -1, sqlit
3f70: 65 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d  eBtreeGetFilenam
3f80: 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  e(db->aDb[i].pBt
3f90: 29 2c 0a 20 20 20 20 20 20 20 20 20 20 20 50 33  ),.           P3
3fa0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
3fb0: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
3fc0: 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20  v, OP_Callback, 
3fd0: 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  3, 0);.    }.  }
3fe0: 65 6c 73 65 0a 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  else...  /*.  **
3ff0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
4000: 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47  tore.  **   PRAG
4010: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
4020: 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72  "default"|"memor
4030: 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20  y"|"file".  **. 
4040: 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65   ** Return or se
4050: 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  t the local valu
4060: 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74  e of the temp_st
4070: 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ore flag.  Chang
4080: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
4090: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
40a0: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
40b0: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
40c0: 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a  and the default.
40d0: 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20    ** value will 
40e0: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
40f0: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
4100: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64  tabase is opened
4110: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65  ..  **.  ** Note
4120: 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73 73   that it is poss
4130: 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62  ible for the lib
4140: 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  rary compile-tim
4150: 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a  e options to.  *
4160: 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20  * override this 
4170: 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 69  setting.  */.  i
4180: 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70  f( sqliteStrICmp
4190: 28 7a 4c 65 66 74 2c 20 22 74 65 6d 70 5f 73 74  (zLeft, "temp_st
41a0: 6f 72 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ore")==0 ){.    
41b0: 73 74 61 74 69 63 20 56 64 62 65 4f 70 20 67 65  static VdbeOp ge
41c0: 74 54 6d 70 44 62 4c 6f 63 5b 5d 20 3d 20 7b 0a  tTmpDbLoc[] = {.
41d0: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d        { OP_Colum
41e0: 6e 4e 61 6d 65 2c 20 20 30 2c 20 31 2c 20 20 20  nName,  0, 1,   
41f0: 20 20 20 20 20 22 74 65 6d 70 5f 73 74 6f 72 65       "temp_store
4200: 22 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43  "},.      { OP_C
4210: 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31 2c 20 30  allback,    1, 0
4220: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
4230: 20 7d 3b 0a 20 20 20 20 69 66 28 20 70 52 69 67   };.    if( pRig
4240: 68 74 2d 3e 7a 3d 3d 70 4c 65 66 74 2d 3e 7a 20  ht->z==pLeft->z 
4250: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  ){.      sqliteV
4260: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49  dbeAddOp(v, OP_I
4270: 6e 74 65 67 65 72 2c 20 64 62 2d 3e 74 65 6d 70  nteger, db->temp
4280: 5f 73 74 6f 72 65 2c 20 30 29 3b 0a 20 20 20 20  _store, 0);.    
4290: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
42a0: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
42b0: 7a 65 28 67 65 74 54 6d 70 44 62 4c 6f 63 29 2c  ze(getTmpDbLoc),
42c0: 20 67 65 74 54 6d 70 44 62 4c 6f 63 29 3b 0a 20   getTmpDbLoc);. 
42d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
42e0: 69 66 20 28 26 64 62 2d 3e 61 44 62 5b 31 5d 2e  if (&db->aDb[1].
42f0: 70 42 74 20 21 3d 20 30 29 20 7b 0a 09 73 71 6c  pBt != 0) {..sql
4300: 69 74 65 45 72 72 6f 72 4d 73 67 28 70 50 61 72  iteErrorMsg(pPar
4310: 73 65 2c 20 22 54 68 65 20 74 65 6d 70 6f 72 61  se, "The tempora
4320: 72 79 20 64 61 74 61 62 61 73 65 20 61 6c 72 65  ry database alre
4330: 61 64 79 20 65 78 69 73 74 73 20 2d 20 22 0a 20  ady exists - ". 
4340: 20 20 20 20 20 20 20 20 20 22 69 74 73 20 6c 6f           "its lo
4350: 63 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 20 6e 6f  cation cannot no
4360: 77 20 62 65 20 63 68 61 6e 67 65 64 22 29 3b 0a  w be changed");.
4370: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09        } else {..
4380: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
4390: 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28 7a 52   getTempStore(zR
43a0: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ight);.      }. 
43b0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
43c0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
43d0: 20 64 65 66 61 75 6c 74 5f 74 65 6d 70 5f 73 74   default_temp_st
43e0: 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ore.  **   PRAGM
43f0: 41 20 64 65 66 61 75 6c 74 5f 74 65 6d 70 5f 73  A default_temp_s
4400: 74 6f 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22  tore = "default"
4410: 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22  |"memory"|"file"
4420: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
4430: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c  n or set the val
4440: 75 65 20 6f 66 20 74 68 65 20 70 65 72 73 69 73  ue of the persis
4450: 74 65 6e 74 20 74 65 6d 70 5f 73 74 6f 72 65 20  tent temp_store 
4460: 66 6c 61 67 20 28 61 73 0a 20 20 2a 2a 20 77 65  flag (as.  ** we
4470: 6c 6c 20 61 73 20 74 68 65 20 76 61 6c 75 65 20  ll as the value 
4480: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 66 6f 72  currently in for
4490: 63 65 29 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e  ce)..  **.  ** N
44a0: 6f 74 65 20 74 68 61 74 20 69 74 20 69 73 20 70  ote that it is p
44b0: 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20  ossible for the 
44c0: 6c 69 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d  library compile-
44d0: 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a  time options to.
44e0: 20 20 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68    ** override th
44f0: 69 73 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a  is setting.  */.
4500: 20 20 69 66 28 20 73 71 6c 69 74 65 53 74 72 49    if( sqliteStrI
4510: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 64 65 66 61  Cmp(zLeft, "defa
4520: 75 6c 74 5f 74 65 6d 70 5f 73 74 6f 72 65 22 29  ult_temp_store")
4530: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69  ==0 ){.    stati
4540: 63 20 56 64 62 65 4f 70 20 67 65 74 54 6d 70 44  c VdbeOp getTmpD
4550: 62 4c 6f 63 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  bLoc[] = {.     
4560: 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65   { OP_ColumnName
4570: 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20  ,  0, 1,        
4580: 22 74 65 6d 70 5f 73 74 6f 72 65 22 7d 2c 0a 20  "temp_store"},. 
4590: 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f       { OP_ReadCo
45a0: 6f 6b 69 65 2c 20 20 30 2c 20 35 2c 20 20 20 20  okie,  0, 5,    
45b0: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
45c0: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20  OP_Callback,    
45d0: 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 7d  1, 0,        0}}
45e0: 3b 0a 20 20 20 20 69 66 28 20 70 52 69 67 68 74  ;.    if( pRight
45f0: 2d 3e 7a 3d 3d 70 4c 65 66 74 2d 3e 7a 20 29 7b  ->z==pLeft->z ){
4600: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62  .      sqliteVdb
4610: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
4620: 72 61 79 53 69 7a 65 28 67 65 74 54 6d 70 44 62  raySize(getTmpDb
4630: 4c 6f 63 29 2c 20 67 65 74 54 6d 70 44 62 4c 6f  Loc), getTmpDbLo
4640: 63 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  c);.    }else{. 
4650: 20 20 20 20 20 69 66 20 28 26 64 62 2d 3e 61 44       if (&db->aD
4660: 62 5b 31 5d 2e 70 42 74 20 21 3d 20 30 29 20 7b  b[1].pBt != 0) {
4670: 0a 09 73 71 6c 69 74 65 45 72 72 6f 72 4d 73 67  ..sqliteErrorMsg
4680: 28 70 50 61 72 73 65 2c 20 22 54 68 65 20 74 65  (pParse, "The te
4690: 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65  mporary database
46a0: 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20   already exists 
46b0: 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  - ".            
46c0: 22 69 74 73 20 6c 6f 63 61 74 69 6f 6e 20 63 61  "its location ca
46d0: 6e 6e 6f 74 20 6e 6f 77 20 62 65 20 63 68 61 6e  nnot now be chan
46e0: 67 65 64 22 29 3b 0a 20 20 20 20 20 20 7d 20 65  ged");.      } e
46f0: 6c 73 65 20 7b 0a 09 73 71 6c 69 74 65 42 65 67  lse {..sqliteBeg
4700: 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
4710: 28 70 50 61 72 73 65 2c 20 30 2c 20 30 29 3b 0a  (pParse, 0, 0);.
4720: 09 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20  .db->temp_store 
4730: 3d 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28 7a  = getTempStore(z
4740: 52 69 67 68 74 29 3b 0a 09 73 71 6c 69 74 65 56  Right);..sqliteV
4750: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49  dbeAddOp(v, OP_I
4760: 6e 74 65 67 65 72 2c 20 64 62 2d 3e 74 65 6d 70  nteger, db->temp
4770: 5f 73 74 6f 72 65 2c 20 30 29 3b 0a 09 73 71 6c  _store, 0);..sql
4780: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
4790: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 30 2c  OP_SetCookie, 0,
47a0: 20 35 29 3b 0a 09 73 71 6c 69 74 65 45 6e 64 57   5);..sqliteEndW
47b0: 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50  riteOperation(pP
47c0: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  arse);.      }. 
47d0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23 69     }.  }else..#i
47e0: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 69  fndef NDEBUG.  i
47f0: 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70  f( sqliteStrICmp
4800: 28 7a 4c 65 66 74 2c 20 22 70 61 72 73 65 72 5f  (zLeft, "parser_
4810: 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20  trace")==0 ){.  
4820: 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20 73 71    extern void sq
4830: 6c 69 74 65 50 61 72 73 65 72 54 72 61 63 65 28  liteParserTrace(
4840: 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a  FILE*, char *);.
4850: 20 20 20 20 69 66 28 20 67 65 74 42 6f 6f 6c 65      if( getBoole
4860: 61 6e 28 7a 52 69 67 68 74 29 20 29 7b 0a 20 20  an(zRight) ){.  
4870: 20 20 20 20 73 71 6c 69 74 65 50 61 72 73 65 72      sqliteParser
4880: 54 72 61 63 65 28 73 74 64 6f 75 74 2c 20 22 70  Trace(stdout, "p
4890: 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 7d  arser: ");.    }
48a0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69  else{.      sqli
48b0: 74 65 50 61 72 73 65 72 54 72 61 63 65 28 30 2c  teParserTrace(0,
48c0: 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   0);.    }.  }el
48d0: 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  se.#endif..  if(
48e0: 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a   sqliteStrICmp(z
48f0: 4c 65 66 74 2c 20 22 69 6e 74 65 67 72 69 74 79  Left, "integrity
4900: 5f 63 68 65 63 6b 22 29 3d 3d 30 20 29 7b 0a 20  _check")==0 ){. 
4910: 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64     int i, j, add
4920: 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20  r;..    /* Code 
4930: 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73  that initializes
4940: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 63   the integrity c
4950: 68 65 63 6b 20 70 72 6f 67 72 61 6d 2e 20 20 53  heck program.  S
4960: 65 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 72  et the.    ** er
4970: 72 6f 72 20 63 6f 75 6e 74 20 30 0a 20 20 20 20  ror count 0.    
4980: 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 56 64  */.    static Vd
4990: 62 65 4f 70 20 69 6e 69 74 43 6f 64 65 5b 5d 20  beOp initCode[] 
49a0: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49  = {.      { OP_I
49b0: 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 30  nteger,     0, 0
49c0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
49d0: 20 20 20 7b 20 4f 50 5f 4d 65 6d 53 74 6f 72 65     { OP_MemStore
49e0: 2c 20 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20  ,    0, 1,      
49f0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
4a00: 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c  _ColumnName,  0,
4a10: 20 31 2c 20 20 20 20 20 20 20 20 22 69 6e 74 65   1,        "inte
4a20: 67 72 69 74 79 5f 63 68 65 63 6b 22 7d 2c 0a 20  grity_check"},. 
4a30: 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f     };..    /* Co
4a40: 64 65 20 74 6f 20 64 6f 20 61 6e 20 42 54 72 65  de to do an BTre
4a50: 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  e integrity chec
4a60: 6b 20 6f 6e 20 61 20 73 69 6e 67 6c 65 20 64 61  k on a single da
4a70: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20  tabase file..   
4a80: 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 56   */.    static V
4a90: 64 62 65 4f 70 20 63 68 65 63 6b 44 62 5b 5d 20  dbeOp checkDb[] 
4aa0: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53  = {.      { OP_S
4ab0: 65 74 49 6e 73 65 72 74 2c 20 20 20 30 2c 20 30  etInsert,   0, 0
4ac0: 2c 20 20 20 20 20 20 20 20 22 32 22 7d 2c 0a 20  ,        "2"},. 
4ad0: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
4ae0: 72 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20  r,     0, 0,    
4af0: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20      0},    /* 1 
4b00: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4f 70  */.      { OP_Op
4b10: 65 6e 52 65 61 64 2c 20 20 20 20 30 2c 20 32 2c  enRead,    0, 2,
4b20: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
4b30: 20 20 7b 20 4f 50 5f 52 65 77 69 6e 64 2c 20 20    { OP_Rewind,  
4b40: 20 20 20 20 30 2c 20 37 2c 20 20 20 20 20 20 20      0, 7,       
4b50: 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a   0},    /* 3 */.
4b60: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d        { OP_Colum
4b70: 6e 2c 20 20 20 20 20 20 30 2c 20 33 2c 20 20 20  n,      0, 3,   
4b80: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34       0},    /* 4
4b90: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53   */.      { OP_S
4ba0: 65 74 49 6e 73 65 72 74 2c 20 20 20 30 2c 20 30  etInsert,   0, 0
4bb0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
4bc0: 20 20 20 7b 20 4f 50 5f 4e 65 78 74 2c 20 20 20     { OP_Next,   
4bd0: 20 20 20 20 20 30 2c 20 34 2c 20 20 20 20 20 20       0, 4,      
4be0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 36 20 2a 2f    0},    /* 6 */
4bf0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65  .      { OP_Inte
4c00: 67 72 69 74 79 43 6b 2c 20 30 2c 20 30 2c 20 20  grityCk, 0, 0,  
4c10: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
4c20: 37 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  7 */.      { OP_
4c30: 44 75 70 2c 20 20 20 20 20 20 20 20 20 30 2c 20  Dup,         0, 
4c40: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  1,        0},.  
4c50: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c      { OP_String,
4c60: 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20        0, 0,     
4c70: 20 20 20 22 6f 6b 22 7d 2c 0a 20 20 20 20 20 20     "ok"},.      
4c80: 7b 20 4f 50 5f 53 74 72 45 71 2c 20 20 20 20 20  { OP_StrEq,     
4c90: 20 20 30 2c 20 31 32 2c 20 20 20 20 20 20 20 30    0, 12,       0
4ca0: 7d 2c 20 20 20 20 2f 2a 20 31 30 20 2a 2f 0a 20  },    /* 10 */. 
4cb0: 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 49 6e 63       { OP_MemInc
4cc0: 72 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20  r,     0, 0,    
4cd0: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
4ce0: 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20 20 20 20  OP_String,      
4cf0: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 22 2a 2a  0, 0,        "**
4d00: 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 22 7d  * in database "}
4d10: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72  ,.      { OP_Str
4d20: 69 6e 67 2c 20 20 20 20 20 20 30 2c 20 30 2c 20  ing,      0, 0, 
4d30: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
4d40: 20 31 33 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f   13 */.      { O
4d50: 50 5f 53 74 72 69 6e 67 2c 20 20 20 20 20 20 30  P_String,      0
4d60: 2c 20 30 2c 20 20 20 20 20 20 20 20 22 20 2a 2a  , 0,        " **
4d70: 2a 5c 6e 22 7d 2c 0a 20 20 20 20 20 20 7b 20 4f  *\n"},.      { O
4d80: 50 5f 50 75 6c 6c 2c 20 20 20 20 20 20 20 20 33  P_Pull,        3
4d90: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
4da0: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61        { OP_Conca
4db0: 74 2c 20 20 20 20 20 20 34 2c 20 31 2c 20 20 20  t,      4, 1,   
4dc0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
4dd0: 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20   OP_Callback,   
4de0: 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   1, 0,        0}
4df0: 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2a  ,.    };..    /*
4e00: 20 43 6f 64 65 20 74 68 61 74 20 61 70 70 65 61   Code that appea
4e10: 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  rs at the end of
4e20: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 63   the integrity c
4e30: 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72  heck.  If no err
4e40: 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61 67  or.    ** messag
4e50: 65 73 20 68 61 76 65 20 62 65 65 6e 20 67 65 6e  es have been gen
4e60: 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20 4f  erated, output O
4e70: 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f 75  K.  Otherwise ou
4e80: 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a 20  tput the.    ** 
4e90: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20 20  error message.  
4ea0: 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20    */.    static 
4eb0: 56 64 62 65 4f 70 20 65 6e 64 43 6f 64 65 5b 5d  VdbeOp endCode[]
4ec0: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
4ed0: 4d 65 6d 4c 6f 61 64 2c 20 20 20 20 20 30 2c 20  MemLoad,     0, 
4ee0: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  0,        0},.  
4ef0: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
4f00: 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20  ,     0, 0,     
4f10: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
4f20: 50 5f 4e 65 2c 20 20 20 20 20 20 20 20 20 20 30  P_Ne,          0
4f30: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
4f40: 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20     /* 2 */.     
4f50: 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20   { OP_String,   
4f60: 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20     0, 0,        
4f70: 22 6f 6b 22 7d 2c 0a 20 20 20 20 20 20 7b 20 4f  "ok"},.      { O
4f80: 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31  P_Callback,    1
4f90: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
4fa0: 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2a 20 49      };..    /* I
4fb0: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44  nitialize the VD
4fc0: 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  BE program */.  
4fd0: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
4fe0: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
4ff0: 7a 65 28 69 6e 69 74 43 6f 64 65 29 2c 20 69 6e  ze(initCode), in
5000: 69 74 43 6f 64 65 29 3b 0a 0a 20 20 20 20 2f 2a  itCode);..    /*
5010: 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79   Do an integrity
5020: 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20 64   check on each d
5030: 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a  atabase file */.
5040: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
5050: 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
5060: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b      HashElem *x;
5070: 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e  ..      /* Do an
5080: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
5090: 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20   of the B-Tree. 
50a0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 64       */.      ad
50b0: 64 72 20 3d 20 73 71 6c 69 74 65 56 64 62 65 41  dr = sqliteVdbeA
50c0: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
50d0: 79 53 69 7a 65 28 63 68 65 63 6b 44 62 29 2c 20  ySize(checkDb), 
50e0: 63 68 65 63 6b 44 62 29 3b 0a 20 20 20 20 20 20  checkDb);.      
50f0: 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65  sqliteVdbeChange
5100: 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 29  P1(v, addr+1, i)
5110: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64  ;.      sqliteVd
5120: 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64  beChangeP2(v, ad
5130: 64 72 2b 33 2c 20 61 64 64 72 2b 37 29 3b 0a 20  dr+3, addr+7);. 
5140: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 43       sqliteVdbeC
5150: 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b  hangeP2(v, addr+
5160: 36 2c 20 61 64 64 72 2b 34 29 3b 0a 20 20 20 20  6, addr+4);.    
5170: 20 20 73 71 6c 69 74 65 56 64 62 65 43 68 61 6e    sqliteVdbeChan
5180: 67 65 50 32 28 76 2c 20 61 64 64 72 2b 37 2c 20  geP2(v, addr+7, 
5190: 69 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  i);.      sqlite
51a0: 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20  VdbeChangeP2(v, 
51b0: 61 64 64 72 2b 31 30 2c 20 61 64 64 72 2b 41 72  addr+10, addr+Ar
51c0: 72 61 79 53 69 7a 65 28 63 68 65 63 6b 44 62 29  raySize(checkDb)
51d0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  );.      sqliteV
51e0: 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61  dbeChangeP3(v, a
51f0: 64 64 72 2b 31 33 2c 20 64 62 2d 3e 61 44 62 5b  ddr+13, db->aDb[
5200: 69 5d 2e 7a 4e 61 6d 65 2c 20 50 33 5f 53 54 41  i].zName, P3_STA
5210: 54 49 43 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  TIC);..      /* 
5220: 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74 68  Make sure all th
5230: 65 20 69 6e 64 69 63 65 73 20 61 72 65 20 63 6f  e indices are co
5240: 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72 65 63  nstructed correc
5250: 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  tly..      */.  
5260: 20 20 20 20 73 71 6c 69 74 65 43 6f 64 65 56 65      sqliteCodeVe
5270: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
5280: 65 2c 20 69 29 3b 0a 20 20 20 20 20 20 66 6f 72  e, i);.      for
5290: 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (x=sqliteHashFir
52a0: 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 74  st(&db->aDb[i].t
52b0: 62 6c 48 61 73 68 29 3b 20 78 3b 20 78 3d 73 71  blHash); x; x=sq
52c0: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29  liteHashNext(x))
52d0: 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20  {.        Table 
52e0: 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61  *pTab = sqliteHa
52f0: 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20  shData(x);.     
5300: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
5310: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70          int loop
5320: 54 6f 70 3b 0a 0a 20 20 20 20 20 20 20 20 69 66  Top;..        if
5330: 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d  ( pTab->pIndex==
5340: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
5350: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
5360: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65  AddOp(v, OP_Inte
5370: 67 65 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20 20  ger, i, 0);.    
5380: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64      sqliteVdbeAd
5390: 64 4f 70 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65  dOp(v, OP_OpenRe
53a0: 61 64 2c 20 31 2c 20 70 54 61 62 2d 3e 74 6e 75  ad, 1, pTab->tnu
53b0: 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  m);.        sqli
53c0: 74 65 56 64 62 65 43 68 61 6e 67 65 50 33 28 76  teVdbeChangeP3(v
53d0: 2c 20 2d 31 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  , -1, pTab->zNam
53e0: 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  e, P3_STATIC);. 
53f0: 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20         for(j=0, 
5400: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
5410: 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
5420: 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b  dx->pNext, j++){
5430: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
5440: 49 64 78 2d 3e 74 6e 75 6d 3d 3d 30 20 29 20 63  Idx->tnum==0 ) c
5450: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
5460: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
5470: 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  Op(v, OP_Integer
5480: 2c 20 70 49 64 78 2d 3e 69 44 62 2c 20 30 29 3b  , pIdx->iDb, 0);
5490: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
54a0: 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  eVdbeAddOp(v, OP
54b0: 5f 4f 70 65 6e 52 65 61 64 2c 20 6a 2b 32 2c 20  _OpenRead, j+2, 
54c0: 70 49 64 78 2d 3e 74 6e 75 6d 29 3b 0a 20 20 20  pIdx->tnum);.   
54d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62         sqliteVdb
54e0: 65 43 68 61 6e 67 65 50 33 28 76 2c 20 2d 31 2c  eChangeP3(v, -1,
54f0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 33   pIdx->zName, P3
5500: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
5510: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
5520: 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  teVdbeAddOp(v, O
5530: 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 30 29  P_Integer, 0, 0)
5540: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
5550: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
5560: 4d 65 6d 53 74 6f 72 65 2c 20 31 2c 20 31 29 3b  MemStore, 1, 1);
5570: 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70  .        loopTop
5580: 20 3d 20 73 71 6c 69 74 65 56 64 62 65 41 64 64   = sqliteVdbeAdd
5590: 4f 70 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c  Op(v, OP_Rewind,
55a0: 20 31 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   1, 0);.        
55b0: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
55c0: 76 2c 20 4f 50 5f 4d 65 6d 49 6e 63 72 2c 20 31  v, OP_MemIncr, 1
55d0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  , 0);.        fo
55e0: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
55f0: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
5600: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
5610: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
5620: 20 20 69 6e 74 20 6b 2c 20 6a 6d 70 32 3b 0a 20    int k, jmp2;. 
5630: 20 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20           static 
5640: 56 64 62 65 4f 70 20 69 64 78 45 72 72 5b 5d 20  VdbeOp idxErr[] 
5650: 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  = {.            
5660: 7b 20 4f 50 5f 4d 65 6d 49 6e 63 72 2c 20 20 20  { OP_MemIncr,   
5670: 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20    0,  0,  0},.  
5680: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53            { OP_S
5690: 74 72 69 6e 67 2c 20 20 20 20 20 20 30 2c 20 20  tring,      0,  
56a0: 30 2c 20 20 22 72 6f 77 69 64 20 22 7d 2c 0a 20  0,  "rowid "},. 
56b0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
56c0: 52 65 63 6e 6f 2c 20 20 20 20 20 20 20 31 2c 20  Recno,       1, 
56d0: 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20   0,  0},.       
56e0: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
56f0: 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 22  ,      0,  0,  "
5700: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
5710: 64 65 78 20 22 7d 2c 0a 20 20 20 20 20 20 20 20  dex "},.        
5720: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 2c      { OP_String,
5730: 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d        0,  0,  0}
5740: 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20  ,    /* 4 */.   
5750: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f           { OP_Co
5760: 6e 63 61 74 2c 20 20 20 20 20 20 34 2c 20 20 30  ncat,      4,  0
5770: 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  0},.         
5780: 20 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b     { OP_Callback
5790: 2c 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d 2c  ,    1,  0,  0},
57a0: 0a 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 20 20  .          };.  
57b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64          sqliteVd
57c0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 52 65  beAddOp(v, OP_Re
57d0: 63 6e 6f 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20  cno, 1, 0);.    
57e0: 20 20 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20 6b        for(k=0; k
57f0: 3c 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20  <pIdx->nColumn; 
5800: 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  k++){.          
5810: 20 20 69 6e 74 20 69 64 78 20 3d 20 70 49 64 78    int idx = pIdx
5820: 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 5d 3b 0a 20  ->aiColumn[k];. 
5830: 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69             if( i
5840: 64 78 3d 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20  dx==pTab->iPKey 
5850: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
5860: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
5870: 28 76 2c 20 4f 50 5f 52 65 63 6e 6f 2c 20 31 2c  (v, OP_Recno, 1,
5880: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
5890: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
58a0: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
58b0: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 6f 6c 75  AddOp(v, OP_Colu
58c0: 6d 6e 2c 20 31 2c 20 69 64 78 29 3b 0a 20 20 20  mn, 1, idx);.   
58d0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
58e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
58f0: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
5900: 28 76 2c 20 4f 50 5f 4d 61 6b 65 49 64 78 4b 65  (v, OP_MakeIdxKe
5910: 79 2c 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e  y, pIdx->nColumn
5920: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
5930: 69 66 28 20 64 62 2d 3e 66 69 6c 65 5f 66 6f 72  if( db->file_for
5940: 6d 61 74 3e 3d 34 20 29 20 73 71 6c 69 74 65 41  mat>=4 ) sqliteA
5950: 64 64 49 64 78 4b 65 79 54 79 70 65 28 76 2c 20  ddIdxKeyType(v, 
5960: 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20  pIdx);.         
5970: 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 56 64   jmp2 = sqliteVd
5980: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 46 6f  beAddOp(v, OP_Fo
5990: 75 6e 64 2c 20 6a 2b 32 2c 20 30 29 3b 0a 20 20  und, j+2, 0);.  
59a0: 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
59b0: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69  qliteVdbeAddOpLi
59c0: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
59d0: 69 64 78 45 72 72 29 2c 20 69 64 78 45 72 72 29  idxErr), idxErr)
59e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
59f0: 74 65 56 64 62 65 43 68 61 6e 67 65 50 33 28 76  teVdbeChangeP3(v
5a00: 2c 20 61 64 64 72 2b 34 2c 20 70 49 64 78 2d 3e  , addr+4, pIdx->
5a10: 7a 4e 61 6d 65 2c 20 50 33 5f 53 54 41 54 49 43  zName, P3_STATIC
5a20: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
5a30: 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 32 28  iteVdbeChangeP2(
5a40: 76 2c 20 6a 6d 70 32 2c 20 73 71 6c 69 74 65 56  v, jmp2, sqliteV
5a50: 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76  dbeCurrentAddr(v
5a60: 29 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ));.        }.  
5a70: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
5a80: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4e 65 78 74  AddOp(v, OP_Next
5a90: 2c 20 31 2c 20 6c 6f 6f 70 54 6f 70 2b 31 29 3b  , 1, loopTop+1);
5aa0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56  .        sqliteV
5ab0: 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 6c  dbeChangeP2(v, l
5ac0: 6f 6f 70 54 6f 70 2c 20 73 71 6c 69 74 65 56 64  oopTop, sqliteVd
5ad0: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
5ae0: 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  );.        for(j
5af0: 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
5b00: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
5b10: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
5b20: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  ++){.          s
5b30: 74 61 74 69 63 20 56 64 62 65 4f 70 20 63 6e 74  tatic VdbeOp cnt
5b40: 49 64 78 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  Idx[] = {.      
5b50: 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65         { OP_Inte
5b60: 67 65 72 2c 20 20 20 20 20 20 30 2c 20 20 30 2c  ger,      0,  0,
5b70: 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20    0},.          
5b80: 20 20 20 7b 20 4f 50 5f 4d 65 6d 53 74 6f 72 65     { OP_MemStore
5b90: 2c 20 20 20 20 20 32 2c 20 20 31 2c 20 20 30 7d  ,     2,  1,  0}
5ba0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  ,.             {
5bb0: 20 4f 50 5f 52 65 77 69 6e 64 2c 20 20 20 20 20   OP_Rewind,     
5bc0: 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 2f    0,  0,  0},  /
5bd0: 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 2 */.         
5be0: 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 49 6e 63 72      { OP_MemIncr
5bf0: 2c 20 20 20 20 20 20 32 2c 20 20 30 2c 20 20 30  ,      2,  0,  0
5c00: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  },.             
5c10: 7b 20 4f 50 5f 4e 65 78 74 2c 20 20 20 20 20 20  { OP_Next,      
5c20: 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20     0,  0,  0},  
5c30: 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 4 */.        
5c40: 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 4c 6f 61       { OP_MemLoa
5c50: 64 2c 20 20 20 20 20 20 31 2c 20 20 30 2c 20 20  d,      1,  0,  
5c60: 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  0},.            
5c70: 20 7b 20 4f 50 5f 4d 65 6d 4c 6f 61 64 2c 20 20   { OP_MemLoad,  
5c80: 20 20 20 20 32 2c 20 20 30 2c 20 20 30 7d 2c 0a      2,  0,  0},.
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f               { O
5ca0: 50 5f 45 71 2c 20 20 20 20 20 20 20 20 20 20 20  P_Eq,           
5cb0: 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 2f 2a 20  0,  0,  0},  /* 
5cc0: 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  7 */.           
5cd0: 20 20 7b 20 4f 50 5f 4d 65 6d 49 6e 63 72 2c 20    { OP_MemIncr, 
5ce0: 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c       0,  0,  0},
5cf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  .             { 
5d00: 4f 50 5f 53 74 72 69 6e 67 2c 20 20 20 20 20 20  OP_String,      
5d10: 20 30 2c 20 20 30 2c 20 20 22 77 72 6f 6e 67 20   0,  0,  "wrong 
5d20: 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  # of entries in 
5d30: 69 6e 64 65 78 20 22 7d 2c 0a 20 20 20 20 20 20  index "},.      
5d40: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69         { OP_Stri
5d50: 6e 67 2c 20 20 20 20 20 20 20 30 2c 20 20 30 2c  ng,       0,  0,
5d60: 20 20 30 7d 2c 20 20 2f 2a 20 31 30 20 2a 2f 0a    0},  /* 10 */.
5d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f               { O
5d80: 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20 20 20  P_Concat,       
5d90: 32 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20  2,  0,  0},.    
5da0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 61           { OP_Ca
5db0: 6c 6c 62 61 63 6b 2c 20 20 20 20 20 31 2c 20 20  llback,     1,  
5dc0: 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20  0,  0},.        
5dd0: 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 20 20 69    };.          i
5de0: 66 28 20 70 49 64 78 2d 3e 74 6e 75 6d 3d 3d 30  f( pIdx->tnum==0
5df0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
5e00: 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71         addr = sq
5e10: 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69 73  liteVdbeAddOpLis
5e20: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 63  t(v, ArraySize(c
5e30: 6e 74 49 64 78 29 2c 20 63 6e 74 49 64 78 29 3b  ntIdx), cntIdx);
5e40: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
5e50: 65 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  eVdbeChangeP1(v,
5e60: 20 61 64 64 72 2b 32 2c 20 6a 2b 32 29 3b 0a 20   addr+2, j+2);. 
5e70: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56           sqliteV
5e80: 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61  dbeChangeP2(v, a
5e90: 64 64 72 2b 32 2c 20 61 64 64 72 2b 35 29 3b 0a  ddr+2, addr+5);.
5ea0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
5eb0: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
5ec0: 61 64 64 72 2b 34 2c 20 6a 2b 32 29 3b 0a 20 20  addr+4, j+2);.  
5ed0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64          sqliteVd
5ee0: 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64  beChangeP2(v, ad
5ef0: 64 72 2b 34 2c 20 61 64 64 72 2b 33 29 3b 0a 20  dr+4, addr+3);. 
5f00: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56           sqliteV
5f10: 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61  dbeChangeP2(v, a
5f20: 64 64 72 2b 37 2c 20 61 64 64 72 2b 41 72 72 61  ddr+7, addr+Arra
5f30: 79 53 69 7a 65 28 63 6e 74 49 64 78 29 29 3b 0a  ySize(cntIdx));.
5f40: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
5f50: 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20  VdbeChangeP3(v, 
5f60: 61 64 64 72 2b 31 30 2c 20 70 49 64 78 2d 3e 7a  addr+10, pIdx->z
5f70: 4e 61 6d 65 2c 20 50 33 5f 53 54 41 54 49 43 29  Name, P3_STATIC)
5f80: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
5f90: 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61    } .    }.    a
5fa0: 64 64 72 20 3d 20 73 71 6c 69 74 65 56 64 62 65  ddr = sqliteVdbe
5fb0: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
5fc0: 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c  aySize(endCode),
5fd0: 20 65 6e 64 43 6f 64 65 29 3b 0a 20 20 20 20 73   endCode);.    s
5fe0: 71 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65 50  qliteVdbeChangeP
5ff0: 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 61 64 64  2(v, addr+2, add
6000: 72 2b 41 72 72 61 79 53 69 7a 65 28 65 6e 64 43  r+ArraySize(endC
6010: 6f 64 65 29 29 3b 0a 20 20 7d 65 6c 73 65 0a 0a  ode));.  }else..
6020: 20 20 7b 7d 0a 20 20 73 71 6c 69 74 65 46 72 65    {}.  sqliteFre
6030: 65 28 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69  e(zLeft);.  sqli
6040: 74 65 46 72 65 65 28 7a 52 69 67 68 74 29 3b 0a  teFree(zRight);.
6050: 7d 0a                                            }.