/ Hex Artifact Content
Login

Artifact 476b13896571bc8d1049d6dbe9c9a84e6d4e33c8:


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 32 20 32 30 30  agma.c,v 1.2 200
01d0: 33 2f 30 34 2f 31 33 20 31 38 3a 32 36 3a 35 31  3/04/13 18:26:51
01e0: 20 70 61 75 6c 20 45 78 70 20 24 0a 2a 2f 0a 23   paul 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 0a 2f 2a 0a 2a 2a 20 49 6e 74  nt.h"../*.** Int
0210: 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e  erpret the given
0220: 20 73 74 72 69 6e 67 20 61 73 20 61 20 62 6f 6f   string as a boo
0230: 6c 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73  lean value..*/.s
0240: 74 61 74 69 63 20 69 6e 74 20 67 65 74 42 6f 6f  tatic int getBoo
0250: 6c 65 61 6e 28 63 68 61 72 20 2a 7a 29 7b 0a 20  lean(char *z){. 
0260: 20 73 74 61 74 69 63 20 63 68 61 72 20 2a 61 7a   static char *az
0270: 54 72 75 65 5b 5d 20 3d 20 7b 20 22 79 65 73 22  True[] = { "yes"
0280: 2c 20 22 6f 6e 22 2c 20 22 74 72 75 65 22 20 7d  , "on", "true" }
0290: 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28  ;.  int i;.  if(
02a0: 20 7a 5b 30 5d 3d 3d 30 20 29 20 72 65 74 75 72   z[0]==0 ) retur
02b0: 6e 20 30 3b 0a 20 20 69 66 28 20 69 73 64 69 67  n 0;.  if( isdig
02c0: 69 74 28 7a 5b 30 5d 29 20 7c 7c 20 28 7a 5b 30  it(z[0]) || (z[0
02d0: 5d 3d 3d 27 2d 27 20 26 26 20 69 73 64 69 67 69  ]=='-' && isdigi
02e0: 74 28 7a 5b 31 5d 29 29 20 29 7b 0a 20 20 20 20  t(z[1])) ){.    
02f0: 72 65 74 75 72 6e 20 61 74 6f 69 28 7a 29 3b 0a  return atoi(z);.
0300: 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69    }.  for(i=0; i
0310: 3c 73 69 7a 65 6f 66 28 61 7a 54 72 75 65 29 2f  <sizeof(azTrue)/
0320: 73 69 7a 65 6f 66 28 61 7a 54 72 75 65 5b 30 5d  sizeof(azTrue[0]
0330: 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28  ); i++){.    if(
0340: 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a   sqliteStrICmp(z
0350: 2c 61 7a 54 72 75 65 5b 69 5d 29 3d 3d 30 20 29  ,azTrue[i])==0 )
0360: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 0a 20   return 1;.  }. 
0370: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
0380: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
0390: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
03a0: 73 20 61 20 73 61 66 65 74 79 20 6c 65 76 65 6c  s a safety level
03b0: 2e 20 20 52 65 74 75 72 6e 20 30 20 66 6f 72 20  .  Return 0 for 
03c0: 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72 20 4f 4e  OFF,.** 1 for ON
03d0: 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e 64 20 32   or NORMAL and 2
03e0: 20 66 6f 72 20 46 55 4c 4c 2e 0a 2a 2a 0a 2a 2a   for FULL..**.**
03f0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 76   Note that the v
0400: 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20 61  alues returned a
0410: 72 65 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 74  re one less that
0420: 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61 74   the values that
0430: 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 70 61  .** should be pa
0440: 73 73 65 64 20 69 6e 74 6f 20 73 71 6c 69 74 65  ssed into sqlite
0450: 42 74 72 65 65 53 65 74 53 61 66 65 74 79 4c 65  BtreeSetSafetyLe
0460: 76 65 6c 28 29 2e 20 20 54 68 65 20 69 73 20 64  vel().  The is d
0470: 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70 6f 72  one.** to suppor
0480: 74 20 6c 65 67 61 63 79 20 53 51 4c 20 63 6f 64  t legacy SQL cod
0490: 65 2e 20 20 54 68 65 20 73 61 66 65 74 79 20 6c  e.  The safety l
04a0: 65 76 65 6c 20 75 73 65 64 20 74 6f 20 62 65 20  evel used to be 
04b0: 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f  boolean.** and o
04c0: 6c 64 65 72 20 73 63 72 69 70 74 73 20 6d 61 79  lder scripts may
04d0: 20 68 61 76 65 20 75 73 65 64 20 6e 75 6d 62 65   have used numbe
04e0: 72 73 20 30 20 66 6f 72 20 4f 46 46 20 61 6e 64  rs 0 for OFF and
04f0: 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74   1 for ON..*/.st
0500: 61 74 69 63 20 69 6e 74 20 67 65 74 53 61 66 65  atic int getSafe
0510: 74 79 4c 65 76 65 6c 28 63 68 61 72 20 2a 7a 29  tyLevel(char *z)
0520: 7b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  {.  static const
0530: 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20 63 6f   struct {.    co
0540: 6e 73 74 20 63 68 61 72 20 2a 7a 57 6f 72 64 3b  nst char *zWord;
0550: 0a 20 20 20 20 69 6e 74 20 76 61 6c 3b 0a 20 20  .    int val;.  
0560: 7d 20 61 4b 65 79 5b 5d 20 3d 20 7b 0a 20 20 20  } aKey[] = {.   
0570: 20 7b 20 22 6e 6f 22 2c 20 20 20 20 30 20 7d 2c   { "no",    0 },
0580: 0a 20 20 20 20 7b 20 22 6f 66 66 22 2c 20 20 20  .    { "off",   
0590: 30 20 7d 2c 0a 20 20 20 20 7b 20 22 66 61 6c 73  0 },.    { "fals
05a0: 65 22 2c 20 30 20 7d 2c 0a 20 20 20 20 7b 20 22  e", 0 },.    { "
05b0: 79 65 73 22 2c 20 20 20 31 20 7d 2c 0a 20 20 20  yes",   1 },.   
05c0: 20 7b 20 22 6f 6e 22 2c 20 20 20 20 31 20 7d 2c   { "on",    1 },
05d0: 0a 20 20 20 20 7b 20 22 74 72 75 65 22 2c 20 20  .    { "true",  
05e0: 31 20 7d 2c 0a 20 20 20 20 7b 20 22 66 75 6c 6c  1 },.    { "full
05f0: 22 2c 20 20 32 20 7d 2c 0a 20 20 7d 3b 0a 20 20  ",  2 },.  };.  
0600: 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 7a 5b 30  int i;.  if( z[0
0610: 5d 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 31 3b  ]==0 ) return 1;
0620: 0a 20 20 69 66 28 20 69 73 64 69 67 69 74 28 7a  .  if( isdigit(z
0630: 5b 30 5d 29 20 7c 7c 20 28 7a 5b 30 5d 3d 3d 27  [0]) || (z[0]=='
0640: 2d 27 20 26 26 20 69 73 64 69 67 69 74 28 7a 5b  -' && isdigit(z[
0650: 31 5d 29 29 20 29 7b 0a 20 20 20 20 72 65 74 75  1])) ){.    retu
0660: 72 6e 20 61 74 6f 69 28 7a 29 3b 0a 20 20 7d 0a  rn atoi(z);.  }.
0670: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a    for(i=0; i<siz
0680: 65 6f 66 28 61 4b 65 79 29 2f 73 69 7a 65 6f 66  eof(aKey)/sizeof
0690: 28 61 4b 65 79 5b 30 5d 29 3b 20 69 2b 2b 29 7b  (aKey[0]); i++){
06a0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 53  .    if( sqliteS
06b0: 74 72 49 43 6d 70 28 7a 2c 61 4b 65 79 5b 69 5d  trICmp(z,aKey[i]
06c0: 2e 7a 57 6f 72 64 29 3d 3d 30 20 29 20 72 65 74  .zWord)==0 ) ret
06d0: 75 72 6e 20 61 4b 65 79 5b 69 5d 2e 76 61 6c 3b  urn aKey[i].val;
06e0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31 3b  .  }.  return 1;
06f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70  .}../*.** Interp
0700: 72 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74  ret the given st
0710: 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70 20 64  ring as a temp d
0720: 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65 74 75  b location. Retu
0730: 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a 2a 2a  rn 1 for file.**
0740: 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72 61 72   backed temporar
0750: 79 20 64 61 74 61 62 61 73 65 73 2c 20 32 20 66  y databases, 2 f
0760: 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61 63 6b  or the Red-Black
0770: 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72 79 20   tree in memory 
0780: 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e 64 20  database.** and 
0790: 30 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f 6d  0 to use the com
07a0: 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61 75 6c  pile-time defaul
07b0: 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  t..*/.static int
07c0: 20 67 65 74 54 6d 70 64 62 4c 6f 63 61 74 69 6f   getTmpdbLocatio
07d0: 6e 28 63 68 61 72 20 2a 7a 29 7b 0a 20 20 20 20  n(char *z){.    
07e0: 69 66 20 28 73 71 6c 69 74 65 53 74 72 49 43 6d  if (sqliteStrICm
07f0: 70 28 7a 2c 20 22 66 69 6c 65 22 29 20 3d 3d 20  p(z, "file") == 
0800: 30 29 20 7b 0a 09 72 65 74 75 72 6e 20 31 3b 0a  0) {..return 1;.
0810: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 73      } else if (s
0820: 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 2c 20  qliteStrICmp(z, 
0830: 22 6d 65 6d 6f 72 79 22 29 20 3d 3d 20 30 29 20  "memory") == 0) 
0840: 7b 0a 09 72 65 74 75 72 6e 20 32 3b 0a 20 20 20  {..return 2;.   
0850: 20 7d 20 65 6c 73 65 20 7b 0a 09 72 65 74 75 72   } else {..retur
0860: 6e 20 30 3b 0a 20 20 20 20 7d 0a 7d 0a 0a 2f 2a  n 0;.    }.}../*
0870: 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72  .** Process a pr
0880: 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  agma statement. 
0890: 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20   .**.** Pragmas 
08a0: 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d  are of this form
08b0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41  :.**.**      PRA
08c0: 47 4d 41 20 69 64 20 3d 20 76 61 6c 75 65 0a 2a  GMA id = value.*
08d0: 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74 69 66  *.** The identif
08e0: 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ier might also b
08f0: 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54 68 65  e a string.  The
0900: 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69   value is a stri
0910: 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74  ng, and.** ident
0920: 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62  ifier, or a numb
0930: 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c 61  er.  If minusFla
0940: 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  g is true, then 
0950: 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  the value is.** 
0960: 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20 77 61  a number that wa
0970: 73 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  s preceded by a 
0980: 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2f 0a 76  minus sign..*/.v
0990: 6f 69 64 20 73 71 6c 69 74 65 50 72 61 67 6d 61  oid sqlitePragma
09a0: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
09b0: 54 6f 6b 65 6e 20 2a 70 4c 65 66 74 2c 20 54 6f  Token *pLeft, To
09c0: 6b 65 6e 20 2a 70 52 69 67 68 74 2c 20 69 6e 74  ken *pRight, int
09d0: 20 6d 69 6e 75 73 46 6c 61 67 29 7b 0a 20 20 63   minusFlag){.  c
09e0: 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b 0a  har *zLeft = 0;.
09f0: 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d    char *zRight =
0a00: 20 30 3b 0a 20 20 73 71 6c 69 74 65 20 2a 64 62   0;.  sqlite *db
0a10: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
0a20: 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c 69 74   Vdbe *v = sqlit
0a30: 65 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  eGetVdbe(pParse)
0a40: 3b 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72  ;.  if( v==0 ) r
0a50: 65 74 75 72 6e 3b 0a 0a 20 20 7a 4c 65 66 74 20  eturn;..  zLeft 
0a60: 3d 20 73 71 6c 69 74 65 53 74 72 4e 44 75 70 28  = sqliteStrNDup(
0a70: 70 4c 65 66 74 2d 3e 7a 2c 20 70 4c 65 66 74 2d  pLeft->z, pLeft-
0a80: 3e 6e 29 3b 0a 20 20 73 71 6c 69 74 65 44 65 71  >n);.  sqliteDeq
0a90: 75 6f 74 65 28 7a 4c 65 66 74 29 3b 0a 20 20 69  uote(zLeft);.  i
0aa0: 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a  f( minusFlag ){.
0ab0: 20 20 20 20 7a 52 69 67 68 74 20 3d 20 30 3b 0a      zRight = 0;.
0ac0: 20 20 20 20 73 71 6c 69 74 65 53 65 74 4e 53 74      sqliteSetNSt
0ad0: 72 69 6e 67 28 26 7a 52 69 67 68 74 2c 20 22 2d  ring(&zRight, "-
0ae0: 22 2c 20 31 2c 20 70 52 69 67 68 74 2d 3e 7a 2c  ", 1, pRight->z,
0af0: 20 70 52 69 67 68 74 2d 3e 6e 2c 20 30 29 3b 0a   pRight->n, 0);.
0b00: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a 52 69    }else{.    zRi
0b10: 67 68 74 20 3d 20 73 71 6c 69 74 65 53 74 72 4e  ght = sqliteStrN
0b20: 44 75 70 28 70 52 69 67 68 74 2d 3e 7a 2c 20 70  Dup(pRight->z, p
0b30: 52 69 67 68 74 2d 3e 6e 29 3b 0a 20 20 20 20 73  Right->n);.    s
0b40: 71 6c 69 74 65 44 65 71 75 6f 74 65 28 7a 52 69  qliteDequote(zRi
0b50: 67 68 74 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  ght);.  }.  if( 
0b60: 73 71 6c 69 74 65 41 75 74 68 43 68 65 63 6b 28  sqliteAuthCheck(
0b70: 70 50 61 72 73 65 2c 20 53 51 4c 49 54 45 5f 50  pParse, SQLITE_P
0b80: 52 41 47 4d 41 2c 20 7a 4c 65 66 74 2c 20 7a 52  RAGMA, zLeft, zR
0b90: 69 67 68 74 29 20 29 7b 0a 20 20 20 20 73 71 6c  ight) ){.    sql
0ba0: 69 74 65 46 72 65 65 28 7a 4c 65 66 74 29 3b 0a  iteFree(zLeft);.
0bb0: 20 20 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a      sqliteFree(z
0bc0: 52 69 67 68 74 29 3b 0a 20 20 20 20 72 65 74 75  Right);.    retu
0bd0: 72 6e 3b 0a 20 20 7d 0a 20 0a 20 20 2f 2a 0a 20  rn;.  }. .  /*. 
0be0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 64 65 66 61   **  PRAGMA defa
0bf0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20  ult_cache_size. 
0c00: 20 2a 2a 20 20 50 52 41 47 4d 41 20 64 65 66 61   **  PRAGMA defa
0c10: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e  ult_cache_size=N
0c20: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
0c30: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
0c40: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 65  s the current pe
0c50: 72 73 69 73 74 65 6e 74 20 73 65 74 74 69 6e 67  rsistent setting
0c60: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61   for the.  ** pa
0c70: 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 20  ge cache size.  
0c80: 54 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  The value return
0c90: 65 64 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75  ed is the maximu
0ca0: 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  m number of.  **
0cb0: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 70 61   pages in the pa
0cc0: 67 65 20 63 61 63 68 65 2e 20 20 54 68 65 20 73  ge cache.  The s
0cd0: 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20  econd form sets 
0ce0: 62 6f 74 68 20 74 68 65 20 63 75 72 72 65 6e 74  both the current
0cf0: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
0d00: 20 73 69 7a 65 20 76 61 6c 75 65 20 61 6e 64 20   size value and 
0d10: 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20 70  the persistent p
0d20: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76  age cache size v
0d30: 61 6c 75 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64  alue.  ** stored
0d40: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
0d50: 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a   file..  **.  **
0d60: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   The default cac
0d70: 68 65 20 73 69 7a 65 20 69 73 20 73 74 6f 72 65  he size is store
0d80: 64 20 69 6e 20 6d 65 74 61 2d 76 61 6c 75 65 20  d in meta-value 
0d90: 32 20 6f 66 20 70 61 67 65 20 31 20 6f 66 20 74  2 of page 1 of t
0da0: 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  he.  ** database
0db0: 20 66 69 6c 65 2e 20 20 54 68 65 20 63 61 63 68   file.  The cach
0dc0: 65 20 73 69 7a 65 20 69 73 20 61 63 74 75 61 6c  e size is actual
0dd0: 6c 79 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20  ly the absolute 
0de0: 76 61 6c 75 65 20 6f 66 0a 20 20 2a 2a 20 74 68  value of.  ** th
0df0: 69 73 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  is memory locati
0e00: 6f 6e 2e 20 20 54 68 65 20 73 69 67 6e 20 6f 66  on.  The sign of
0e10: 20 6d 65 74 61 2d 76 61 6c 75 65 20 32 20 64 65   meta-value 2 de
0e20: 74 65 72 6d 69 6e 65 73 20 74 68 65 0a 20 20 2a  termines the.  *
0e30: 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  * synchronous se
0e40: 74 74 69 6e 67 2e 20 20 41 20 6e 65 67 61 74 69  tting.  A negati
0e50: 76 65 20 76 61 6c 75 65 20 6d 65 61 6e 73 20 73  ve value means s
0e60: 79 6e 63 68 72 6f 6e 6f 75 73 20 69 73 20 6f 66  ynchronous is of
0e70: 66 0a 20 20 2a 2a 20 61 6e 64 20 61 20 70 6f 73  f.  ** and a pos
0e80: 69 74 69 76 65 20 76 61 6c 75 65 20 6d 65 61 6e  itive value mean
0e90: 73 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 69 73  s synchronous is
0ea0: 20 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20   on..  */.  if( 
0eb0: 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 4c  sqliteStrICmp(zL
0ec0: 65 66 74 2c 22 64 65 66 61 75 6c 74 5f 63 61 63  eft,"default_cac
0ed0: 68 65 5f 73 69 7a 65 22 29 3d 3d 30 20 29 7b 0a  he_size")==0 ){.
0ee0: 20 20 20 20 73 74 61 74 69 63 20 56 64 62 65 4f      static VdbeO
0ef0: 70 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d  p getCacheSize[]
0f00: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
0f10: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20  ReadCookie,  0, 
0f20: 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  2,        0},.  
0f30: 20 20 20 20 7b 20 4f 50 5f 41 62 73 56 61 6c 75      { OP_AbsValu
0f40: 65 2c 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20  e,    0, 0,     
0f50: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
0f60: 50 5f 44 75 70 2c 20 20 20 20 20 20 20 20 20 30  P_Dup,         0
0f70: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
0f80: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
0f90: 65 72 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20  er,     0, 0,   
0fa0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
0fb0: 20 4f 50 5f 4e 65 2c 20 20 20 20 20 20 20 20 20   OP_Ne,         
0fc0: 20 30 2c 20 36 2c 20 20 20 20 20 20 20 20 30 7d   0, 6,        0}
0fd0: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
0fe0: 65 67 65 72 2c 20 20 20 20 20 4d 41 58 5f 50 41  eger,     MAX_PA
0ff0: 47 45 53 2c 30 2c 20 30 7d 2c 0a 20 20 20 20 20  GES,0, 0},.     
1000: 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65   { OP_ColumnName
1010: 2c 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20  ,  0, 0,        
1020: 22 63 61 63 68 65 5f 73 69 7a 65 22 7d 2c 0a 20  "cache_size"},. 
1030: 20 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61       { OP_Callba
1040: 63 6b 2c 20 20 20 20 31 2c 20 30 2c 20 20 20 20  ck,    1, 0,    
1050: 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20      0},.    };. 
1060: 20 20 20 69 66 28 20 70 52 69 67 68 74 2d 3e 7a     if( pRight->z
1070: 3d 3d 70 4c 65 66 74 2d 3e 7a 20 29 7b 0a 20 20  ==pLeft->z ){.  
1080: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64      sqliteVdbeAd
1090: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
10a0: 53 69 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a  Size(getCacheSiz
10b0: 65 29 2c 20 67 65 74 43 61 63 68 65 53 69 7a 65  e), getCacheSize
10c0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
10d0: 20 20 20 20 69 6e 74 20 61 64 64 72 3b 0a 20 20      int addr;.  
10e0: 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 61      int size = a
10f0: 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  toi(zRight);.   
1100: 20 20 20 69 66 28 20 73 69 7a 65 3c 30 20 29 20     if( size<0 ) 
1110: 73 69 7a 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20  size = -size;.  
1120: 20 20 20 20 73 71 6c 69 74 65 42 65 67 69 6e 57      sqliteBeginW
1130: 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50  riteOperation(pP
1140: 61 72 73 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20  arse, 0, 0);.   
1150: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
1160: 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  Op(v, OP_Integer
1170: 2c 20 73 69 7a 65 2c 20 30 29 3b 0a 20 20 20 20  , size, 0);.    
1180: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
1190: 70 28 76 2c 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  p(v, OP_ReadCook
11a0: 69 65 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20 20  ie, 0, 2);.     
11b0: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 56 64   addr = sqliteVd
11c0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e  beAddOp(v, OP_In
11d0: 74 65 67 65 72 2c 20 30 2c 20 30 29 3b 0a 20 20  teger, 0, 0);.  
11e0: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64      sqliteVdbeAd
11f0: 64 4f 70 28 76 2c 20 4f 50 5f 47 65 2c 20 30 2c  dOp(v, OP_Ge, 0,
1200: 20 61 64 64 72 2b 33 29 3b 0a 20 20 20 20 20 20   addr+3);.      
1210: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
1220: 76 2c 20 4f 50 5f 4e 65 67 61 74 69 76 65 2c 20  v, OP_Negative, 
1230: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  0, 0);.      sql
1240: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
1250: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 30 2c  OP_SetCookie, 0,
1260: 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   2);.      sqlit
1270: 65 45 6e 64 57 72 69 74 65 4f 70 65 72 61 74 69  eEndWriteOperati
1280: 6f 6e 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  on(pParse);.    
1290: 20 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65    db->cache_size
12a0: 20 3d 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a   = db->cache_siz
12b0: 65 3c 30 20 3f 20 2d 73 69 7a 65 20 3a 20 73 69  e<0 ? -size : si
12c0: 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ze;.      sqlite
12d0: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
12e0: 65 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74  e(db->aDb[0].pBt
12f0: 2c 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65  , db->cache_size
1300: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
1310: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
1320: 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 0a 20  GMA cache_size. 
1330: 20 2a 2a 20 20 50 52 41 47 4d 41 20 63 61 63 68   **  PRAGMA cach
1340: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
1350: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
1360: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
1370: 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74  rrent local sett
1380: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
1390: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
13a0: 2e 20 20 54 68 65 20 6c 6f 63 61 6c 20 73 65 74  .  The local set
13b0: 74 69 6e 67 20 63 61 6e 20 62 65 20 64 69 66 66  ting can be diff
13c0: 65 72 65 6e 74 20 66 72 6f 6d 0a 20 20 2a 2a 20  erent from.  ** 
13d0: 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20 63  the persistent c
13e0: 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 20  ache size value 
13f0: 74 68 61 74 20 69 73 20 73 74 6f 72 65 64 20 69  that is stored i
1400: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  n the database. 
1410: 20 2a 2a 20 66 69 6c 65 20 69 74 73 65 6c 66 2e   ** file itself.
1420: 20 20 54 68 65 20 76 61 6c 75 65 20 72 65 74 75    The value retu
1430: 72 6e 65 64 20 69 73 20 74 68 65 20 6d 61 78 69  rned is the maxi
1440: 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20  mum number of.  
1450: 2a 2a 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ** pages in the 
1460: 70 61 67 65 20 63 61 63 68 65 2e 20 20 54 68 65  page cache.  The
1470: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74   second form set
1480: 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a 2a  s the local.  **
1490: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
14a0: 20 76 61 6c 75 65 2e 20 20 49 74 20 64 6f 65 73   value.  It does
14b0: 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20   not change the 
14c0: 70 65 72 73 69 73 74 65 6e 74 0a 20 20 2a 2a 20  persistent.  ** 
14d0: 63 61 63 68 65 20 73 69 7a 65 20 73 74 6f 72 65  cache size store
14e0: 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 73 6f  d on the disk so
14f0: 20 74 68 65 20 63 61 63 68 65 20 73 69 7a 65 20   the cache size 
1500: 77 69 6c 6c 20 72 65 76 65 72 74 0a 20 20 2a 2a  will revert.  **
1510: 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20   to its default 
1520: 76 61 6c 75 65 20 77 68 65 6e 20 74 68 65 20 64  value when the d
1530: 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65  atabase is close
1540: 64 20 61 6e 64 20 72 65 6f 70 65 6e 65 64 2e 0a  d and reopened..
1550: 20 20 2a 2a 20 4e 20 73 68 6f 75 6c 64 20 62 65    ** N should be
1560: 20 61 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65   a positive inte
1570: 67 65 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ger..  */.  if( 
1580: 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 4c  sqliteStrICmp(zL
1590: 65 66 74 2c 22 63 61 63 68 65 5f 73 69 7a 65 22  eft,"cache_size"
15a0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74  )==0 ){.    stat
15b0: 69 63 20 56 64 62 65 4f 70 20 67 65 74 43 61 63  ic VdbeOp getCac
15c0: 68 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20  heSize[] = {.   
15d0: 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61     { OP_ColumnNa
15e0: 6d 65 2c 20 20 30 2c 20 30 2c 20 20 20 20 20 20  me,  0, 0,      
15f0: 20 20 22 63 61 63 68 65 5f 73 69 7a 65 22 7d 2c    "cache_size"},
1600: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c  .      { OP_Call
1610: 62 61 63 6b 2c 20 20 20 20 31 2c 20 30 2c 20 20  back,    1, 0,  
1620: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b        0},.    };
1630: 0a 20 20 20 20 69 66 28 20 70 52 69 67 68 74 2d  .    if( pRight-
1640: 3e 7a 3d 3d 70 4c 65 66 74 2d 3e 7a 20 29 7b 0a  >z==pLeft->z ){.
1650: 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d        int size =
1660: 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 3b   db->cache_size;
1670: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 69 7a 65  ;.      if( size
1680: 3c 30 20 29 20 73 69 7a 65 20 3d 20 2d 73 69 7a  <0 ) size = -siz
1690: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  e;.      sqliteV
16a0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49  dbeAddOp(v, OP_I
16b0: 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c 20 30 29  nteger, size, 0)
16c0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64  ;.      sqliteVd
16d0: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
16e0: 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63 68  rraySize(getCach
16f0: 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65  eSize), getCache
1700: 53 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Size);.    }else
1710: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
1720: 20 3d 20 61 74 6f 69 28 7a 52 69 67 68 74 29 3b   = atoi(zRight);
1730: 0a 20 20 20 20 20 20 69 66 28 20 73 69 7a 65 3c  .      if( size<
1740: 30 20 29 20 73 69 7a 65 20 3d 20 2d 73 69 7a 65  0 ) size = -size
1750: 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  ;.      if( db->
1760: 63 61 63 68 65 5f 73 69 7a 65 3c 30 20 29 20 73  cache_size<0 ) s
1770: 69 7a 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20  ize = -size;.   
1780: 20 20 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a     db->cache_siz
1790: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20  e = size;.      
17a0: 73 71 6c 69 74 65 42 74 72 65 65 53 65 74 43 61  sqliteBtreeSetCa
17b0: 63 68 65 53 69 7a 65 28 64 62 2d 3e 61 44 62 5b  cheSize(db->aDb[
17c0: 30 5d 2e 70 42 74 2c 20 64 62 2d 3e 63 61 63 68  0].pBt, db->cach
17d0: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20  e_size);.    }. 
17e0: 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a   }else..  /*.  *
17f0: 2a 20 20 50 52 41 47 4d 41 20 64 65 66 61 75 6c  *  PRAGMA defaul
1800: 74 5f 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20  t_synchronous.  
1810: 2a 2a 20 20 50 52 41 47 4d 41 20 64 65 66 61 75  **  PRAGMA defau
1820: 6c 74 5f 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f  lt_synchronous=O
1830: 4e 7c 4f 46 46 7c 4e 4f 52 4d 41 4c 7c 46 55 4c  N|OFF|NORMAL|FUL
1840: 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  L.  **.  ** The 
1850: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 74 75 72  first form retur
1860: 6e 73 20 74 68 65 20 70 65 72 73 69 73 74 65 6e  ns the persisten
1870: 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 22  t value of the "
1880: 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73 65 74  synchronous" set
1890: 74 69 6e 67 0a 20 20 2a 2a 20 74 68 61 74 20 69  ting.  ** that i
18a0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
18b0: 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
18c0: 69 73 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f  is the synchrono
18d0: 75 73 20 73 65 74 74 69 6e 67 20 74 68 61 74 0a  us setting that.
18e0: 20 20 2a 2a 20 69 73 20 75 73 65 64 20 77 68 65    ** is used whe
18f0: 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
1900: 73 65 20 69 73 20 6f 70 65 6e 65 64 20 75 6e 6c  se is opened unl
1910: 65 73 73 20 6f 76 65 72 72 69 64 64 65 6e 20 62  ess overridden b
1920: 79 20 61 20 73 65 70 61 72 61 74 65 0a 20 20 2a  y a separate.  *
1930: 2a 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20  * "synchronous" 
1940: 70 72 61 67 6d 61 2e 20 20 54 68 65 20 73 65 63  pragma.  The sec
1950: 6f 6e 64 20 66 6f 72 6d 20 63 68 61 6e 67 65 73  ond form changes
1960: 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20   the persistent 
1970: 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 6c 6f 63  and the.  ** loc
1980: 61 6c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73  al synchronous s
1990: 65 74 74 69 6e 67 20 74 6f 20 74 68 65 20 76 61  etting to the va
19a0: 6c 75 65 20 67 69 76 65 6e 2e 0a 20 20 2a 2a 0a  lue given..  **.
19b0: 20 20 2a 2a 20 49 66 20 73 79 6e 63 68 72 6f 6e    ** If synchron
19c0: 6f 75 73 20 69 73 20 4f 46 46 2c 20 53 51 4c 69  ous is OFF, SQLi
19d0: 74 65 20 64 6f 65 73 20 6e 6f 74 20 61 74 74 65  te does not atte
19e0: 6d 70 74 20 61 6e 79 20 66 73 79 6e 63 28 29 20  mpt any fsync() 
19f0: 73 79 73 74 65 6d 73 20 63 61 6c 6c 73 0a 20 20  systems calls.  
1a00: 2a 2a 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ** to make sure 
1a10: 64 61 74 61 20 69 73 20 63 6f 6d 6d 69 74 74 65  data is committe
1a20: 64 20 74 6f 20 64 69 73 6b 2e 20 20 57 72 69 74  d to disk.  Writ
1a30: 65 20 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65  e operations are
1a40: 20 76 65 72 79 20 66 61 73 74 2c 0a 20 20 2a 2a   very fast,.  **
1a50: 20 62 75 74 20 61 20 70 6f 77 65 72 20 66 61 69   but a power fai
1a60: 6c 75 72 65 20 63 61 6e 20 6c 65 61 76 65 20 74  lure can leave t
1a70: 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 61  he database in a
1a80: 6e 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 73  n inconsistent s
1a90: 74 61 74 65 2e 0a 20 20 2a 2a 20 49 66 20 73 79  tate..  ** If sy
1aa0: 6e 63 68 72 6f 6e 6f 75 73 20 69 73 20 4f 4e 20  nchronous is ON 
1ab0: 6f 72 20 4e 4f 52 4d 41 4c 2c 20 53 51 4c 69 74  or NORMAL, SQLit
1ac0: 65 20 77 69 6c 6c 20 64 6f 20 61 6e 20 66 73 79  e will do an fsy
1ad0: 6e 63 28 29 20 73 79 73 74 65 6d 20 63 61 6c 6c  nc() system call
1ae0: 20 74 6f 0a 20 20 2a 2a 20 6d 61 6b 65 20 73 75   to.  ** make su
1af0: 72 65 20 64 61 74 61 20 69 73 20 62 65 69 6e 67  re data is being
1b00: 20 77 72 69 74 74 65 6e 20 74 6f 20 64 69 73 6b   written to disk
1b10: 2e 20 20 54 68 65 20 72 69 73 6b 20 6f 66 20 63  .  The risk of c
1b20: 6f 72 72 75 70 74 69 6f 6e 20 64 75 65 20 74 6f  orruption due to
1b30: 0a 20 20 2a 2a 20 61 20 70 6f 77 65 72 20 6c 6f  .  ** a power lo
1b40: 73 73 20 69 6e 20 74 68 69 73 20 6d 6f 64 65 20  ss in this mode 
1b50: 69 73 20 6e 65 67 6c 69 67 69 62 6c 65 20 62 75  is negligible bu
1b60: 74 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  t non-zero.  If 
1b70: 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a  synchronous.  **
1b80: 20 69 73 20 46 55 4c 4c 2c 20 65 78 74 72 61 20   is FULL, extra 
1b90: 66 73 79 6e 63 28 29 73 20 6f 63 63 75 72 20 74  fsync()s occur t
1ba0: 6f 20 72 65 64 75 63 65 20 74 68 65 20 72 69 73  o reduce the ris
1bb0: 6b 20 6f 66 20 63 6f 72 72 75 70 74 69 6f 6e 20  k of corruption 
1bc0: 74 6f 20 6e 65 61 72 0a 20 20 2a 2a 20 7a 65 72  to near.  ** zer
1bd0: 6f 2c 20 62 75 74 20 77 69 74 68 20 61 20 77 72  o, but with a wr
1be0: 69 74 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  ite performance 
1bf0: 70 65 6e 61 6c 74 79 2e 20 20 54 68 65 20 64 65  penalty.  The de
1c00: 66 61 75 6c 74 20 6d 6f 64 65 20 69 73 20 4e 4f  fault mode is NO
1c10: 52 4d 41 4c 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  RMAL..  */.  if(
1c20: 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a   sqliteStrICmp(z
1c30: 4c 65 66 74 2c 22 64 65 66 61 75 6c 74 5f 73 79  Left,"default_sy
1c40: 6e 63 68 72 6f 6e 6f 75 73 22 29 3d 3d 30 20 29  nchronous")==0 )
1c50: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 56 64 62  {.    static Vdb
1c60: 65 4f 70 20 67 65 74 53 79 6e 63 5b 5d 20 3d 20  eOp getSync[] = 
1c70: 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c  {.      { OP_Col
1c80: 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20 30 2c 20  umnName,  0, 0, 
1c90: 20 20 20 20 20 20 20 22 73 79 6e 63 68 72 6f 6e         "synchron
1ca0: 6f 75 73 22 7d 2c 0a 20 20 20 20 20 20 7b 20 4f  ous"},.      { O
1cb0: 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30  P_ReadCookie,  0
1cc0: 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 3,        0},.
1cd0: 20 20 20 20 20 20 7b 20 4f 50 5f 44 75 70 2c 20        { OP_Dup, 
1ce0: 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20          0, 0,   
1cf0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
1d00: 20 4f 50 5f 49 66 2c 20 20 20 20 20 20 20 20 20   OP_If,         
1d10: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
1d20: 2c 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20  ,  /* 3 */.     
1d30: 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65   { OP_ReadCookie
1d40: 2c 20 20 30 2c 20 32 2c 20 20 20 20 20 20 20 20  ,  0, 2,        
1d50: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49  0},.      { OP_I
1d60: 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 30  nteger,     0, 0
1d70: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
1d80: 20 20 20 7b 20 4f 50 5f 4c 74 2c 20 20 20 20 20     { OP_Lt,     
1d90: 20 20 20 20 20 30 2c 20 35 2c 20 20 20 20 20 20       0, 5,      
1da0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
1db0: 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c  _AddImm,      1,
1dc0: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   0,        0},. 
1dd0: 20 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61       { OP_Callba
1de0: 63 6b 2c 20 20 20 20 31 2c 20 30 2c 20 20 20 20  ck,    1, 0,    
1df0: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
1e00: 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20  OP_Halt,        
1e10: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
1e20: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 41 64 64 49  .      { OP_AddI
1e30: 6d 6d 2c 20 20 20 20 20 2d 31 2c 20 30 2c 20 20  mm,     -1, 0,  
1e40: 20 20 20 20 20 20 30 7d 2c 20 20 2f 2a 20 31 30        0},  /* 10
1e50: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43   */.      { 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 0a 20 20 20 20  ,        0}.    
1e80: 7d 3b 0a 20 20 20 20 69 66 28 20 70 52 69 67 68  };.    if( pRigh
1e90: 74 2d 3e 7a 3d 3d 70 4c 65 66 74 2d 3e 7a 20 29  t->z==pLeft->z )
1ea0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64 72  {.      int addr
1eb0: 20 3d 20 73 71 6c 69 74 65 56 64 62 65 41 64 64   = sqliteVdbeAdd
1ec0: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
1ed0: 69 7a 65 28 67 65 74 53 79 6e 63 29 2c 20 67 65  ize(getSync), ge
1ee0: 74 53 79 6e 63 29 3b 0a 20 20 20 20 20 20 73 71  tSync);.      sq
1ef0: 6c 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 32  liteVdbeChangeP2
1f00: 28 76 2c 20 61 64 64 72 2b 33 2c 20 61 64 64 72  (v, addr+3, addr
1f10: 2b 31 30 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  +10);.    }else{
1f20: 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64 72 3b  .      int addr;
1f30: 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20  .      int size 
1f40: 3d 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65  = db->cache_size
1f50: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 69 7a 65  ;.      if( size
1f60: 3c 30 20 29 20 73 69 7a 65 20 3d 20 2d 73 69 7a  <0 ) size = -siz
1f70: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42  e;.      sqliteB
1f80: 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
1f90: 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 30 29  on(pParse, 0, 0)
1fa0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64  ;.      sqliteVd
1fb0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 52 65  beAddOp(v, OP_Re
1fc0: 61 64 43 6f 6f 6b 69 65 2c 20 30 2c 20 32 29 3b  adCookie, 0, 2);
1fd0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62  .      sqliteVdb
1fe0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 44 75 70  eAddOp(v, OP_Dup
1ff0: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 61  , 0, 0);.      a
2000: 64 64 72 20 3d 20 73 71 6c 69 74 65 56 64 62 65  ddr = sqliteVdbe
2010: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65  AddOp(v, OP_Inte
2020: 67 65 72 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  ger, 0, 0);.    
2030: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
2040: 70 28 76 2c 20 4f 50 5f 4e 65 2c 20 30 2c 20 61  p(v, OP_Ne, 0, a
2050: 64 64 72 2b 33 29 3b 0a 20 20 20 20 20 20 73 71  ddr+3);.      sq
2060: 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c  liteVdbeAddOp(v,
2070: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 4d 41 58 5f   OP_AddImm, MAX_
2080: 50 41 47 45 53 2c 20 30 29 3b 0a 20 20 20 20 20  PAGES, 0);.     
2090: 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70   sqliteVdbeAddOp
20a0: 28 76 2c 20 4f 50 5f 41 62 73 56 61 6c 75 65 2c  (v, OP_AbsValue,
20b0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 64 62   0, 0);.      db
20c0: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ->safety_level =
20d0: 20 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28   getSafetyLevel(
20e0: 7a 52 69 67 68 74 29 2b 31 3b 0a 20 20 20 20 20  zRight)+1;.     
20f0: 20 69 66 28 20 64 62 2d 3e 73 61 66 65 74 79 5f   if( db->safety_
2100: 6c 65 76 65 6c 3d 3d 31 20 29 7b 0a 20 20 20 20  level==1 ){.    
2110: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64      sqliteVdbeAd
2120: 64 4f 70 28 76 2c 20 4f 50 5f 4e 65 67 61 74 69  dOp(v, OP_Negati
2130: 76 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  ve, 0, 0);.     
2140: 20 20 20 73 69 7a 65 20 3d 20 2d 73 69 7a 65 3b     size = -size;
2150: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
2160: 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76  qliteVdbeAddOp(v
2170: 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20  , OP_SetCookie, 
2180: 30 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c  0, 2);.      sql
2190: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
21a0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 64 62 2d 3e  OP_Integer, db->
21b0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 2c 20 30 29  safety_level, 0)
21c0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64  ;.      sqliteVd
21d0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 65  beAddOp(v, OP_Se
21e0: 74 43 6f 6f 6b 69 65 2c 20 30 2c 20 33 29 3b 0a  tCookie, 0, 3);.
21f0: 20 20 20 20 20 20 73 71 6c 69 74 65 45 6e 64 57        sqliteEndW
2200: 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50  riteOperation(pP
2210: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 64 62 2d  arse);.      db-
2220: 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69  >cache_size = si
2230: 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ze;.      sqlite
2240: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
2250: 65 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42 74  e(db->aDb[0].pBt
2260: 2c 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65  , db->cache_size
2270: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 42  );.      sqliteB
2280: 74 72 65 65 53 65 74 53 61 66 65 74 79 4c 65 76  treeSetSafetyLev
2290: 65 6c 28 64 62 2d 3e 61 44 62 5b 30 5d 2e 70 42  el(db->aDb[0].pB
22a0: 74 2c 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65  t, db->safety_le
22b0: 76 65 6c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  vel);.    }.  }e
22c0: 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  lse..  /*.  **  
22d0: 20 50 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e   PRAGMA synchron
22e0: 6f 75 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ous.  **   PRAGM
22f0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46  A synchronous=OF
2300: 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c  F|ON|NORMAL|FULL
2310: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
2320: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63  n or set the loc
2330: 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
2340: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67  synchronous flag
2350: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
2360: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
2370: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63   does not make c
2380: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69  hanges to the di
2390: 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65 0a  sk file and the.
23a0: 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76 61 6c    ** default val
23b0: 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f  ue will be resto
23c0: 72 65 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d  red the next tim
23d0: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  e the database i
23e0: 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20  s.  ** opened.. 
23f0: 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
2400: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 73  StrICmp(zLeft,"s
2410: 79 6e 63 68 72 6f 6e 6f 75 73 22 29 3d 3d 30 20  ynchronous")==0 
2420: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 56 64  ){.    static Vd
2430: 62 65 4f 70 20 67 65 74 53 79 6e 63 5b 5d 20 3d  beOp getSync[] =
2440: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f   {.      { OP_Co
2450: 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20 30 2c  lumnName,  0, 0,
2460: 20 20 20 20 20 20 20 20 22 73 79 6e 63 68 72 6f          "synchro
2470: 6e 6f 75 73 22 7d 2c 0a 20 20 20 20 20 20 7b 20  nous"},.      { 
2480: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20  OP_Callback,    
2490: 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 0,        0},
24a0: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 66 28 20  .    };.    if( 
24b0: 70 52 69 67 68 74 2d 3e 7a 3d 3d 70 4c 65 66 74  pRight->z==pLeft
24c0: 2d 3e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ->z ){.      sql
24d0: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
24e0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 64 62 2d 3e  OP_Integer, db->
24f0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 2c 20  safety_level-1, 
2500: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
2510: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
2520: 20 41 72 72 61 79 53 69 7a 65 28 67 65 74 53 79   ArraySize(getSy
2530: 6e 63 29 2c 20 67 65 74 53 79 6e 63 29 3b 0a 20  nc), getSync);. 
2540: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2550: 69 6e 74 20 73 69 7a 65 20 3d 20 64 62 2d 3e 63  int size = db->c
2560: 61 63 68 65 5f 73 69 7a 65 3b 0a 20 20 20 20 20  ache_size;.     
2570: 20 69 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69   if( size<0 ) si
2580: 7a 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20  ze = -size;.    
2590: 20 20 64 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76    db->safety_lev
25a0: 65 6c 20 3d 20 67 65 74 53 61 66 65 74 79 4c 65  el = getSafetyLe
25b0: 76 65 6c 28 7a 52 69 67 68 74 29 2b 31 3b 0a 20  vel(zRight)+1;. 
25c0: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 73 61 66       if( db->saf
25d0: 65 74 79 5f 6c 65 76 65 6c 3d 3d 31 20 29 20 73  ety_level==1 ) s
25e0: 69 7a 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20  ize = -size;.   
25f0: 20 20 20 64 62 2d 3e 63 61 63 68 65 5f 73 69 7a     db->cache_siz
2600: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20  e = size;.      
2610: 73 71 6c 69 74 65 42 74 72 65 65 53 65 74 43 61  sqliteBtreeSetCa
2620: 63 68 65 53 69 7a 65 28 64 62 2d 3e 61 44 62 5b  cheSize(db->aDb[
2630: 30 5d 2e 70 42 74 2c 20 64 62 2d 3e 63 61 63 68  0].pBt, db->cach
2640: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 20 20 73  e_size);.      s
2650: 71 6c 69 74 65 42 74 72 65 65 53 65 74 53 61 66  qliteBtreeSetSaf
2660: 65 74 79 4c 65 76 65 6c 28 64 62 2d 3e 61 44 62  etyLevel(db->aDb
2670: 5b 30 5d 2e 70 42 74 2c 20 64 62 2d 3e 73 61 66  [0].pBt, db->saf
2680: 65 74 79 5f 6c 65 76 65 6c 29 3b 0a 20 20 20 20  ety_level);.    
2690: 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
26a0: 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a   sqliteStrICmp(z
26b0: 4c 65 66 74 2c 20 22 74 72 69 67 67 65 72 5f 6f  Left, "trigger_o
26c0: 76 65 72 68 65 61 64 5f 74 65 73 74 22 29 3d 3d  verhead_test")==
26d0: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 67 65 74  0 ){.    if( get
26e0: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 29 20  Boolean(zRight) 
26f0: 29 7b 0a 20 20 20 20 20 20 61 6c 77 61 79 73 5f  ){.      always_
2700: 63 6f 64 65 5f 74 72 69 67 67 65 72 5f 73 65 74  code_trigger_set
2710: 75 70 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  up = 1;.    }els
2720: 65 7b 0a 20 20 20 20 20 20 61 6c 77 61 79 73 5f  e{.      always_
2730: 63 6f 64 65 5f 74 72 69 67 67 65 72 5f 73 65 74  code_trigger_set
2740: 75 70 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  up = 0;.    }.  
2750: 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c  }else..  if( sql
2760: 69 74 65 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  iteStrICmp(zLeft
2770: 2c 20 22 76 64 62 65 5f 74 72 61 63 65 22 29 3d  , "vdbe_trace")=
2780: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 67 65  =0 ){.    if( ge
2790: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 29  tBoolean(zRight)
27a0: 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c   ){.      db->fl
27b0: 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 56 64  ags |= SQLITE_Vd
27c0: 62 65 54 72 61 63 65 3b 0a 20 20 20 20 7d 65 6c  beTrace;.    }el
27d0: 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c  se{.      db->fl
27e0: 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 56  ags &= ~SQLITE_V
27f0: 64 62 65 54 72 61 63 65 3b 0a 20 20 20 20 7d 0a  dbeTrace;.    }.
2800: 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 73    }else..  if( s
2810: 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 4c 65  qliteStrICmp(zLe
2820: 66 74 2c 20 22 66 75 6c 6c 5f 63 6f 6c 75 6d 6e  ft, "full_column
2830: 5f 6e 61 6d 65 73 22 29 3d 3d 30 20 29 7b 0a 20  _names")==0 ){. 
2840: 20 20 20 69 66 28 20 67 65 74 42 6f 6f 6c 65 61     if( getBoolea
2850: 6e 28 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20  n(zRight) ){.   
2860: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20     db->flags |= 
2870: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
2880: 6d 65 73 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  mes;.    }else{.
2890: 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
28a0: 26 3d 20 7e 53 51 4c 49 54 45 5f 46 75 6c 6c 43  &= ~SQLITE_FullC
28b0: 6f 6c 4e 61 6d 65 73 3b 0a 20 20 20 20 7d 0a 20  olNames;.    }. 
28c0: 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 73 71   }else..  if( sq
28d0: 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 4c 65 66  liteStrICmp(zLef
28e0: 74 2c 20 22 73 68 6f 77 5f 64 61 74 61 74 79 70  t, "show_datatyp
28f0: 65 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  es")==0 ){.    i
2900: 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  f( getBoolean(zR
2910: 69 67 68 74 29 20 29 7b 0a 20 20 20 20 20 20 64  ight) ){.      d
2920: 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49  b->flags |= SQLI
2930: 54 45 5f 52 65 70 6f 72 74 54 79 70 65 73 3b 0a  TE_ReportTypes;.
2940: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2950: 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53   db->flags &= ~S
2960: 51 4c 49 54 45 5f 52 65 70 6f 72 74 54 79 70 65  QLITE_ReportType
2970: 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  s;.    }.  }else
2980: 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74  ..  if( sqliteSt
2990: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 72 65  rICmp(zLeft, "re
29a0: 73 75 6c 74 5f 73 65 74 5f 64 65 74 61 69 6c 73  sult_set_details
29b0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  ")==0 ){.    if(
29c0: 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67   getBoolean(zRig
29d0: 68 74 29 20 29 7b 0a 20 20 20 20 20 20 64 62 2d  ht) ){.      db-
29e0: 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
29f0: 5f 52 65 73 75 6c 74 44 65 74 61 69 6c 73 3b 0a  _ResultDetails;.
2a00: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2a10: 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 53   db->flags &= ~S
2a20: 51 4c 49 54 45 5f 52 65 73 75 6c 74 44 65 74 61  QLITE_ResultDeta
2a30: 69 6c 73 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  ils;.    }.  }el
2a40: 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  se..  if( sqlite
2a50: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
2a60: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 29 3d  count_changes")=
2a70: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 67 65  =0 ){.    if( ge
2a80: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 29  tBoolean(zRight)
2a90: 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c   ){.      db->fl
2aa0: 61 67 73 20 7c 3d 20 53 51 4c 49 54 45 5f 43 6f  ags |= SQLITE_Co
2ab0: 75 6e 74 52 6f 77 73 3b 0a 20 20 20 20 7d 65 6c  untRows;.    }el
2ac0: 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c  se{.      db->fl
2ad0: 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f 43  ags &= ~SQLITE_C
2ae0: 6f 75 6e 74 52 6f 77 73 3b 0a 20 20 20 20 7d 0a  ountRows;.    }.
2af0: 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 73    }else..  if( s
2b00: 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 4c 65  qliteStrICmp(zLe
2b10: 66 74 2c 20 22 65 6d 70 74 79 5f 72 65 73 75 6c  ft, "empty_resul
2b20: 74 5f 63 61 6c 6c 62 61 63 6b 73 22 29 3d 3d 30  t_callbacks")==0
2b30: 20 29 7b 0a 20 20 20 20 69 66 28 20 67 65 74 42   ){.    if( getB
2b40: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 29 20 29  oolean(zRight) )
2b50: 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67  {.      db->flag
2b60: 73 20 7c 3d 20 53 51 4c 49 54 45 5f 4e 75 6c 6c  s |= SQLITE_Null
2b70: 43 61 6c 6c 62 61 63 6b 3b 0a 20 20 20 20 7d 65  Callback;.    }e
2b80: 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 66  lse{.      db->f
2b90: 6c 61 67 73 20 26 3d 20 7e 53 51 4c 49 54 45 5f  lags &= ~SQLITE_
2ba0: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 3b 0a 20 20  NullCallback;.  
2bb0: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
2bc0: 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70  f( sqliteStrICmp
2bd0: 28 7a 4c 65 66 74 2c 20 22 74 61 62 6c 65 5f 69  (zLeft, "table_i
2be0: 6e 66 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  nfo")==0 ){.    
2bf0: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
2c00: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 46 69   pTab = sqliteFi
2c10: 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67  ndTable(db, zRig
2c20: 68 74 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20  ht, 0);.    if( 
2c30: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 73 74  pTab ){.      st
2c40: 61 74 69 63 20 56 64 62 65 4f 70 20 74 61 62 6c  atic VdbeOp tabl
2c50: 65 49 6e 66 6f 50 72 65 66 61 63 65 5b 5d 20 3d  eInfoPreface[] =
2c60: 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f   {.        { OP_
2c70: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20  ColumnName,  0, 
2c80: 30 2c 20 20 20 20 20 20 20 22 63 69 64 22 7d 2c  0,       "cid"},
2c90: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f  .        { OP_Co
2ca0: 6c 75 6d 6e 4e 61 6d 65 2c 20 20 31 2c 20 30 2c  lumnName,  1, 0,
2cb0: 20 20 20 20 20 20 20 22 6e 61 6d 65 22 7d 2c 0a         "name"},.
2cc0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c          { OP_Col
2cd0: 75 6d 6e 4e 61 6d 65 2c 20 20 32 2c 20 30 2c 20  umnName,  2, 0, 
2ce0: 20 20 20 20 20 20 22 74 79 70 65 22 7d 2c 0a 20        "type"},. 
2cf0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75         { OP_Colu
2d00: 6d 6e 4e 61 6d 65 2c 20 20 33 2c 20 30 2c 20 20  mnName,  3, 0,  
2d10: 20 20 20 20 20 22 6e 6f 74 6e 75 6c 6c 22 7d 2c       "notnull"},
2d20: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f  .        { OP_Co
2d30: 6c 75 6d 6e 4e 61 6d 65 2c 20 20 34 2c 20 30 2c  lumnName,  4, 0,
2d40: 20 20 20 20 20 20 20 22 64 66 6c 74 5f 76 61 6c         "dflt_val
2d50: 75 65 22 7d 2c 0a 20 20 20 20 20 20 7d 3b 0a 20  ue"},.      };. 
2d60: 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
2d70: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
2d80: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
2d90: 7a 65 28 74 61 62 6c 65 49 6e 66 6f 50 72 65 66  ze(tableInfoPref
2da0: 61 63 65 29 2c 20 74 61 62 6c 65 49 6e 66 6f 50  ace), tableInfoP
2db0: 72 65 66 61 63 65 29 3b 0a 20 20 20 20 20 20 73  reface);.      s
2dc0: 71 6c 69 74 65 56 69 65 77 47 65 74 43 6f 6c 75  qliteViewGetColu
2dd0: 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20  mnNames(pParse, 
2de0: 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72  pTab);.      for
2df0: 28 69 3d 30 3b 20 69 3c 70 54 61 62 2d 3e 6e 43  (i=0; i<pTab->nC
2e00: 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; i++){.      
2e10: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
2e20: 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  p(v, OP_Integer,
2e30: 20 69 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   i, 0);.        
2e40: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
2e50: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c 20 30 2c  v, OP_String, 0,
2e60: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
2e70: 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 33 28  iteVdbeChangeP3(
2e80: 76 2c 20 2d 31 2c 20 70 54 61 62 2d 3e 61 43 6f  v, -1, pTab->aCo
2e90: 6c 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50 33 5f 53  l[i].zName, P3_S
2ea0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
2eb0: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
2ec0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c 20 30 2c  v, OP_String, 0,
2ed0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
2ee0: 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 33 28  iteVdbeChangeP3(
2ef0: 76 2c 20 2d 31 2c 20 0a 20 20 20 20 20 20 20 20  v, -1, .        
2f00: 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 5d     pTab->aCol[i]
2f10: 2e 7a 54 79 70 65 20 3f 20 70 54 61 62 2d 3e 61  .zType ? pTab->a
2f20: 43 6f 6c 5b 69 5d 2e 7a 54 79 70 65 20 3a 20 22  Col[i].zType : "
2f30: 6e 75 6d 65 72 69 63 22 2c 20 50 33 5f 53 54 41  numeric", P3_STA
2f40: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
2f50: 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c  liteVdbeAddOp(v,
2f60: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54 61   OP_Integer, pTa
2f70: 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 6e 6f 74 4e 75  b->aCol[i].notNu
2f80: 6c 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  ll, 0);.        
2f90: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
2fa0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c 20 30 2c  v, OP_String, 0,
2fb0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
2fc0: 69 74 65 56 64 62 65 43 68 61 6e 67 65 50 33 28  iteVdbeChangeP3(
2fd0: 76 2c 20 2d 31 2c 20 70 54 61 62 2d 3e 61 43 6f  v, -1, pTab->aCo
2fe0: 6c 5b 69 5d 2e 7a 44 66 6c 74 2c 20 50 33 5f 53  l[i].zDflt, 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 43 61 6c 6c 62 61 63 6b 2c 20  v, OP_Callback, 
3020: 35 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  5, 0);.      }. 
3030: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
3040: 69 66 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d  if( sqliteStrICm
3050: 70 28 7a 4c 65 66 74 2c 20 22 69 6e 64 65 78 5f  p(zLeft, "index_
3060: 69 6e 66 6f 22 29 3d 3d 30 20 29 7b 0a 20 20 20  info")==0 ){.   
3070: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
3080: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
3090: 20 20 20 70 49 64 78 20 3d 20 73 71 6c 69 74 65     pIdx = sqlite
30a0: 46 69 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52  FindIndex(db, zR
30b0: 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 69 66  ight, 0);.    if
30c0: 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20 20  ( pIdx ){.      
30d0: 73 74 61 74 69 63 20 56 64 62 65 4f 70 20 74 61  static VdbeOp ta
30e0: 62 6c 65 49 6e 66 6f 50 72 65 66 61 63 65 5b 5d  bleInfoPreface[]
30f0: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f   = {.        { O
3100: 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30  P_ColumnName,  0
3110: 2c 20 30 2c 20 20 20 20 20 20 20 22 73 65 71 6e  , 0,       "seqn
3120: 6f 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b 20 4f  o"},.        { O
3130: 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 31  P_ColumnName,  1
3140: 2c 20 30 2c 20 20 20 20 20 20 20 22 63 69 64 22  , 0,       "cid"
3150: 7d 2c 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  },.        { OP_
3160: 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 32 2c 20  ColumnName,  2, 
3170: 30 2c 20 20 20 20 20 20 20 22 6e 61 6d 65 22 7d  0,       "name"}
3180: 2c 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  ,.      };.     
3190: 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 70 54   int i;.      pT
31a0: 61 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c  ab = pIdx->pTabl
31b0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  e;.      sqliteV
31c0: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
31d0: 41 72 72 61 79 53 69 7a 65 28 74 61 62 6c 65 49  ArraySize(tableI
31e0: 6e 66 6f 50 72 65 66 61 63 65 29 2c 20 74 61 62  nfoPreface), tab
31f0: 6c 65 49 6e 66 6f 50 72 65 66 61 63 65 29 3b 0a  leInfoPreface);.
3200: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
3210: 3c 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20  <pIdx->nColumn; 
3220: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  i++){.        in
3230: 74 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61  t cnum = pIdx->a
3240: 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20  iColumn[i];.    
3250: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64      sqliteVdbeAd
3260: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
3270: 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20 20 20 20  r, i, 0);.      
3280: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
3290: 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  p(v, OP_Integer,
32a0: 20 63 6e 75 6d 2c 20 30 29 3b 0a 20 20 20 20 20   cnum, 0);.     
32b0: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
32c0: 4f 70 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 2c  Op(v, OP_String,
32d0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   0, 0);.        
32e0: 61 73 73 65 72 74 28 20 70 54 61 62 2d 3e 6e 43  assert( pTab->nC
32f0: 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20 20 20 20 20  ol>cnum );.     
3300: 20 20 20 73 71 6c 69 74 65 56 64 62 65 43 68 61     sqliteVdbeCha
3310: 6e 67 65 50 33 28 76 2c 20 2d 31 2c 20 70 54 61  ngeP3(v, -1, pTa
3320: 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e  b->aCol[cnum].zN
3330: 61 6d 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  ame, P3_STATIC);
3340: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56  .        sqliteV
3350: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43  dbeAddOp(v, OP_C
3360: 61 6c 6c 62 61 63 6b 2c 20 33 2c 20 30 29 3b 0a  allback, 3, 0);.
3370: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
3380: 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c  }else..  if( sql
3390: 69 74 65 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  iteStrICmp(zLeft
33a0: 2c 20 22 69 6e 64 65 78 5f 6c 69 73 74 22 29 3d  , "index_list")=
33b0: 3d 30 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20  =0 ){.    Index 
33c0: 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65  *pIdx;.    Table
33d0: 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62   *pTab;.    pTab
33e0: 20 3d 20 73 71 6c 69 74 65 46 69 6e 64 54 61 62   = sqliteFindTab
33f0: 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 30  le(db, zRight, 0
3400: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
3410: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
3420: 69 74 65 47 65 74 56 64 62 65 28 70 50 61 72 73  iteGetVdbe(pPars
3430: 65 29 3b 0a 20 20 20 20 20 20 70 49 64 78 20 3d  e);.      pIdx =
3440: 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 0a 20   pTab->pIndex;. 
3450: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 54 61     }.    if( pTa
3460: 62 20 26 26 20 70 49 64 78 20 29 7b 0a 20 20 20  b && pIdx ){.   
3470: 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20     int i = 0; . 
3480: 20 20 20 20 20 73 74 61 74 69 63 20 56 64 62 65       static Vdbe
3490: 4f 70 20 69 6e 64 65 78 4c 69 73 74 50 72 65 66  Op indexListPref
34a0: 61 63 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ace[] = {.      
34b0: 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d    { OP_ColumnNam
34c0: 65 2c 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20  e,  0, 0,       
34d0: 22 73 65 71 22 7d 2c 0a 20 20 20 20 20 20 20 20  "seq"},.        
34e0: 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c  { OP_ColumnName,
34f0: 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 22 6e    1, 0,       "n
3500: 61 6d 65 22 7d 2c 0a 20 20 20 20 20 20 20 20 7b  ame"},.        {
3510: 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20   OP_ColumnName, 
3520: 20 32 2c 20 30 2c 20 20 20 20 20 20 20 22 75 6e   2, 0,       "un
3530: 69 71 75 65 22 7d 2c 0a 20 20 20 20 20 20 7d 3b  ique"},.      };
3540: 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56 64  ..      sqliteVd
3550: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
3560: 72 72 61 79 53 69 7a 65 28 69 6e 64 65 78 4c 69  rraySize(indexLi
3570: 73 74 50 72 65 66 61 63 65 29 2c 20 69 6e 64 65  stPreface), inde
3580: 78 4c 69 73 74 50 72 65 66 61 63 65 29 3b 0a 20  xListPreface);. 
3590: 20 20 20 20 20 77 68 69 6c 65 28 70 49 64 78 29       while(pIdx)
35a0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
35b0: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
35c0: 49 6e 74 65 67 65 72 2c 20 69 2c 20 30 29 3b 0a  Integer, i, 0);.
35d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 56 64          sqliteVd
35e0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 74  beAddOp(v, OP_St
35f0: 72 69 6e 67 2c 20 30 2c 20 30 29 3b 0a 20 20 20  ring, 0, 0);.   
3600: 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 43       sqliteVdbeC
3610: 68 61 6e 67 65 50 33 28 76 2c 20 2d 31 2c 20 70  hangeP3(v, -1, p
3620: 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 33 5f 53  Idx->zName, P3_S
3630: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
3640: 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f 70 28  sqliteVdbeAddOp(
3650: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
3660: 49 64 78 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45  Idx->onError!=OE
3670: 5f 4e 6f 6e 65 2c 20 30 29 3b 0a 20 20 20 20 20  _None, 0);.     
3680: 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64     sqliteVdbeAdd
3690: 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63  Op(v, OP_Callbac
36a0: 6b 2c 20 33 2c 20 30 29 3b 0a 20 20 20 20 20 20  k, 3, 0);.      
36b0: 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 70    ++i;.        p
36c0: 49 64 78 20 3d 20 70 49 64 78 2d 3e 70 4e 65 78  Idx = pIdx->pNex
36d0: 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
36e0: 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
36f0: 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 4c  sqliteStrICmp(zL
3700: 65 66 74 2c 20 22 64 61 74 61 62 61 73 65 5f 6c  eft, "database_l
3710: 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ist")==0 ){.    
3720: 69 6e 74 20 69 3b 0a 20 20 20 20 73 74 61 74 69  int i;.    stati
3730: 63 20 56 64 62 65 4f 70 20 69 6e 64 65 78 4c 69  c VdbeOp indexLi
3740: 73 74 50 72 65 66 61 63 65 5b 5d 20 3d 20 7b 0a  stPreface[] = {.
3750: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d        { OP_Colum
3760: 6e 4e 61 6d 65 2c 20 20 30 2c 20 30 2c 20 20 20  nName,  0, 0,   
3770: 20 20 20 20 22 73 65 71 22 7d 2c 0a 20 20 20 20      "seq"},.    
3780: 20 20 7b 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d    { OP_ColumnNam
3790: 65 2c 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20  e,  1, 0,       
37a0: 22 6e 61 6d 65 22 7d 2c 0a 20 20 20 20 7d 3b 0a  "name"},.    };.
37b0: 0a 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41  .    sqliteVdbeA
37c0: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
37d0: 79 53 69 7a 65 28 69 6e 64 65 78 4c 69 73 74 50  ySize(indexListP
37e0: 72 65 66 61 63 65 29 2c 20 69 6e 64 65 78 4c 69  reface), indexLi
37f0: 73 74 50 72 65 66 61 63 65 29 3b 0a 20 20 20 20  stPreface);.    
3800: 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
3810: 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
3820: 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  if( db->aDb[i].p
3830: 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  Bt==0 ) continue
3840: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3850: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
3860: 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  !=0 );.      sql
3870: 69 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20  iteVdbeAddOp(v, 
3880: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 30  OP_Integer, i, 0
3890: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 56  );.      sqliteV
38a0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53  dbeAddOp(v, OP_S
38b0: 74 72 69 6e 67 2c 20 30 2c 20 30 29 3b 0a 20 20  tring, 0, 0);.  
38c0: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 43 68      sqliteVdbeCh
38d0: 61 6e 67 65 50 33 28 76 2c 20 2d 31 2c 20 64 62  angeP3(v, -1, db
38e0: 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  ->aDb[i].zName, 
38f0: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
3900: 20 20 73 71 6c 69 74 65 56 64 62 65 41 64 64 4f    sqliteVdbeAddO
3910: 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b  p(v, OP_Callback
3920: 2c 20 32 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  , 2, 0);.    }. 
3930: 20 7d 65 6c 73 65 0a 20 20 2f 2a 0a 20 20 2a 2a   }else.  /*.  **
3940: 20 20 20 50 52 41 47 4d 41 20 74 6d 70 64 62 5f     PRAGMA tmpdb_
3950: 6c 6f 63 61 74 69 6f 6e 0a 20 20 2a 2a 20 20 20  location.  **   
3960: 50 52 41 47 4d 41 20 74 6d 70 64 62 5f 6c 6f 63  PRAGMA tmpdb_loc
3970: 61 74 69 6f 6e 3d 20 44 45 46 41 55 4c 54 7c 4d  ation= DEFAULT|M
3980: 45 4d 4f 52 59 7c 46 49 4c 45 0a 20 20 2a 2a 0a  EMORY|FILE.  **.
3990: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
39a0: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
39b0: 75 65 20 6f 66 20 74 68 65 20 74 6d 70 64 62 5f  ue of the tmpdb_
39c0: 6c 6f 63 61 74 69 6f 6e 20 66 6c 61 67 2e 20 20  location flag.  
39d0: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
39e0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f  e local value do
39f0: 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e  es not make chan
3a00: 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20  ges to the disk 
3a10: 66 69 6c 65 20 61 6e 64 20 74 68 65 20 64 65 66  file and the def
3a20: 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75 65 20  ault.  ** value 
3a30: 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64  will be restored
3a40: 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74   the next time t
3a50: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6f  he database is o
3a60: 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  pened..  **.  **
3a70: 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20 69 73   Note that it is
3a80: 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68   possible for th
3a90: 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 69 6c  e library compil
3aa0: 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74  e-time options t
3ab0: 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64 65 20  o.  ** override 
3ac0: 74 68 69 73 20 73 65 74 74 69 6e 67 0a 20 20 2a  this setting.  *
3ad0: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 53 74  /.  if( sqliteSt
3ae0: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 74 6d  rICmp(zLeft, "tm
3af0: 70 64 62 5f 6c 6f 63 61 74 69 6f 6e 22 29 3d 3d  pdb_location")==
3b00: 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20  0 ){.    static 
3b10: 56 64 62 65 4f 70 20 67 65 74 54 6d 70 44 62 4c  VdbeOp getTmpDbL
3b20: 6f 63 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b  oc[] = {.      {
3b30: 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 2c 20   OP_ColumnName, 
3b40: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 22 74   0, 0,        "t
3b50: 6d 70 64 62 5f 6c 6f 63 61 74 69 6f 6e 22 7d 2c  mpdb_location"},
3b60: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c  .      { OP_Call
3b70: 62 61 63 6b 2c 20 20 20 20 31 2c 20 30 2c 20 20  back,    1, 0,  
3b80: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b        0},.    };
3b90: 0a 20 20 20 20 69 66 28 20 70 52 69 67 68 74 2d  .    if( pRight-
3ba0: 3e 7a 3d 3d 70 4c 65 66 74 2d 3e 7a 20 29 7b 0a  >z==pLeft->z ){.
3bb0: 20 20 20 20 20 20 73 71 6c 69 74 65 56 64 62 65        sqliteVdbe
3bc0: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65  AddOp(v, OP_Inte
3bd0: 67 65 72 2c 20 64 62 2d 3e 74 6d 70 64 62 5f 6c  ger, db->tmpdb_l
3be0: 6f 63 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  oc, 0);.      sq
3bf0: 6c 69 74 65 56 64 62 65 41 64 64 4f 70 4c 69 73  liteVdbeAddOpLis
3c00: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67  t(v, ArraySize(g
3c10: 65 74 54 6d 70 44 62 4c 6f 63 29 2c 20 67 65 74  etTmpDbLoc), get
3c20: 54 6d 70 44 62 4c 6f 63 29 3b 0a 20 20 20 20 7d  TmpDbLoc);.    }
3c30: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 20 28  else{.      if (
3c40: 26 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 20  &db->aDb[1].pBt 
3c50: 21 3d 20 30 29 20 7b 0a 09 73 71 6c 69 74 65 45  != 0) {..sqliteE
3c60: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
3c70: 22 54 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64  "The temporary d
3c80: 61 74 61 62 61 73 65 20 61 6c 72 65 61 64 79 20  atabase already 
3c90: 65 78 69 73 74 73 2c 20 69 74 73 20 6c 6f 63 61  exists, its loca
3ca0: 74 69 6f 6e 20 63 61 6e 6e 6f 74 20 6e 6f 77 20  tion cannot now 
3cb0: 62 65 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  be changed");.  
3cc0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 64 62      } else {..db
3cd0: 2d 3e 74 6d 70 64 62 5f 6c 6f 63 20 3d 20 67 65  ->tmpdb_loc = ge
3ce0: 74 54 6d 70 64 62 4c 6f 63 61 74 69 6f 6e 28 7a  tTmpdbLocation(z
3cf0: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 0a  Right);.      }.
3d00: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 20 20      }.  }else.  
3d10: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
3d20: 20 64 65 66 61 75 6c 74 5f 74 6d 70 64 62 5f 6c   default_tmpdb_l
3d30: 6f 63 61 74 69 6f 6e 0a 20 20 2a 2a 20 20 20 50  ocation.  **   P
3d40: 52 41 47 4d 41 20 64 65 66 61 75 6c 74 5f 74 6d  RAGMA default_tm
3d50: 70 64 62 5f 6c 6f 63 61 74 69 6f 6e 3d 20 44 45  pdb_location= DE
3d60: 46 41 55 4c 54 7c 4d 45 4d 4f 52 59 7c 46 49 4c  FAULT|MEMORY|FIL
3d70: 45 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  E.  **.  ** Retu
3d80: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  rn or set the va
3d90: 6c 75 65 20 6f 66 20 74 68 65 20 70 65 72 73 69  lue of the persi
3da0: 73 74 65 6e 74 20 74 6d 70 64 62 5f 6c 6f 63 61  stent tmpdb_loca
3db0: 74 69 6f 6e 20 66 6c 61 67 20 28 61 73 0a 20 20  tion flag (as.  
3dc0: 2a 2a 20 77 65 6c 6c 20 61 73 20 74 68 65 20 76  ** well as the v
3dd0: 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 69  alue currently i
3de0: 6e 20 66 6f 72 63 65 29 2e 0a 20 20 2a 2a 0a 20  n force)..  **. 
3df0: 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 69 74   ** Note that it
3e00: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72   is possible for
3e10: 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f 6d   the library com
3e20: 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
3e30: 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69  s to.  ** overri
3e40: 64 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 0a  de this setting.
3e50: 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
3e60: 65 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  eStrICmp(zLeft, 
3e70: 22 64 65 66 61 75 6c 74 5f 74 6d 70 64 62 5f 6c  "default_tmpdb_l
3e80: 6f 63 61 74 69 6f 6e 22 29 3d 3d 30 20 29 7b 0a  ocation")==0 ){.
3e90: 20 20 20 20 73 74 61 74 69 63 20 56 64 62 65 4f      static VdbeO
3ea0: 70 20 67 65 74 54 6d 70 44 62 4c 6f 63 5b 5d 20  p getTmpDbLoc[] 
3eb0: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43  = {.      { OP_C
3ec0: 6f 6c 75 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20 30  olumnName,  0, 0
3ed0: 2c 20 20 20 20 20 20 20 20 22 74 6d 70 64 62 5f  ,        "tmpdb_
3ee0: 6c 6f 63 61 74 69 6f 6e 22 7d 2c 0a 20 20 20 20  location"},.    
3ef0: 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
3f00: 65 2c 20 20 30 2c 20 35 2c 20 20 20 20 20 20 20  e,  0, 5,       
3f10: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
3f20: 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31 2c 20  Callback,    1, 
3f30: 30 2c 20 20 20 20 20 20 20 20 30 7d 7d 3b 0a 20  0,        0}};. 
3f40: 20 20 20 69 66 28 20 70 52 69 67 68 74 2d 3e 7a     if( pRight->z
3f50: 3d 3d 70 4c 65 66 74 2d 3e 7a 20 29 7b 0a 20 20  ==pLeft->z ){.  
3f60: 20 20 20 20 73 71 6c 69 74 65 56 64 62 65 41 64      sqliteVdbeAd
3f70: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
3f80: 53 69 7a 65 28 67 65 74 54 6d 70 44 62 4c 6f 63  Size(getTmpDbLoc
3f90: 29 2c 20 67 65 74 54 6d 70 44 62 4c 6f 63 29 3b  ), getTmpDbLoc);
3fa0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
3fb0: 20 20 69 66 20 28 26 64 62 2d 3e 61 44 62 5b 31    if (&db->aDb[1
3fc0: 5d 2e 70 42 74 20 21 3d 20 30 29 20 7b 0a 09 73  ].pBt != 0) {..s
3fd0: 71 6c 69 74 65 45 72 72 6f 72 4d 73 67 28 70 50  qliteErrorMsg(pP
3fe0: 61 72 73 65 2c 20 22 54 68 65 20 74 65 6d 70 6f  arse, "The tempo
3ff0: 72 61 72 79 20 64 61 74 61 62 61 73 65 20 61 6c  rary database al
4000: 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 69 74  ready exists, it
4010: 73 20 6c 6f 63 61 74 69 6f 6e 20 63 61 6e 6e 6f  s location canno
4020: 74 20 6e 6f 77 20 62 65 20 63 68 61 6e 67 65 64  t now be changed
4030: 22 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ");.      } else
4040: 20 7b 0a 09 73 71 6c 69 74 65 42 65 67 69 6e 57   {..sqliteBeginW
4050: 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50  riteOperation(pP
4060: 61 72 73 65 2c 20 30 2c 20 30 29 3b 0a 09 64 62  arse, 0, 0);..db
4070: 2d 3e 74 6d 70 64 62 5f 6c 6f 63 20 3d 20 67 65  ->tmpdb_loc = ge
4080: 74 54 6d 70 64 62 4c 6f 63 61 74 69 6f 6e 28 7a  tTmpdbLocation(z
4090: 52 69 67 68 74 29 3b 0a 09 73 71 6c 69 74 65 56  Right);..sqliteV
40a0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49  dbeAddOp(v, OP_I
40b0: 6e 74 65 67 65 72 2c 20 64 62 2d 3e 74 6d 70 64  nteger, db->tmpd
40c0: 62 5f 6c 6f 63 2c 20 30 29 3b 0a 09 73 71 6c 69  b_loc, 0);..sqli
40d0: 74 65 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  teVdbeAddOp(v, O
40e0: 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 30 2c 20  P_SetCookie, 0, 
40f0: 35 29 3b 0a 09 73 71 6c 69 74 65 45 6e 64 57 72  5);..sqliteEndWr
4100: 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61  iteOperation(pPa
4110: 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rse);.      }.  
4120: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66    }.  }else..#if
4130: 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 69 66  ndef NDEBUG.  if
4140: 28 20 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28  ( sqliteStrICmp(
4150: 7a 4c 65 66 74 2c 20 22 70 61 72 73 65 72 5f 74  zLeft, "parser_t
4160: 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  race")==0 ){.   
4170: 20 65 78 74 65 72 6e 20 76 6f 69 64 20 73 71 6c   extern void sql
4180: 69 74 65 50 61 72 73 65 72 54 72 61 63 65 28 46  iteParserTrace(F
4190: 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 20  ILE*, char *);. 
41a0: 20 20 20 69 66 28 20 67 65 74 42 6f 6f 6c 65 61     if( getBoolea
41b0: 6e 28 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20  n(zRight) ){.   
41c0: 20 20 20 73 71 6c 69 74 65 50 61 72 73 65 72 54     sqliteParserT
41d0: 72 61 63 65 28 73 74 64 6f 75 74 2c 20 22 70 61  race(stdout, "pa
41e0: 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 7d 65  rser: ");.    }e
41f0: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
4200: 65 50 61 72 73 65 72 54 72 61 63 65 28 30 2c 20  eParserTrace(0, 
4210: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  0);.    }.  }els
4220: 65 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  e.#endif..  if( 
4230: 73 71 6c 69 74 65 53 74 72 49 43 6d 70 28 7a 4c  sqliteStrICmp(zL
4240: 65 66 74 2c 20 22 69 6e 74 65 67 72 69 74 79 5f  eft, "integrity_
4250: 63 68 65 63 6b 22 29 3d 3d 30 20 29 7b 0a 20 20  check")==0 ){.  
4260: 20 20 73 74 61 74 69 63 20 56 64 62 65 4f 70 20    static VdbeOp 
4270: 63 68 65 63 6b 44 62 5b 5d 20 3d 20 7b 0a 20 20  checkDb[] = {.  
4280: 20 20 20 20 7b 20 4f 50 5f 53 65 74 49 6e 73 65      { OP_SetInse
4290: 72 74 2c 20 20 20 30 2c 20 30 2c 20 20 20 20 20  rt,   0, 0,     
42a0: 20 20 20 22 32 22 7d 2c 0a 20 20 20 20 20 20 7b     "2"},.      {
42b0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
42c0: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
42d0: 2c 20 20 20 0a 20 20 20 20 20 20 7b 20 4f 50 5f  ,   .      { OP_
42e0: 4f 70 65 6e 52 65 61 64 2c 20 20 20 20 30 2c 20  OpenRead,    0, 
42f0: 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  2,        0},.  
4300: 20 20 20 20 7b 20 4f 50 5f 52 65 77 69 6e 64 2c      { OP_Rewind,
4310: 20 20 20 20 20 20 30 2c 20 37 2c 20 20 20 20 20        0, 7,     
4320: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
4330: 50 5f 43 6f 6c 75 6d 6e 2c 20 20 20 20 20 20 30  P_Column,      0
4340: 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 3,        0}, 
4350: 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20     /* 4 */.     
4360: 20 7b 20 4f 50 5f 53 65 74 49 6e 73 65 72 74 2c   { OP_SetInsert,
4370: 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20     0, 0,        
4380: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e  0},.      { OP_N
4390: 65 78 74 2c 20 20 20 20 20 20 20 20 30 2c 20 34  ext,        0, 4
43a0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
43b0: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 72 69 74     { OP_Integrit
43c0: 79 43 6b 2c 20 30 2c 20 30 2c 20 20 20 20 20 20  yCk, 0, 0,      
43d0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 37 20 2a 2f    0},    /* 7 */
43e0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6c 75  .      { OP_Colu
43f0: 6d 6e 4e 61 6d 65 2c 20 20 30 2c 20 30 2c 20 20  mnName,  0, 0,  
4400: 20 20 20 20 20 20 22 69 6e 74 65 67 72 69 74 79        "integrity
4410: 5f 63 68 65 63 6b 22 7d 2c 0a 20 20 20 20 20 20  _check"},.      
4420: 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20  { OP_Callback,  
4430: 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30    1, 0,        0
4440: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 65  },.      { OP_Se
4450: 74 49 6e 73 65 72 74 2c 20 20 20 31 2c 20 30 2c  tInsert,   1, 0,
4460: 20 20 20 20 20 20 20 20 22 32 22 7d 2c 0a 20 20          "2"},.  
4470: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
4480: 2c 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20  ,     1, 0,     
4490: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
44a0: 50 5f 4f 70 65 6e 52 65 61 64 2c 20 20 20 20 31  P_OpenRead,    1
44b0: 2c 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 2,        0},.
44c0: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 77 69 6e        { OP_Rewin
44d0: 64 2c 20 20 20 20 20 20 31 2c 20 31 37 2c 20 20  d,      1, 17,  
44e0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
44f0: 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 20 20 20 20   OP_Column,     
4500: 20 31 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d   1, 3,        0}
4510: 2c 20 20 20 20 2f 2a 20 31 34 20 2a 2f 0a 20 20  ,    /* 14 */.  
4520: 20 20 20 20 7b 20 4f 50 5f 53 65 74 49 6e 73 65      { OP_SetInse
4530: 72 74 2c 20 20 20 31 2c 20 30 2c 20 20 20 20 20  rt,   1, 0,     
4540: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
4550: 50 5f 4e 65 78 74 2c 20 20 20 20 20 20 20 20 31  P_Next,        1
4560: 2c 20 31 34 2c 20 20 20 20 20 20 20 30 7d 2c 0a  , 14,       0},.
4570: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
4580: 72 69 74 79 43 6b 2c 20 31 2c 20 31 2c 20 20 20  rityCk, 1, 1,   
4590: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31       0},    /* 1
45a0: 37 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  7 */.      { OP_
45b0: 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31 2c 20  Callback,    1, 
45c0: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  0,        0},.  
45d0: 20 20 7d 3b 0a 20 20 20 20 73 71 6c 69 74 65 56    };.    sqliteV
45e0: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
45f0: 41 72 72 61 79 53 69 7a 65 28 63 68 65 63 6b 44  ArraySize(checkD
4600: 62 29 2c 20 63 68 65 63 6b 44 62 29 3b 0a 20 20  b), checkDb);.  
4610: 7d 65 6c 73 65 0a 0a 20 20 7b 7d 0a 20 20 73 71  }else..  {}.  sq
4620: 6c 69 74 65 46 72 65 65 28 7a 4c 65 66 74 29 3b  liteFree(zLeft);
4630: 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a 52  .  sqliteFree(zR
4640: 69 67 68 74 29 3b 0a 7d 0a                       ight);.}.