/ Hex Artifact Content
Login

Artifact 44e192eb5928157bdb015926f858a7c6e3ef6c98:


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 37 33 20 32 30  agma.c,v 1.73 20
01d0: 30 34 2f 31 30 2f 33 31 20 30 32 3a 32 32 3a 34  04/10/31 02:22:4
01e0: 39 20 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a 23  9 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 23 69 66 20 64 65  ctype.h>..#if de
0220: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
0230: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
0240: 51 4c 49 54 45 5f 54 45 53 54 29 0a 23 20 69 6e  QLITE_TEST).# in
0250: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
0260: 23 20 69 6e 63 6c 75 64 65 20 22 62 74 72 65 65  # include "btree
0270: 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h".#endif../*.*
0280: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
0290: 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20  given string as 
02a0: 61 20 73 61 66 65 74 79 20 6c 65 76 65 6c 2e 20  a safety level. 
02b0: 20 52 65 74 75 72 6e 20 30 20 66 6f 72 20 4f 46   Return 0 for OF
02c0: 46 2c 0a 2a 2a 20 31 20 66 6f 72 20 4f 4e 20 6f  F,.** 1 for ON o
02d0: 72 20 4e 4f 52 4d 41 4c 20 61 6e 64 20 32 20 66  r NORMAL and 2 f
02e0: 6f 72 20 46 55 4c 4c 2e 20 20 52 65 74 75 72 6e  or FULL.  Return
02f0: 20 31 20 66 6f 72 20 61 6e 20 65 6d 70 74 79 20   1 for an empty 
0300: 6f 72 20 0a 2a 2a 20 75 6e 72 65 63 6f 67 6e 69  or .** unrecogni
0310: 7a 65 64 20 73 74 72 69 6e 67 20 61 72 67 75 6d  zed string argum
0320: 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  ent..**.** Note 
0330: 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20  that the values 
0340: 72 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e 65  returned are one
0350: 20 6c 65 73 73 20 74 68 61 74 20 74 68 65 20 76   less that the v
0360: 61 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73 68  alues that.** sh
0370: 6f 75 6c 64 20 62 65 20 70 61 73 73 65 64 20 69  ould be passed i
0380: 6e 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65 65  nto sqlite3Btree
0390: 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 29  SetSafetyLevel()
03a0: 2e 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a 2a  .  The is done.*
03b0: 2a 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65 67  * to support leg
03c0: 61 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20 54  acy SQL code.  T
03d0: 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c 20  he safety level 
03e0: 75 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c 65  used to be boole
03f0: 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72 20  an.** and older 
0400: 73 63 72 69 70 74 73 20 6d 61 79 20 68 61 76 65  scripts may have
0410: 20 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30 20   used numbers 0 
0420: 66 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66 6f  for OFF and 1 fo
0430: 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  r ON..*/.static 
0440: 69 6e 74 20 67 65 74 53 61 66 65 74 79 4c 65 76  int getSafetyLev
0450: 65 6c 28 63 6f 6e 73 74 20 75 38 20 2a 7a 29 7b  el(const u8 *z){
0460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0480: 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35   123456789 12345
0490: 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69 63  6789 */.  static
04a0: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65 78   const char zTex
04b0: 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65  t[] = "onoffalse
04c0: 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20  yestruefull";.  
04d0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20  static const u8 
04e0: 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20  iOffset[] = {0, 
04f0: 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20  1, 2, 4, 9, 12, 
0500: 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  16};.  static co
0510: 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d  nst u8 iLength[]
0520: 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20   = {2, 2, 3, 5, 
0530: 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74  3, 4, 4};.  stat
0540: 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61 6c  ic const u8 iVal
0550: 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30  ue[] =  {1, 0, 0
0560: 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20  , 0, 1, 1, 2};. 
0570: 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28   int i, n;.  if(
0580: 20 69 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a   isdigit(*z) ){.
0590: 20 20 20 20 72 65 74 75 72 6e 20 61 74 6f 69 28      return atoi(
05a0: 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73 74  z);.  }.  n = st
05b0: 72 6c 65 6e 28 7a 29 3b 0a 20 20 66 6f 72 28 69  rlen(z);.  for(i
05c0: 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 69 4c 65  =0; i<sizeof(iLe
05d0: 6e 67 74 68 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  ngth); i++){.   
05e0: 20 69 66 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d   if( iLength[i]=
05f0: 3d 6e 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  =n && sqlite3Str
0600: 4e 49 43 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66  NICmp(&zText[iOf
0610: 66 73 65 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30  fset[i]],z,n)==0
0620: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
0630: 20 69 56 61 6c 75 65 5b 69 5d 3b 0a 20 20 20 20   iValue[i];.    
0640: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 31  }.  }.  return 1
0650: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  ;.}../*.** Inter
0660: 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20 73  pret the given s
0670: 74 72 69 6e 67 20 61 73 20 61 20 62 6f 6f 6c 65  tring as a boole
0680: 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  an value..*/.sta
0690: 74 69 63 20 69 6e 74 20 67 65 74 42 6f 6f 6c 65  tic int getBoole
06a0: 61 6e 28 63 6f 6e 73 74 20 75 38 20 2a 7a 29 7b  an(const u8 *z){
06b0: 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53 61 66  .  return getSaf
06c0: 65 74 79 4c 65 76 65 6c 28 7a 29 26 31 3b 0a 7d  etyLevel(z)&1;.}
06d0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ../*.** Interpre
06e0: 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69  t the given stri
06f0: 6e 67 20 61 73 20 61 20 74 65 6d 70 20 64 62 20  ng as a temp db 
0700: 6c 6f 63 61 74 69 6f 6e 2e 20 52 65 74 75 72 6e  location. Return
0710: 20 31 20 66 6f 72 20 66 69 6c 65 0a 2a 2a 20 62   1 for file.** b
0720: 61 63 6b 65 64 20 74 65 6d 70 6f 72 61 72 79 20  acked temporary 
0730: 64 61 74 61 62 61 73 65 73 2c 20 32 20 66 6f 72  databases, 2 for
0740: 20 74 68 65 20 52 65 64 2d 42 6c 61 63 6b 20 74   the Red-Black t
0750: 72 65 65 20 69 6e 20 6d 65 6d 6f 72 79 20 64 61  ree in memory da
0760: 74 61 62 61 73 65 0a 2a 2a 20 61 6e 64 20 30 20  tabase.** and 0 
0770: 74 6f 20 75 73 65 20 74 68 65 20 63 6f 6d 70 69  to use the compi
0780: 6c 65 2d 74 69 6d 65 20 64 65 66 61 75 6c 74 2e  le-time default.
0790: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67  .*/.static int g
07a0: 65 74 54 65 6d 70 53 74 6f 72 65 28 63 6f 6e 73  etTempStore(cons
07b0: 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66  t char *z){.  if
07c0: 28 20 7a 5b 30 5d 3e 3d 27 30 27 20 26 26 20 7a  ( z[0]>='0' && z
07d0: 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a 20 20 20 20  [0]<='2' ){.    
07e0: 72 65 74 75 72 6e 20 7a 5b 30 5d 20 2d 20 27 30  return z[0] - '0
07f0: 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  ';.  }else if( s
0800: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c  qlite3StrICmp(z,
0810: 20 22 66 69 6c 65 22 29 3d 3d 30 20 29 7b 0a 20   "file")==0 ){. 
0820: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
0830: 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
0840: 53 74 72 49 43 6d 70 28 7a 2c 20 22 6d 65 6d 6f  StrICmp(z, "memo
0850: 72 79 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72  ry")==0 ){.    r
0860: 65 74 75 72 6e 20 32 3b 0a 20 20 7d 65 6c 73 65  eturn 2;.  }else
0870: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a  {.    return 0;.
0880: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 66 20    }.}../*.** If 
0890: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
08a0: 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73 65  e is open, close
08b0: 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68 65   it and mark the
08c0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
08d0: 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20 72  .** as needing r
08e0: 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73 20  eloading.  This 
08f0: 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68 65  must be done whe
0900: 6e 20 75 73 69 6e 67 20 74 68 65 20 54 45 4d 50  n using the TEMP
0910: 5f 53 54 4f 52 45 0a 2a 2a 20 6f 72 20 44 45 46  _STORE.** or DEF
0920: 41 55 4c 54 5f 54 45 4d 50 5f 53 54 4f 52 45 20  AULT_TEMP_STORE 
0930: 70 72 61 67 6d 61 73 2e 0a 2a 2f 0a 73 74 61 74  pragmas..*/.stat
0940: 69 63 20 69 6e 74 20 63 68 61 6e 67 65 54 65 6d  ic int changeTem
0950: 70 53 74 6f 72 61 67 65 28 50 61 72 73 65 20 2a  pStorage(Parse *
0960: 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
0970: 61 72 20 2a 7a 53 74 6f 72 61 67 65 54 79 70 65  ar *zStorageType
0980: 29 7b 0a 20 20 69 6e 74 20 74 73 20 3d 20 67 65  ){.  int ts = ge
0990: 74 54 65 6d 70 53 74 6f 72 65 28 7a 53 74 6f 72  tTempStore(zStor
09a0: 61 67 65 54 79 70 65 29 3b 0a 20 20 73 71 6c 69  ageType);.  sqli
09b0: 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65  te3 *db = pParse
09c0: 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64 62 2d 3e  ->db;.  if( db->
09d0: 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 74 73 20 29  temp_store==ts )
09e0: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
09f0: 4b 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62  K;.  if( db->aDb
0a00: 5b 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20  [1].pBt!=0 ){.  
0a10: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
0a20: 26 20 53 51 4c 49 54 45 5f 49 6e 54 72 61 6e 73  & SQLITE_InTrans
0a30: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
0a40: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
0a50: 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f  , "temporary sto
0a60: 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  rage cannot be c
0a70: 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20  hanged ".       
0a80: 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20   "from within a 
0a90: 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20  transaction");. 
0aa0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
0ab0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
0ac0: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
0ad0: 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d  Close(db->aDb[1]
0ae0: 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61  .pBt);.    db->a
0af0: 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20  Db[1].pBt = 0;. 
0b00: 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
0b10: 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
0b20: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  , 0);.  }.  db->
0b30: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 74 73 3b  temp_store = ts;
0b40: 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45  .  return SQLITE
0b50: 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 47 65  _OK;.}../*.** Ge
0b60: 6e 65 72 61 74 65 20 63 6f 64 65 20 74 6f 20 72  nerate code to r
0b70: 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 69  eturn a single i
0b80: 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f  nteger value..*/
0b90: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 74  .static void ret
0ba0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 50 61 72  urnSingleInt(Par
0bb0: 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
0bc0: 74 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20  t char *zLabel, 
0bd0: 69 6e 74 20 76 61 6c 75 65 29 7b 0a 20 20 56 64  int value){.  Vd
0be0: 62 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47  be *v = sqlite3G
0bf0: 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a  etVdbe(pParse);.
0c00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
0c10: 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  Op(v, OP_Integer
0c20: 2c 20 76 61 6c 75 65 2c 20 30 29 3b 0a 20 20 69  , value, 0);.  i
0c30: 66 28 20 70 50 61 72 73 65 2d 3e 65 78 70 6c 61  f( pParse->expla
0c40: 69 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  in==0 ){.    sql
0c50: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
0c60: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71  ls(v, 1);.    sq
0c70: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
0c80: 61 6d 65 28 76 2c 20 30 2c 20 7a 4c 61 62 65 6c  ame(v, 0, zLabel
0c90: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
0ca0: 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41  }.  sqlite3VdbeA
0cb0: 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62  ddOp(v, OP_Callb
0cc0: 61 63 6b 2c 20 31 2c 20 30 29 3b 0a 7d 0a 0a 2f  ack, 1, 0);.}../
0cd0: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65  *.** Check to se
0ce0: 65 20 69 66 20 7a 52 69 67 68 74 20 61 6e 64 20  e if zRight and 
0cf0: 7a 4c 65 66 74 20 72 65 66 65 72 20 74 6f 20 61  zLeft refer to a
0d00: 20 70 72 61 67 6d 61 20 74 68 61 74 20 71 75 65   pragma that que
0d10: 72 69 65 73 0a 2a 2a 20 6f 72 20 63 68 61 6e 67  ries.** or chang
0d20: 65 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6c  es one of the fl
0d30: 61 67 73 20 69 6e 20 64 62 2d 3e 66 6c 61 67 73  ags in db->flags
0d40: 2e 20 20 52 65 74 75 72 6e 20 31 20 69 66 20 73  .  Return 1 if s
0d50: 6f 20 61 6e 64 20 30 20 69 66 20 6e 6f 74 2e 0a  o and 0 if not..
0d60: 2a 2a 20 41 6c 73 6f 2c 20 69 6d 70 6c 65 6d 65  ** Also, impleme
0d70: 6e 74 20 74 68 65 20 70 72 61 67 6d 61 2e 0a 2a  nt the pragma..*
0d80: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 66 6c 61  /.static int fla
0d90: 67 50 72 61 67 6d 61 28 50 61 72 73 65 20 2a 70  gPragma(Parse *p
0da0: 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
0db0: 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20  r *zLeft, const 
0dc0: 63 68 61 72 20 2a 7a 52 69 67 68 74 29 7b 0a 20  char *zRight){. 
0dd0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74   static const st
0de0: 72 75 63 74 20 73 50 72 61 67 6d 61 54 79 70 65  ruct sPragmaType
0df0: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
0e00: 72 20 2a 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61  r *zName;  /* Na
0e10: 6d 65 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61  me of the pragma
0e20: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6d 61 73 6b   */.    int mask
0e30: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
0e40: 61 73 6b 20 66 6f 72 20 74 68 65 20 64 62 2d 3e  ask for the db->
0e50: 66 6c 61 67 73 20 76 61 6c 75 65 20 2a 2f 0a 20  flags value */. 
0e60: 20 7d 20 61 50 72 61 67 6d 61 5b 5d 20 3d 20 7b   } aPragma[] = {
0e70: 0a 20 20 20 20 7b 20 22 76 64 62 65 5f 74 72 61  .    { "vdbe_tra
0e80: 63 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ce",            
0e90: 20 20 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72     SQLITE_VdbeTr
0ea0: 61 63 65 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b  ace     },.    {
0eb0: 20 22 73 71 6c 5f 74 72 61 63 65 22 2c 20 20 20   "sql_trace",   
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
0ed0: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20  ITE_SqlTrace    
0ee0: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 76 64 62 65    },.    { "vdbe
0ef0: 5f 6c 69 73 74 69 6e 67 22 2c 20 20 20 20 20 20  _listing",      
0f00: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 56 64         SQLITE_Vd
0f10: 62 65 4c 69 73 74 69 6e 67 20 20 20 7d 2c 0a 20  beListing   },. 
0f20: 20 20 20 7b 20 22 66 75 6c 6c 5f 63 6f 6c 75 6d     { "full_colum
0f30: 6e 5f 6e 61 6d 65 73 22 2c 20 20 20 20 20 20 20  n_names",       
0f40: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
0f50: 61 6d 65 73 20 20 7d 2c 0a 20 20 20 20 7b 20 22  ames  },.    { "
0f60: 73 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  short_column_nam
0f70: 65 73 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54  es",       SQLIT
0f80: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
0f90: 7d 2c 0a 20 20 20 20 7b 20 22 63 6f 75 6e 74 5f  },.    { "count_
0fa0: 63 68 61 6e 67 65 73 22 2c 20 20 20 20 20 20 20  changes",       
0fb0: 20 20 20 20 20 53 51 4c 49 54 45 5f 43 6f 75 6e       SQLITE_Coun
0fc0: 74 52 6f 77 73 20 20 20 20 20 7d 2c 0a 20 20 20  tRows     },.   
0fd0: 20 7b 20 22 65 6d 70 74 79 5f 72 65 73 75 6c 74   { "empty_result
0fe0: 5f 63 61 6c 6c 62 61 63 6b 73 22 2c 20 20 20 53  _callbacks",   S
0ff0: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
1000: 63 6b 20 20 7d 2c 0a 20 20 20 20 2f 2a 20 54 68  ck  },.    /* Th
1010: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 56  e following is V
1020: 45 52 59 20 65 78 70 65 72 69 6d 65 6e 74 61 6c  ERY experimental
1030: 20 2a 2f 0a 20 20 20 20 7b 20 22 77 72 69 74 61   */.    { "writa
1040: 62 6c 65 5f 73 63 68 65 6d 61 22 2c 20 20 20 20  ble_schema",    
1050: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 57 72 69        SQLITE_Wri
1060: 74 65 53 63 68 65 6d 61 20 20 20 7d 2c 0a 20 20  teSchema   },.  
1070: 7d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 63 6f  };.  int i;.  co
1080: 6e 73 74 20 73 74 72 75 63 74 20 73 50 72 61 67  nst struct sPrag
1090: 6d 61 54 79 70 65 20 2a 70 3b 0a 20 20 66 6f 72  maType *p;.  for
10a0: 28 69 3d 30 2c 20 70 3d 61 50 72 61 67 6d 61 3b  (i=0, p=aPragma;
10b0: 20 69 3c 73 69 7a 65 6f 66 28 61 50 72 61 67 6d   i<sizeof(aPragm
10c0: 61 29 2f 73 69 7a 65 6f 66 28 61 50 72 61 67 6d  a)/sizeof(aPragm
10d0: 61 5b 30 5d 29 3b 20 69 2b 2b 2c 20 70 2b 2b 29  a[0]); i++, p++)
10e0: 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
10f0: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
1100: 70 2d 3e 7a 4e 61 6d 65 29 3d 3d 30 20 29 7b 0a  p->zName)==0 ){.
1110: 20 20 20 20 20 20 73 71 6c 69 74 65 33 20 2a 64        sqlite3 *d
1120: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a  b = pParse->db;.
1130: 20 20 20 20 20 20 56 64 62 65 20 2a 76 3b 0a 20        Vdbe *v;. 
1140: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d       if( zRight=
1150: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  =0 ){.        v 
1160: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
1170: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
1180: 20 20 69 66 28 20 76 20 29 7b 0a 20 20 20 20 20    if( v ){.     
1190: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
11a0: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 70 2d 3e  eInt(pParse, p->
11b0: 7a 4e 61 6d 65 2c 20 28 64 62 2d 3e 66 6c 61 67  zName, (db->flag
11c0: 73 20 26 20 70 2d 3e 6d 61 73 6b 29 21 3d 30 20  s & p->mask)!=0 
11d0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
11e0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 67 65 74     }else if( get
11f0: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 29 20  Boolean(zRight) 
1200: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66  ){.        db->f
1210: 6c 61 67 73 20 7c 3d 20 70 2d 3e 6d 61 73 6b 3b  lags |= p->mask;
1220: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
1230: 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
1240: 26 3d 20 7e 70 2d 3e 6d 61 73 6b 3b 0a 20 20 20  &= ~p->mask;.   
1250: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
1260: 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  n 1;.    }.  }. 
1270: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
1280: 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61 20 70 72  .** Process a pr
1290: 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20  agma statement. 
12a0: 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20   .**.** Pragmas 
12b0: 61 72 65 20 6f 66 20 74 68 69 73 20 66 6f 72 6d  are of this form
12c0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41  :.**.**      PRA
12d0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69  GMA [database.]i
12e0: 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a  d [= value].**.*
12f0: 2a 20 54 68 65 20 69 64 65 6e 74 69 66 69 65 72  * The identifier
1300: 20 6d 69 67 68 74 20 61 6c 73 6f 20 62 65 20 61   might also be a
1310: 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 76 61   string.  The va
1320: 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c  lue is a string,
1330: 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69   and.** identifi
1340: 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e  er, or a number.
1350: 20 20 49 66 20 6d 69 6e 75 73 46 6c 61 67 20 69    If minusFlag i
1360: 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65  s true, then the
1370: 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e   value is.** a n
1380: 75 6d 62 65 72 20 74 68 61 74 20 77 61 73 20 70  umber that was p
1390: 72 65 63 65 64 65 64 20 62 79 20 61 20 6d 69 6e  receded by a min
13a0: 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49  us sign..**.** I
13b0: 66 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20  f the left side 
13c0: 69 73 20 22 64 61 74 61 62 61 73 65 2e 69 64 22  is "database.id"
13d0: 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74 68   then pId1 is th
13e0: 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 0a  e database name.
13f0: 2a 2a 20 61 6e 64 20 70 49 64 32 20 69 73 20 74  ** and pId2 is t
1400: 68 65 20 69 64 2e 20 20 49 66 20 74 68 65 20 6c  he id.  If the l
1410: 65 66 74 20 73 69 64 65 20 69 73 20 6a 75 73 74  eft side is just
1420: 20 22 69 64 22 20 74 68 65 6e 20 70 49 64 31 20   "id" then pId1 
1430: 69 73 20 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64  is the.** id and
1440: 20 70 49 64 32 20 69 73 20 61 6e 79 20 65 6d 70   pId2 is any emp
1450: 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f  ty string..*/.vo
1460: 69 64 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61  id sqlite3Pragma
1470: 28 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  (.  Parse *pPars
1480: 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64  e, .  Token *pId
1490: 31 2c 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72  1,        /* Fir
14a0: 73 74 20 70 61 72 74 20 6f 66 20 5b 64 61 74 61  st part of [data
14b0: 62 61 73 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a  base.]id field *
14c0: 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c  /.  Token *pId2,
14d0: 20 20 20 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e          /* Secon
14e0: 64 20 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62  d part of [datab
14f0: 61 73 65 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f  ase.]id field, o
1500: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65  r NULL */.  Toke
1510: 6e 20 2a 70 56 61 6c 75 65 2c 20 20 20 20 20 20  n *pValue,      
1520: 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61  /* Token for <va
1530: 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  lue>, or NULL */
1540: 0a 20 20 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67  .  int minusFlag
1550: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
1560: 66 20 61 20 27 2d 27 20 73 69 67 6e 20 70 72 65  f a '-' sign pre
1570: 63 65 64 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f  ceded <value> */
1580: 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66  .){.  char *zLef
1590: 74 20 3d 20 30 3b 20 20 20 20 20 20 20 2f 2a 20  t = 0;       /* 
15a0: 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55  Nul-terminated U
15b0: 54 46 2d 38 20 73 74 72 69 6e 67 20 3c 69 64 3e  TF-8 string <id>
15c0: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 52 69 67   */.  char *zRig
15d0: 68 74 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20  ht = 0;      /* 
15e0: 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64 20 55  Nul-terminated U
15f0: 54 46 2d 38 20 73 74 72 69 6e 67 20 3c 76 61 6c  TF-8 string <val
1600: 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  ue>, or NULL */.
1610: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
1620: 62 20 3d 20 30 3b 20 20 20 2f 2a 20 54 68 65 20  b = 0;   /* The 
1630: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f  database name */
1640: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20  .  Token *pId;  
1650: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69            /* Poi
1660: 6e 74 65 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b  nter to <id> tok
1670: 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  en */.  int iDb;
1680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1690: 2a 20 44 61 74 61 62 61 73 65 20 69 6e 64 65 78  * Database index
16a0: 20 66 6f 72 20 3c 64 61 74 61 62 61 73 65 3e 20   for <database> 
16b0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
16c0: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
16d0: 20 44 62 20 2a 70 44 62 3b 0a 20 20 56 64 62 65   Db *pDb;.  Vdbe
16e0: 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74   *v = sqlite3Get
16f0: 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20  Vdbe(pParse);.  
1700: 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74 75 72  if( v==0 ) retur
1710: 6e 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72  n;..  /* Interpr
1720: 65 74 20 74 68 65 20 5b 64 61 74 61 62 61 73 65  et the [database
1730: 2e 5d 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  .] part of the p
1740: 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e  ragma statement.
1750: 20 69 44 62 20 69 73 20 74 68 65 0a 20 20 2a 2a   iDb is the.  **
1760: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
1770: 74 61 62 61 73 65 20 74 68 69 73 20 70 72 61 67  tabase this prag
1780: 6d 61 20 69 73 20 62 65 69 6e 67 20 61 70 70 6c  ma is being appl
1790: 69 65 64 20 74 6f 20 69 6e 20 64 62 2e 61 44 62  ied to in db.aDb
17a0: 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73  []. */.  iDb = s
17b0: 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61 6d  qlite3TwoPartNam
17c0: 65 28 70 50 61 72 73 65 2c 20 70 49 64 31 2c 20  e(pParse, pId1, 
17d0: 70 49 64 32 2c 20 26 70 49 64 29 3b 0a 20 20 69  pId2, &pId);.  i
17e0: 66 28 20 69 44 62 3c 30 20 29 20 72 65 74 75 72  f( iDb<0 ) retur
17f0: 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  n;.  pDb = &db->
1800: 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20 7a 4c 65  aDb[iDb];..  zLe
1810: 66 74 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65  ft = sqlite3Name
1820: 46 72 6f 6d 54 6f 6b 65 6e 28 70 49 64 29 3b 0a  FromToken(pId);.
1830: 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29 20 72    if( !zLeft ) r
1840: 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d 69 6e  eturn;.  if( min
1850: 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20 7a 52  usFlag ){.    zR
1860: 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4d 50  ight = sqlite3MP
1870: 72 69 6e 74 66 28 22 2d 25 54 22 2c 20 70 56 61  rintf("-%T", pVa
1880: 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  lue);.  }else{. 
1890: 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69     zRight = sqli
18a0: 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e  te3NameFromToken
18b0: 28 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20  (pValue);.  }.. 
18c0: 20 7a 44 62 20 3d 20 28 28 69 44 62 3e 30 29 3f   zDb = ((iDb>0)?
18d0: 70 44 62 2d 3e 7a 4e 61 6d 65 3a 30 29 3b 0a 20  pDb->zName:0);. 
18e0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 75 74 68   if( sqlite3Auth
18f0: 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51  Check(pParse, SQ
1900: 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65  LITE_PRAGMA, zLe
1910: 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  ft, zRight, zDb)
1920: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61   ){.    goto pra
1930: 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 20 0a 20  gma_out;.  }. . 
1940: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
1950: 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65 66 61   [database.]defa
1960: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20  ult_cache_size. 
1970: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
1980: 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63  abase.]default_c
1990: 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a  ache_size=N.  **
19a0: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
19b0: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
19c0: 20 63 75 72 72 65 6e 74 20 70 65 72 73 69 73 74   current persist
19d0: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
19e0: 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  the.  ** page ca
19f0: 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20 76  che size.  The v
1a00: 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69 73  alue returned is
1a10: 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
1a20: 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65  ber of.  ** page
1a30: 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 63 61  s in the page ca
1a40: 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  che.  The second
1a50: 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74 68 20   form sets both 
1a60: 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 2a 2a  the current.  **
1a70: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
1a80: 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 70   value and the p
1a90: 65 72 73 69 73 74 65 6e 74 20 70 61 67 65 20 63  ersistent page c
1aa0: 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 0a  ache size value.
1ab0: 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74    ** stored in t
1ac0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1ad0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
1ae0: 64 65 66 61 75 6c 74 20 63 61 63 68 65 20 73 69  default cache si
1af0: 7a 65 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ze is stored in 
1b00: 6d 65 74 61 2d 76 61 6c 75 65 20 32 20 6f 66 20  meta-value 2 of 
1b10: 70 61 67 65 20 31 20 6f 66 20 74 68 65 0a 20 20  page 1 of the.  
1b20: 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
1b30: 2e 20 20 54 68 65 20 63 61 63 68 65 20 73 69 7a  .  The cache siz
1b40: 65 20 69 73 20 61 63 74 75 61 6c 6c 79 20 74 68  e is actually th
1b50: 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65  e absolute value
1b60: 20 6f 66 0a 20 20 2a 2a 20 74 68 69 73 20 6d 65   of.  ** this me
1b70: 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 20 20  mory location.  
1b80: 54 68 65 20 73 69 67 6e 20 6f 66 20 6d 65 74 61  The sign of meta
1b90: 2d 76 61 6c 75 65 20 32 20 64 65 74 65 72 6d 69  -value 2 determi
1ba0: 6e 65 73 20 74 68 65 0a 20 20 2a 2a 20 73 79 6e  nes the.  ** syn
1bb0: 63 68 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67  chronous setting
1bc0: 2e 20 20 41 20 6e 65 67 61 74 69 76 65 20 76 61  .  A negative va
1bd0: 6c 75 65 20 6d 65 61 6e 73 20 73 79 6e 63 68 72  lue means synchr
1be0: 6f 6e 6f 75 73 20 69 73 20 6f 66 66 0a 20 20 2a  onous is off.  *
1bf0: 2a 20 61 6e 64 20 61 20 70 6f 73 69 74 69 76 65  * and a positive
1c00: 20 76 61 6c 75 65 20 6d 65 61 6e 73 20 73 79 6e   value means syn
1c10: 63 68 72 6f 6e 6f 75 73 20 69 73 20 6f 6e 2e 0a  chronous is on..
1c20: 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
1c30: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
1c40: 22 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  "default_cache_s
1c50: 69 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ize")==0 ){.    
1c60: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
1c70: 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68 65  eOpList getCache
1c80: 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Size[] = {.     
1c90: 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65   { OP_ReadCookie
1ca0: 2c 20 20 30 2c 20 32 2c 20 20 20 20 20 20 20 20  ,  0, 2,        
1cb0: 30 7d 2c 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  0},  /* 0 */.   
1cc0: 20 20 20 7b 20 4f 50 5f 41 62 73 56 61 6c 75 65     { OP_AbsValue
1cd0: 2c 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20  ,    0, 0,      
1ce0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
1cf0: 5f 44 75 70 2c 20 20 20 20 20 20 20 20 20 30 2c  _Dup,         0,
1d00: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   0,        0},. 
1d10: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
1d20: 72 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20  r,     0, 0,    
1d30: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
1d40: 4f 50 5f 4e 65 2c 20 20 20 20 20 20 20 20 20 20  OP_Ne,          
1d50: 30 2c 20 36 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 6,        0},
1d60: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65  .      { OP_Inte
1d70: 67 65 72 2c 20 20 20 20 20 30 2c 20 30 2c 20 20  ger,     0, 0,  
1d80: 20 20 20 20 20 20 30 7d 2c 20 20 2f 2a 20 35 20        0},  /* 5 
1d90: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 61  */.      { OP_Ca
1da0: 6c 6c 62 61 63 6b 2c 20 20 20 20 31 2c 20 30 2c  llback,    1, 0,
1db0: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
1dc0: 7d 3b 0a 20 20 20 20 69 6e 74 20 61 64 64 72 3b  };.    int addr;
1dd0: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
1de0: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
1df0: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
1e00: 5f 6f 75 74 3b 0a 20 20 20 20 69 66 28 20 21 7a  _out;.    if( !z
1e10: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
1e20: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
1e30: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
1e40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
1e50: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 22 63  ColName(v, 0, "c
1e60: 61 63 68 65 5f 73 69 7a 65 22 2c 20 50 33 5f 53  ache_size", P3_S
1e70: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 61 64  TATIC);.      ad
1e80: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
1e90: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
1ea0: 61 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53  aySize(getCacheS
1eb0: 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53 69  ize), getCacheSi
1ec0: 7a 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ze);.      sqlit
1ed0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
1ee0: 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
1ef0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
1f00: 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
1f10: 35 2c 20 4d 41 58 5f 50 41 47 45 53 29 3b 0a 20  5, MAX_PAGES);. 
1f20: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1f30: 69 6e 74 20 73 69 7a 65 20 3d 20 61 74 6f 69 28  int size = atoi(
1f40: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 69  zRight);.      i
1f50: 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69 7a 65  f( size<0 ) size
1f60: 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20 20 20   = -size;.      
1f70: 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
1f80: 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73  eOperation(pPars
1f90: 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20  e, 0, iDb);.    
1fa0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
1fb0: 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  Op(v, OP_Integer
1fc0: 2c 20 73 69 7a 65 2c 20 30 29 3b 0a 20 20 20 20  , size, 0);.    
1fd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
1fe0: 4f 70 28 76 2c 20 4f 50 5f 52 65 61 64 43 6f 6f  Op(v, OP_ReadCoo
1ff0: 6b 69 65 2c 20 69 44 62 2c 20 32 29 3b 0a 20 20  kie, iDb, 2);.  
2000: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
2010: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
2020: 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 30 29  P_Integer, 0, 0)
2030: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
2040: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 47  dbeAddOp(v, OP_G
2050: 65 2c 20 30 2c 20 61 64 64 72 2b 33 29 3b 0a 20  e, 0, addr+3);. 
2060: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2070: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4e 65 67 61  AddOp(v, OP_Nega
2080: 74 69 76 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20  tive, 0, 0);.   
2090: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
20a0: 64 4f 70 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  dOp(v, OP_SetCoo
20b0: 6b 69 65 2c 20 69 44 62 2c 20 32 29 3b 0a 20 20  kie, iDb, 2);.  
20c0: 20 20 20 20 70 44 62 2d 3e 63 61 63 68 65 5f 73      pDb->cache_s
20d0: 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20  ize = size;.    
20e0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
20f0: 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e  tCacheSize(pDb->
2100: 70 42 74 2c 20 70 44 62 2d 3e 63 61 63 68 65 5f  pBt, pDb->cache_
2110: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  size);.    }.  }
2120: 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  else..  /*.  ** 
2130: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
2140: 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20 20 2a  e.]page_size.  *
2150: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
2160: 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 3d 4e  ase.]page_size=N
2170: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
2180: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
2190: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  s the current se
21a0: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
21b0: 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65  ** database page
21c0: 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e 20   size in bytes. 
21d0: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
21e0: 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a 20 64   sets the.  ** d
21f0: 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a  atabase page siz
2200: 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20 76 61  e value.  The va
2210: 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  lue can only be 
2220: 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68 65 20  set if.  ** the 
2230: 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
2240: 20 79 65 74 20 62 65 65 6e 20 63 72 65 61 74 65   yet been create
2250: 64 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  d..  */.  if( sq
2260: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
2270: 66 74 2c 22 70 61 67 65 5f 73 69 7a 65 22 29 3d  ft,"page_size")=
2280: 3d 30 20 29 7b 0a 20 20 20 20 42 74 72 65 65 20  =0 ){.    Btree 
2290: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
22a0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
22b0: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69   ){.      int si
22c0: 7a 65 20 3d 20 70 42 74 20 3f 20 73 71 6c 69 74  ze = pBt ? sqlit
22d0: 65 33 42 74 72 65 65 47 65 74 50 61 67 65 53 69  e3BtreeGetPageSi
22e0: 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20  ze(pBt) : 0;.   
22f0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
2300: 6e 74 28 70 50 61 72 73 65 2c 20 22 70 61 67 65  nt(pParse, "page
2310: 5f 73 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20  _size", size);. 
2320: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2330: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 50  sqlite3BtreeSetP
2340: 61 67 65 53 69 7a 65 28 70 42 74 2c 20 61 74 6f  ageSize(pBt, ato
2350: 69 28 7a 52 69 67 68 74 29 2c 20 73 71 6c 69 74  i(zRight), sqlit
2360: 65 33 42 74 72 65 65 47 65 74 52 65 73 65 72 76  e3BtreeGetReserv
2370: 65 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 0a 20  e(pBt));.    }. 
2380: 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a   }else..  /*.  *
2390: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
23a0: 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 0a  ase.]cache_size.
23b0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
23c0: 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69  tabase.]cache_si
23d0: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
23e0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
23f0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
2400: 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20  t local setting 
2410: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67  for the.  ** pag
2420: 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 20 54  e cache size.  T
2430: 68 65 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67  he local setting
2440: 20 63 61 6e 20 62 65 20 64 69 66 66 65 72 65 6e   can be differen
2450: 74 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  t from.  ** the 
2460: 70 65 72 73 69 73 74 65 6e 74 20 63 61 63 68 65  persistent cache
2470: 20 73 69 7a 65 20 76 61 6c 75 65 20 74 68 61 74   size value that
2480: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   is stored in th
2490: 65 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  e database.  ** 
24a0: 66 69 6c 65 20 69 74 73 65 6c 66 2e 20 20 54 68  file itself.  Th
24b0: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
24c0: 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   is the maximum 
24d0: 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70  number of.  ** p
24e0: 61 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65  ages in the page
24f0: 20 63 61 63 68 65 2e 20 20 54 68 65 20 73 65 63   cache.  The sec
2500: 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 74 68  ond form sets th
2510: 65 20 6c 6f 63 61 6c 0a 20 20 2a 2a 20 70 61 67  e local.  ** pag
2520: 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c  e cache size val
2530: 75 65 2e 20 20 49 74 20 64 6f 65 73 20 6e 6f 74  ue.  It does not
2540: 20 63 68 61 6e 67 65 20 74 68 65 20 70 65 72 73   change the pers
2550: 69 73 74 65 6e 74 0a 20 20 2a 2a 20 63 61 63 68  istent.  ** cach
2560: 65 20 73 69 7a 65 20 73 74 6f 72 65 64 20 6f 6e  e size stored on
2570: 20 74 68 65 20 64 69 73 6b 20 73 6f 20 74 68 65   the disk so the
2580: 20 63 61 63 68 65 20 73 69 7a 65 20 77 69 6c 6c   cache size will
2590: 20 72 65 76 65 72 74 0a 20 20 2a 2a 20 74 6f 20   revert.  ** to 
25a0: 69 74 73 20 64 65 66 61 75 6c 74 20 76 61 6c 75  its default valu
25b0: 65 20 77 68 65 6e 20 74 68 65 20 64 61 74 61 62  e when the datab
25c0: 61 73 65 20 69 73 20 63 6c 6f 73 65 64 20 61 6e  ase is closed an
25d0: 64 20 72 65 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a  d reopened..  **
25e0: 20 4e 20 73 68 6f 75 6c 64 20 62 65 20 61 20 70   N should be a p
25f0: 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e  ositive integer.
2600: 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69  .  */.  if( sqli
2610: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
2620: 2c 22 63 61 63 68 65 5f 73 69 7a 65 22 29 3d 3d  ,"cache_size")==
2630: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c  0 ){.    if( sql
2640: 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70  ite3ReadSchema(p
2650: 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72  Parse) ) goto pr
2660: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 69 66  agma_out;.    if
2670: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
2680: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
2690: 6e 74 28 70 50 61 72 73 65 2c 20 22 63 61 63 68  nt(pParse, "cach
26a0: 65 5f 73 69 7a 65 22 2c 20 70 44 62 2d 3e 63 61  e_size", pDb->ca
26b0: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
26c0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
26d0: 73 69 7a 65 20 3d 20 61 74 6f 69 28 7a 52 69 67  size = atoi(zRig
26e0: 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73  ht);.      if( s
26f0: 69 7a 65 3c 30 20 29 20 73 69 7a 65 20 3d 20 2d  ize<0 ) size = -
2700: 73 69 7a 65 3b 0a 20 20 20 20 20 20 70 44 62 2d  size;.      pDb-
2710: 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69  >cache_size = si
2720: 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ze;.      sqlite
2730: 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69  3BtreeSetCacheSi
2740: 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62  ze(pDb->pBt, pDb
2750: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
2760: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
2770: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
2780: 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 2a 2a   temp_store.  **
2790: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
27a0: 74 6f 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22  tore = "default"
27b0: 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22  |"memory"|"file"
27c0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
27d0: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63  n or set the loc
27e0: 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
27f0: 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c 61 67 2e  temp_store flag.
2800: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
2810: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
2820: 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68  does not make ch
2830: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73  anges to the dis
2840: 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65 20 64  k file and the d
2850: 65 66 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75  efault.  ** valu
2860: 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72  e will be restor
2870: 65 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65  ed the next time
2880: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
2890: 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20   opened..  **.  
28a0: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20  ** Note that it 
28b0: 69 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20  is possible for 
28c0: 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70  the library comp
28d0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
28e0: 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64   to.  ** overrid
28f0: 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 0a 20  e this setting. 
2900: 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
2910: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
2920: 22 74 65 6d 70 5f 73 74 6f 72 65 22 29 3d 3d 30  "temp_store")==0
2930: 20 29 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   ){.    if( !zRi
2940: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
2950: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
2960: 72 73 65 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65  rse, "temp_store
2970: 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  ", db->temp_stor
2980: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
2990: 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70 53       changeTempS
29a0: 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20 7a  torage(pParse, z
29b0: 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20  Right);.    }.  
29c0: 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  }else..  /*.  **
29d0: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
29e0: 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ase.]synchronous
29f0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
2a00: 64 61 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72  database.]synchr
2a10: 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52  onous=OFF|ON|NOR
2a20: 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20  MAL|FULL.  **.  
2a30: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
2a40: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
2a50: 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e   of the synchron
2a60: 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ous flag.  Chang
2a70: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
2a80: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
2a90: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
2aa0: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
2ab0: 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  and the.  ** def
2ac0: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will 
2ad0: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
2ae0: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
2af0: 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f  tabase is.  ** o
2b00: 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 69 66  pened..  */.  if
2b10: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
2b20: 28 7a 4c 65 66 74 2c 22 73 79 6e 63 68 72 6f 6e  (zLeft,"synchron
2b30: 6f 75 73 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ous")==0 ){.    
2b40: 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53  if( sqlite3ReadS
2b50: 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20  chema(pParse) ) 
2b60: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
2b70: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
2b80: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
2b90: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
2ba0: 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c  , "synchronous",
2bb0: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
2bc0: 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65  el-1);.    }else
2bd0: 7b 0a 20 20 20 20 20 20 69 66 28 20 21 64 62 2d  {.      if( !db-
2be0: 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
2bf0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
2c00: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 0a  rorMsg(pParse, .
2c10: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 61 66              "Saf
2c20: 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f  ety level may no
2c30: 74 20 62 65 20 63 68 61 6e 67 65 64 20 69 6e 73  t be changed ins
2c40: 69 64 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f  ide a transactio
2c50: 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  n");.      }else
2c60: 7b 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e 73  {.        pDb->s
2c70: 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 67 65  afety_level = ge
2c80: 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69  tSafetyLevel(zRi
2c90: 67 68 74 29 2b 31 3b 0a 20 20 20 20 20 20 20 20  ght)+1;.        
2ca0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 53  sqlite3BtreeSetS
2cb0: 61 66 65 74 79 4c 65 76 65 6c 28 70 44 62 2d 3e  afetyLevel(pDb->
2cc0: 70 42 74 2c 20 70 44 62 2d 3e 73 61 66 65 74 79  pBt, pDb->safety
2cd0: 5f 6c 65 76 65 6c 29 3b 0a 20 20 20 20 20 20 7d  _level);.      }
2ce0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
2cf0: 23 69 66 20 30 20 20 2f 2a 20 55 73 65 64 20 6f  #if 0  /* Used o
2d00: 6e 63 65 20 64 75 72 69 6e 67 20 64 65 76 65 6c  nce during devel
2d10: 6f 70 6d 65 6e 74 2e 20 20 4e 6f 20 6c 6f 6e 67  opment.  No long
2d20: 65 72 20 6e 65 65 64 65 64 20 2a 2f 0a 20 20 69  er needed */.  i
2d30: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
2d40: 70 28 7a 4c 65 66 74 2c 20 22 74 72 69 67 67 65  p(zLeft, "trigge
2d50: 72 5f 6f 76 65 72 68 65 61 64 5f 74 65 73 74 22  r_overhead_test"
2d60: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
2d70: 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  getBoolean(zRigh
2d80: 74 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  t) ){.      sqli
2d90: 74 65 33 5f 61 6c 77 61 79 73 5f 63 6f 64 65 5f  te3_always_code_
2da0: 74 72 69 67 67 65 72 5f 73 65 74 75 70 20 3d 20  trigger_setup = 
2db0: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
2dc0: 20 20 20 20 73 71 6c 69 74 65 33 5f 61 6c 77 61      sqlite3_alwa
2dd0: 79 73 5f 63 6f 64 65 5f 74 72 69 67 67 65 72 5f  ys_code_trigger_
2de0: 73 65 74 75 70 20 3d 20 30 3b 0a 20 20 20 20 7d  setup = 0;.    }
2df0: 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
2e00: 0a 20 20 69 66 28 20 66 6c 61 67 50 72 61 67 6d  .  if( flagPragm
2e10: 61 28 70 50 61 72 73 65 2c 20 7a 4c 65 66 74 2c  a(pParse, zLeft,
2e20: 20 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20 20   zRight) ){.    
2e30: 2f 2a 20 54 68 65 20 66 6c 61 67 50 72 61 67 6d  /* The flagPragm
2e40: 61 28 29 20 73 75 62 72 6f 75 74 69 6e 65 20 61  a() subroutine a
2e50: 6c 73 6f 20 67 65 6e 65 72 61 74 65 73 20 61 6e  lso generates an
2e60: 79 20 6e 65 63 65 73 73 61 72 79 20 63 6f 64 65  y necessary code
2e70: 0a 20 20 20 20 2a 2a 20 74 68 65 72 65 20 69 73  .    ** there is
2e80: 20 6e 6f 74 68 69 6e 67 20 6d 6f 72 65 20 74 6f   nothing more to
2e90: 20 64 6f 20 68 65 72 65 20 2a 2f 0a 20 20 7d 65   do here */.  }e
2ea0: 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  lse..  /*.  **  
2eb0: 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e   PRAGMA table_in
2ec0: 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a 2a  fo(<table>).  **
2ed0: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61 20 73  .  ** Return a s
2ee0: 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20 65 61  ingle row for ea
2ef0: 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65  ch column of the
2f00: 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 54 68   named table. Th
2f10: 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a  e columns of.  *
2f20: 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 64  * the returned d
2f30: 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20 20 2a  ata set are:.  *
2f40: 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20 20 20  *.  ** cid:     
2f50: 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e 75     Column id (nu
2f60: 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74  mbered from left
2f70: 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61 72 74   to right, start
2f80: 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a 20 6e  ing at 0).  ** n
2f90: 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d  ame:       Colum
2fa0: 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70 65  n name.  ** type
2fb0: 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 64  :       Column d
2fc0: 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 2e  eclaration type.
2fd0: 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20  .  ** notnull:  
2fe0: 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54 20 4e    True if 'NOT N
2ff0: 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f 66 20  ULL' is part of 
3000: 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  column declarati
3010: 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61 6c  on.  ** dflt_val
3020: 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c 74 20  ue: The default 
3030: 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f  value for the co
3040: 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20 20  lumn, if any..  
3050: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
3060: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
3070: 74 61 62 6c 65 5f 69 6e 66 6f 22 29 3d 3d 30 20  table_info")==0 
3080: 26 26 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  && zRight ){.   
3090: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
30a0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61    if( sqlite3Rea
30b0: 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20  dSchema(pParse) 
30c0: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
30d0: 74 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71  t;.    pTab = sq
30e0: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
30f0: 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b  b, zRight, zDb);
3100: 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b  .    if( pTab ){
3110: 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  .      int i;.  
3120: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
3130: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29 3b  etNumCols(v, 6);
3140: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
3150: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
3160: 30 2c 20 22 63 69 64 22 2c 20 50 33 5f 53 54 41  0, "cid", P3_STA
3170: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
3180: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
3190: 65 28 76 2c 20 31 2c 20 22 6e 61 6d 65 22 2c 20  e(v, 1, "name", 
31a0: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
31b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
31c0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 22 74  ColName(v, 2, "t
31d0: 79 70 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29  ype", P3_STATIC)
31e0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
31f0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
3200: 20 33 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 50   3, "notnull", P
3210: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
3220: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
3230: 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 22 64 66  olName(v, 4, "df
3240: 6c 74 5f 76 61 6c 75 65 22 2c 20 50 33 5f 53 54  lt_value", P3_ST
3250: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
3260: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
3270: 6d 65 28 76 2c 20 35 2c 20 22 70 6b 22 2c 20 50  me(v, 5, "pk", P
3280: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
3290: 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
32a0: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73  olumnNames(pPars
32b0: 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20  e, pTab);.      
32c0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 54 61 62 2d  for(i=0; i<pTab-
32d0: 3e 6e 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  >nCol; i++){.   
32e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
32f0: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65  AddOp(v, OP_Inte
3300: 67 65 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20 20  ger, i, 0);.    
3310: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f      sqlite3VdbeO
3320: 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p3(v, OP_String8
3330: 2c 20 30 2c 20 30 2c 20 70 54 61 62 2d 3e 61 43  , 0, 0, pTab->aC
3340: 6f 6c 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b  ol[i].zName, 0);
3350: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
3360: 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74  VdbeOp3(v, OP_St
3370: 72 69 6e 67 38 2c 20 30 2c 20 30 2c 0a 20 20 20  ring8, 0, 0,.   
3380: 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43          pTab->aC
3390: 6f 6c 5b 69 5d 2e 7a 54 79 70 65 20 3f 20 70 54  ol[i].zType ? pT
33a0: 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 7a 54 79 70  ab->aCol[i].zTyp
33b0: 65 20 3a 20 22 6e 75 6d 65 72 69 63 22 2c 20 30  e : "numeric", 0
33c0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
33d0: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
33e0: 50 5f 49 6e 74 65 67 65 72 2c 20 70 54 61 62 2d  P_Integer, pTab-
33f0: 3e 61 43 6f 6c 5b 69 5d 2e 6e 6f 74 4e 75 6c 6c  >aCol[i].notNull
3400: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
3410: 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20  lite3VdbeOp3(v, 
3420: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 30  OP_String8, 0, 0
3430: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 54 61  ,.           pTa
3440: 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 7a 44 66 6c 74  b->aCol[i].zDflt
3450: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
3460: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3470: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
3480: 65 67 65 72 2c 20 70 54 61 62 2d 3e 61 43 6f 6c  eger, pTab->aCol
3490: 5b 69 5d 2e 69 73 50 72 69 6d 4b 65 79 2c 20 30  [i].isPrimKey, 0
34a0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
34b0: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
34c0: 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 36 2c 20 30  P_Callback, 6, 0
34d0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
34e0: 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20  .  }else..  if( 
34f0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
3500: 4c 65 66 74 2c 20 22 69 6e 64 65 78 5f 69 6e 66  Left, "index_inf
3510: 6f 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68 74  o")==0 && zRight
3520: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
3530: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
3540: 70 54 61 62 3b 0a 20 20 20 20 69 66 28 20 73 71  pTab;.    if( sq
3550: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
3560: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
3570: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 70  ragma_out;.    p
3580: 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Idx = sqlite3Fin
3590: 64 49 6e 64 65 78 28 64 62 2c 20 7a 52 69 67 68  dIndex(db, zRigh
35a0: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
35b0: 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20 20 69   pIdx ){.      i
35c0: 6e 74 20 69 3b 0a 20 20 20 20 20 20 70 54 61 62  nt i;.      pTab
35d0: 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b   = pIdx->pTable;
35e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
35f0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
3600: 33 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  3);.      sqlite
3610: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
3620: 76 2c 20 30 2c 20 22 73 65 71 6e 6f 22 2c 20 50  v, 0, "seqno", P
3630: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
3640: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
3650: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 22 63 69  olName(v, 1, "ci
3660: 64 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  d", P3_STATIC);.
3670: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3680: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
3690: 2c 20 22 6e 61 6d 65 22 2c 20 50 33 5f 53 54 41  , "name", P3_STA
36a0: 54 49 43 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  TIC);.      for(
36b0: 69 3d 30 3b 20 69 3c 70 49 64 78 2d 3e 6e 43 6f  i=0; i<pIdx->nCo
36c0: 6c 75 6d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  lumn; i++){.    
36d0: 20 20 20 20 69 6e 74 20 63 6e 75 6d 20 3d 20 70      int cnum = p
36e0: 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d  Idx->aiColumn[i]
36f0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
3700: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
3710: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 30 29 3b  _Integer, i, 0);
3720: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
3730: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
3740: 49 6e 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20 30  Integer, cnum, 0
3750: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
3760: 74 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 3e 63 6e  t( pTab->nCol>cn
3770: 75 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71  um );.        sq
3780: 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20  lite3VdbeOp3(v, 
3790: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 30  OP_String8, 0, 0
37a0: 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75  , pTab->aCol[cnu
37b0: 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  m].zName, 0);.  
37c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
37d0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c  eAddOp(v, OP_Cal
37e0: 6c 62 61 63 6b 2c 20 33 2c 20 30 29 3b 0a 20 20  lback, 3, 0);.  
37f0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
3800: 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74  lse..  if( sqlit
3810: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
3820: 20 22 69 6e 64 65 78 5f 6c 69 73 74 22 29 3d 3d   "index_list")==
3830: 30 20 26 26 20 7a 52 69 67 68 74 20 29 7b 0a 20  0 && zRight ){. 
3840: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
3850: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
3860: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
3870: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
3880: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
3890: 5f 6f 75 74 3b 0a 20 20 20 20 70 54 61 62 20 3d  _out;.    pTab =
38a0: 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
38b0: 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e(db, zRight, zD
38c0: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  b);.    if( pTab
38d0: 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71   ){.      v = sq
38e0: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
38f0: 72 73 65 29 3b 0a 20 20 20 20 20 20 70 49 64 78  rse);.      pIdx
3900: 20 3d 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b   = pTab->pIndex;
3910: 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78 20  .      if( pIdx 
3920: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  ){.        int i
3930: 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20 73   = 0; .        s
3940: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
3950: 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20  Cols(v, 3);.    
3960: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
3970: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
3980: 22 73 65 71 22 2c 20 50 33 5f 53 54 41 54 49 43  "seq", P3_STATIC
3990: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
39a0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
39b0: 28 76 2c 20 31 2c 20 22 6e 61 6d 65 22 2c 20 50  (v, 1, "name", P
39c0: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
39d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
39e0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 22  tColName(v, 2, "
39f0: 75 6e 69 71 75 65 22 2c 20 50 33 5f 53 54 41 54  unique", P3_STAT
3a00: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69  IC);.        whi
3a10: 6c 65 28 70 49 64 78 29 7b 0a 20 20 20 20 20 20  le(pIdx){.      
3a20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
3a30: 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67  ddOp(v, OP_Integ
3a40: 65 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20 20 20  er, i, 0);.     
3a50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
3a60: 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op3(v, OP_String
3a70: 38 2c 20 30 2c 20 30 2c 20 70 49 64 78 2d 3e 7a  8, 0, 0, pIdx->z
3a80: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
3a90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
3aa0: 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67  ddOp(v, OP_Integ
3ab0: 65 72 2c 20 70 49 64 78 2d 3e 6f 6e 45 72 72 6f  er, pIdx->onErro
3ac0: 72 21 3d 4f 45 5f 4e 6f 6e 65 2c 20 30 29 3b 0a  r!=OE_None, 0);.
3ad0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
3ae0: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
3af0: 5f 43 61 6c 6c 62 61 63 6b 2c 20 33 2c 20 30 29  _Callback, 3, 0)
3b00: 3b 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b  ;.          ++i;
3b10: 0a 20 20 20 20 20 20 20 20 20 20 70 49 64 78 20  .          pIdx 
3b20: 3d 20 70 49 64 78 2d 3e 70 4e 65 78 74 3b 0a 20  = pIdx->pNext;. 
3b30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
3b40: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
3b50: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
3b60: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
3b70: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
3b80: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 66 6f 72  ICmp(zLeft, "for
3b90: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 29 3d  eign_key_list")=
3ba0: 3d 30 20 26 26 20 7a 52 69 67 68 74 20 29 7b 0a  =0 && zRight ){.
3bb0: 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20      FKey *pFK;. 
3bc0: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
3bd0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
3be0: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
3bf0: 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
3c00: 6f 75 74 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  out;.    pTab = 
3c10: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
3c20: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
3c30: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
3c40: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
3c50: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
3c60: 73 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d  se);.      pFK =
3c70: 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20   pTab->pFKey;.  
3c80: 20 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20      if( pFK ){. 
3c90: 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30         int i = 0
3ca0: 3b 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ; .        sqlit
3cb0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
3cc0: 28 76 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20  (v, 5);.        
3cd0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
3ce0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 22 69 64 22  lName(v, 0, "id"
3cf0: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
3d00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3d10: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
3d20: 2c 20 22 73 65 71 22 2c 20 50 33 5f 53 54 41 54  , "seq", P3_STAT
3d30: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
3d40: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
3d50: 6d 65 28 76 2c 20 32 2c 20 22 74 61 62 6c 65 22  me(v, 2, "table"
3d60: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
3d70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3d80: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33  eSetColName(v, 3
3d90: 2c 20 22 66 72 6f 6d 22 2c 20 50 33 5f 53 54 41  , "from", P3_STA
3da0: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
3db0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
3dc0: 61 6d 65 28 76 2c 20 34 2c 20 22 74 6f 22 2c 20  ame(v, 4, "to", 
3dd0: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
3de0: 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a      while(pFK){.
3df0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b            int j;
3e00: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a  .          for(j
3e10: 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b  =0; j<pFK->nCol;
3e20: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
3e30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
3e40: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
3e50: 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20 20 20 20  r, i, 0);.      
3e60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3e70: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
3e80: 65 67 65 72 2c 20 6a 2c 20 30 29 3b 0a 20 20 20  eger, j, 0);.   
3e90: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
3ea0: 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74  VdbeOp3(v, OP_St
3eb0: 72 69 6e 67 38 2c 20 30 2c 20 30 2c 20 70 46 4b  ring8, 0, 0, pFK
3ec0: 2d 3e 7a 54 6f 2c 20 30 29 3b 0a 20 20 20 20 20  ->zTo, 0);.     
3ed0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
3ee0: 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72 69  beOp3(v, OP_Stri
3ef0: 6e 67 38 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20  ng8, 0, 0,.     
3f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f10: 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43          pTab->aC
3f20: 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e  ol[pFK->aCol[j].
3f30: 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29  iFrom].zName, 0)
3f40: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
3f50: 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20  lite3VdbeOp3(v, 
3f60: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 30  OP_String8, 0, 0
3f70: 2c 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a  , pFK->aCol[j].z
3f80: 43 6f 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Col, 0);.       
3f90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
3fa0: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c  AddOp(v, OP_Call
3fb0: 62 61 63 6b 2c 20 35 2c 20 30 29 3b 0a 20 20 20  back, 5, 0);.   
3fc0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
3fd0: 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20     ++i;.        
3fe0: 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65    pFK = pFK->pNe
3ff0: 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  xtFrom;.        
4000: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
4010: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f    }else.#endif /
4020: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
4030: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
4040: 45 59 29 20 2a 2f 0a 0a 20 20 69 66 28 20 73 71  EY) */..  if( sq
4050: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
4060: 66 74 2c 20 22 64 61 74 61 62 61 73 65 5f 6c 69  ft, "database_li
4070: 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  st")==0 ){.    i
4080: 6e 74 20 69 3b 0a 20 20 20 20 69 66 28 20 73 71  nt i;.    if( sq
4090: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
40a0: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
40b0: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 73  ragma_out;.    s
40c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
40d0: 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20  Cols(v, 3);.    
40e0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
40f0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 22 73 65 71  lName(v, 0, "seq
4100: 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  ", P3_STATIC);. 
4110: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4120: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 22  tColName(v, 1, "
4130: 6e 61 6d 65 22 2c 20 50 33 5f 53 54 41 54 49 43  name", P3_STATIC
4140: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
4150: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
4160: 32 2c 20 22 66 69 6c 65 22 2c 20 50 33 5f 53 54  2, "file", P3_ST
4170: 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69  ATIC);.    for(i
4180: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
4190: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  ++){.      if( d
41a0: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30  b->aDb[i].pBt==0
41b0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
41c0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
41d0: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29  Db[i].zName!=0 )
41e0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
41f0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49  dbeAddOp(v, OP_I
4200: 6e 74 65 67 65 72 2c 20 69 2c 20 30 29 3b 0a 20  nteger, i, 0);. 
4210: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4220: 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op3(v, OP_String
4230: 38 2c 20 30 2c 20 30 2c 20 64 62 2d 3e 61 44 62  8, 0, 0, db->aDb
4240: 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  [i].zName, 0);. 
4250: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4260: 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op3(v, OP_String
4270: 38 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 20  8, 0, 0,.       
4280: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
4290: 47 65 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e  GetFilename(db->
42a0: 61 44 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b  aDb[i].pBt), 0);
42b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
42c0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61  beAddOp(v, OP_Ca
42d0: 6c 6c 62 61 63 6b 2c 20 33 2c 20 30 29 3b 0a 20  llback, 3, 0);. 
42e0: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 23 69     }.  }else..#i
42f0: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 69  fndef NDEBUG.  i
4300: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
4310: 70 28 7a 4c 65 66 74 2c 20 22 70 61 72 73 65 72  p(zLeft, "parser
4320: 5f 74 72 61 63 65 22 29 3d 3d 30 20 29 7b 0a 20  _trace")==0 ){. 
4330: 20 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20 73     extern void s
4340: 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
4350: 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29  e(FILE*, char *)
4360: 3b 0a 20 20 20 20 69 66 28 20 67 65 74 42 6f 6f  ;.    if( getBoo
4370: 6c 65 61 6e 28 7a 52 69 67 68 74 29 20 29 7b 0a  lean(zRight) ){.
4380: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72        sqlite3Par
4390: 73 65 72 54 72 61 63 65 28 73 74 64 6f 75 74 2c  serTrace(stdout,
43a0: 20 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20   "parser: ");.  
43b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
43c0: 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
43d0: 65 28 30 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  e(0, 0);.    }. 
43e0: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23   }else.#endif..#
43f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4400: 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
4410: 43 4b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  CK.  if( sqlite3
4420: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
4430: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
4440: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20  )==0 ){.    int 
4450: 69 2c 20 6a 2c 20 61 64 64 72 3b 0a 0a 20 20 20  i, j, addr;..   
4460: 20 2f 2a 20 43 6f 64 65 20 74 68 61 74 20 69 6e   /* Code that in
4470: 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 69 6e  itializes the in
4480: 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 70 72  tegrity check pr
4490: 6f 67 72 61 6d 2e 20 20 53 65 74 20 74 68 65 0a  ogram.  Set the.
44a0: 20 20 20 20 2a 2a 20 65 72 72 6f 72 20 63 6f 75      ** error cou
44b0: 6e 74 20 30 0a 20 20 20 20 2a 2f 0a 20 20 20 20  nt 0.    */.    
44c0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
44d0: 65 4f 70 4c 69 73 74 20 69 6e 69 74 43 6f 64 65  eOpList initCode
44e0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f  [] = {.      { O
44f0: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30  P_Integer,     0
4500: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
4510: 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 53 74        { OP_MemSt
4520: 6f 72 65 2c 20 20 20 20 30 2c 20 31 2c 20 20 20  ore,    0, 1,   
4530: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a       0},.    };.
4540: 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20 74 68 61  .    /* Code tha
4550: 74 20 61 70 70 65 61 72 73 20 61 74 20 74 68 65  t appears at the
4560: 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 74 65   end of the inte
4570: 67 72 69 74 79 20 63 68 65 63 6b 2e 20 20 49 66  grity check.  If
4580: 20 6e 6f 20 65 72 72 6f 72 0a 20 20 20 20 2a 2a   no error.    **
4590: 20 6d 65 73 73 61 67 65 73 20 68 61 76 65 20 62   messages have b
45a0: 65 65 6e 20 67 65 6e 65 72 61 74 65 64 2c 20 6f  een generated, o
45b0: 75 74 70 75 74 20 4f 4b 2e 20 20 4f 74 68 65 72  utput OK.  Other
45c0: 77 69 73 65 20 6f 75 74 70 75 74 20 74 68 65 0a  wise output the.
45d0: 20 20 20 20 2a 2a 20 65 72 72 6f 72 20 6d 65 73      ** error mes
45e0: 73 61 67 65 0a 20 20 20 20 2a 2f 0a 20 20 20 20  sage.    */.    
45f0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
4600: 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b  eOpList endCode[
4610: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50  ] = {.      { OP
4620: 5f 4d 65 6d 4c 6f 61 64 2c 20 20 20 20 20 30 2c  _MemLoad,     0,
4630: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   0,        0},. 
4640: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
4650: 72 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20  r,     0, 0,    
4660: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
4670: 4f 50 5f 4e 65 2c 20 20 20 20 20 20 20 20 20 20  OP_Ne,          
4680: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
4690: 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20      /* 2 */.    
46a0: 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20    { OP_String8, 
46b0: 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20      0, 0,       
46c0: 20 22 6f 6b 22 7d 2c 0a 20 20 20 20 20 20 7b 20   "ok"},.      { 
46d0: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20  OP_Callback,    
46e0: 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 0,        0},
46f0: 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2a 20  .    };..    /* 
4700: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56  Initialize the V
4710: 44 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  DBE program */. 
4720: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
4730: 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
4740: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
4750: 75 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  ut;.    sqlite3V
4760: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
4770: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
4780: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
4790: 2c 20 30 2c 20 22 69 6e 74 65 67 72 69 74 79 5f  , 0, "integrity_
47a0: 63 68 65 63 6b 22 2c 20 50 33 5f 53 54 41 54 49  check", P3_STATI
47b0: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
47c0: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
47d0: 41 72 72 61 79 53 69 7a 65 28 69 6e 69 74 43 6f  ArraySize(initCo
47e0: 64 65 29 2c 20 69 6e 69 74 43 6f 64 65 29 3b 0a  de), initCode);.
47f0: 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e  .    /* Do an in
4800: 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e  tegrity check on
4810: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 66   each database f
4820: 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69  ile */.    for(i
4830: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
4840: 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45  ++){.      HashE
4850: 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20 69 6e  lem *x;.      in
4860: 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  t cnt = 0;..    
4870: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
4880: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
4890: 2c 20 69 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  , i);..      /* 
48a0: 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20  Do an integrity 
48b0: 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54  check of the B-T
48c0: 72 65 65 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ree.      */.   
48d0: 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48     for(x=sqliteH
48e0: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44  ashFirst(&db->aD
48f0: 62 5b 69 5d 2e 74 62 6c 48 61 73 68 29 3b 20 78  b[i].tblHash); x
4900: 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; x=sqliteHashNe
4910: 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20  xt(x)){.        
4920: 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71  Table *pTab = sq
4930: 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b  liteHashData(x);
4940: 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a  .        Index *
4950: 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 73 71  pIdx;.        sq
4960: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76  lite3VdbeAddOp(v
4970: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54  , OP_Integer, pT
4980: 61 62 2d 3e 74 6e 75 6d 2c 20 30 29 3b 0a 20 20  ab->tnum, 0);.  
4990: 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
49a0: 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54       for(pIdx=pT
49b0: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
49c0: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
49d0: 78 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  xt){.          i
49e0: 66 28 20 73 71 6c 69 74 65 33 43 68 65 63 6b 49  f( sqlite3CheckI
49f0: 6e 64 65 78 43 6f 6c 6c 53 65 71 28 70 50 61 72  ndexCollSeq(pPar
4a00: 73 65 2c 20 70 49 64 78 29 20 29 20 67 6f 74 6f  se, pIdx) ) goto
4a10: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
4a20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
4a30: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e  beAddOp(v, OP_In
4a40: 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 74 6e 75  teger, pIdx->tnu
4a50: 6d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  m, 0);.         
4a60: 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20   cnt++;.        
4a70: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
4a80: 61 73 73 65 72 74 28 20 63 6e 74 3e 30 20 29 3b  assert( cnt>0 );
4a90: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
4aa0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e  beAddOp(v, OP_In
4ab0: 74 65 67 72 69 74 79 43 6b 2c 20 63 6e 74 2c 20  tegrityCk, cnt, 
4ac0: 69 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  i);.      sqlite
4ad0: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
4ae0: 5f 44 75 70 2c 20 30 2c 20 31 29 3b 0a 20 20 20  _Dup, 0, 1);.   
4af0: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
4b00: 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53  3VdbeOp3(v, OP_S
4b10: 74 72 69 6e 67 38 2c 20 30 2c 20 30 2c 20 22 6f  tring8, 0, 0, "o
4b20: 6b 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  k", P3_STATIC);.
4b30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4b40: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 45 71 2c  eAddOp(v, OP_Eq,
4b50: 20 30 2c 20 61 64 64 72 2b 36 29 3b 0a 20 20 20   0, addr+6);.   
4b60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70     sqlite3VdbeOp
4b70: 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  3(v, OP_String8,
4b80: 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   0, 0,.         
4b90: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 22  sqlite3MPrintf("
4ba0: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
4bb0: 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61  %s ***\n", db->a
4bc0: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20  Db[i].zName),.  
4bd0: 20 20 20 20 20 20 20 50 33 5f 44 59 4e 41 4d 49         P3_DYNAMI
4be0: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
4bf0: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
4c00: 5f 50 75 6c 6c 2c 20 31 2c 20 30 29 3b 0a 20 20  _Pull, 1, 0);.  
4c10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
4c20: 64 64 4f 70 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  ddOp(v, OP_Conca
4c30: 74 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 20 20  t, 0, 1);.      
4c40: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
4c50: 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c  (v, OP_Callback,
4c60: 20 31 2c 20 30 29 3b 0a 0a 20 20 20 20 20 20 2f   1, 0);..      /
4c70: 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
4c80: 74 68 65 20 69 6e 64 69 63 65 73 20 61 72 65 20  the indices are 
4c90: 63 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72  constructed corr
4ca0: 65 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a  ectly..      */.
4cb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
4cc0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
4cd0: 61 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20  arse, i);.      
4ce0: 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68  for(x=sqliteHash
4cf0: 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69  First(&db->aDb[i
4d00: 5d 2e 74 62 6c 48 61 73 68 29 3b 20 78 3b 20 78  ].tblHash); x; x
4d10: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
4d20: 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62  x)){.        Tab
4d30: 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74  le *pTab = sqlit
4d40: 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20  eHashData(x);.  
4d50: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64        Index *pId
4d60: 78 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c  x;.        int l
4d70: 6f 6f 70 54 6f 70 3b 0a 0a 20 20 20 20 20 20 20  oopTop;..       
4d80: 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65   if( pTab->pInde
4d90: 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  x==0 ) continue;
4da0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4db0: 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
4dc0: 63 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62  ces(pParse, pTab
4dd0: 2c 20 31 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  , 1, OP_OpenRead
4de0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
4df0: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
4e00: 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 30 29  P_Integer, 0, 0)
4e10: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
4e20: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
4e30: 5f 4d 65 6d 53 74 6f 72 65 2c 20 31 2c 20 31 29  _MemStore, 1, 1)
4e40: 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f  ;.        loopTo
4e50: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
4e60: 64 64 4f 70 28 76 2c 20 4f 50 5f 52 65 77 69 6e  ddOp(v, OP_Rewin
4e70: 64 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 20 20  d, 1, 0);.      
4e80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
4e90: 4f 70 28 76 2c 20 4f 50 5f 4d 65 6d 49 6e 63 72  Op(v, OP_MemIncr
4ea0: 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 1, 0);.       
4eb0: 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70   for(j=0, pIdx=p
4ec0: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
4ed0: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
4ee0: 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ext, j++){.     
4ef0: 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 3b 0a 20       int jmp2;. 
4f00: 20 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20           static 
4f10: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
4f20: 20 69 64 78 45 72 72 5b 5d 20 3d 20 7b 0a 20 20   idxErr[] = {.  
4f30: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 4d            { OP_M
4f40: 65 6d 49 6e 63 72 2c 20 20 20 20 20 30 2c 20 20  emIncr,     0,  
4f50: 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20  0,  0},.        
4f60: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38      { OP_String8
4f70: 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20 22 72  ,     0,  0,  "r
4f80: 6f 77 69 64 20 22 7d 2c 0a 20 20 20 20 20 20 20  owid "},.       
4f90: 20 20 20 20 20 7b 20 4f 50 5f 52 65 63 6e 6f 2c       { OP_Recno,
4fa0: 20 20 20 20 20 20 20 31 2c 20 20 30 2c 20 20 30         1,  0,  0
4fb0: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  },.            {
4fc0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20   OP_String8,    
4fd0: 20 30 2c 20 20 30 2c 20 20 22 20 6d 69 73 73 69   0,  0,  " missi
4fe0: 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 22 7d  ng from index "}
4ff0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  ,.            { 
5000: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20  OP_String8,     
5010: 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  0,  0},    /
5020: 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 4 */.         
5030: 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c 20     { OP_Concat, 
5040: 20 20 20 20 20 32 2c 20 20 30 2c 20 20 30 7d 2c       2,  0,  0},
5050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
5060: 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20 31  P_Callback,    1
5070: 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20  ,  0,  0},.     
5080: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20       };.        
5090: 20 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74    sqlite3Generat
50a0: 65 49 6e 64 65 78 4b 65 79 28 76 2c 20 70 49 64  eIndexKey(v, pId
50b0: 78 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  x, 1);.         
50c0: 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56   jmp2 = sqlite3V
50d0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 46  dbeAddOp(v, OP_F
50e0: 6f 75 6e 64 2c 20 6a 2b 32 2c 20 30 29 3b 0a 20  ound, j+2, 0);. 
50f0: 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20           addr = 
5100: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5110: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
5120: 65 28 69 64 78 45 72 72 29 2c 20 69 64 78 45 72  e(idxErr), idxEr
5130: 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  r);.          sq
5140: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
5150: 33 28 76 2c 20 61 64 64 72 2b 34 2c 20 70 49 64  3(v, addr+4, pId
5160: 78 2d 3e 7a 4e 61 6d 65 2c 20 50 33 5f 53 54 41  x->zName, P3_STA
5170: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20  TIC);.          
5180: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
5190: 65 50 32 28 76 2c 20 6a 6d 70 32 2c 20 73 71 6c  eP2(v, jmp2, sql
51a0: 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
51b0: 64 64 72 28 76 29 29 3b 0a 20 20 20 20 20 20 20  ddr(v));.       
51c0: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
51d0: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
51e0: 50 5f 4e 65 78 74 2c 20 31 2c 20 6c 6f 6f 70 54  P_Next, 1, loopT
51f0: 6f 70 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73  op+1);.        s
5200: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
5210: 50 32 28 76 2c 20 6c 6f 6f 70 54 6f 70 2c 20 73  P2(v, loopTop, s
5220: 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
5230: 74 41 64 64 72 28 76 29 29 3b 0a 20 20 20 20 20  tAddr(v));.     
5240: 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78     for(j=0, pIdx
5250: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
5260: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
5270: 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20  pNext, j++){.   
5280: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
5290: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 63  nst VdbeOpList c
52a0: 6e 74 49 64 78 5b 5d 20 3d 20 7b 0a 20 20 20 20  ntIdx[] = {.    
52b0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e           { OP_In
52c0: 74 65 67 65 72 2c 20 20 20 20 20 20 30 2c 20 20  teger,      0,  
52d0: 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20  0,  0},.        
52e0: 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 53 74 6f       { OP_MemSto
52f0: 72 65 2c 20 20 20 20 20 32 2c 20 20 31 2c 20 20  re,     2,  1,  
5300: 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  0},.            
5310: 20 7b 20 4f 50 5f 52 65 77 69 6e 64 2c 20 20 20   { OP_Rewind,   
5320: 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20      0,  0,  0}, 
5330: 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20   /* 2 */.       
5340: 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 49 6e        { OP_MemIn
5350: 63 72 2c 20 20 20 20 20 20 32 2c 20 20 30 2c 20  cr,      2,  0, 
5360: 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20   0},.           
5370: 20 20 7b 20 4f 50 5f 4e 65 78 74 2c 20 20 20 20    { OP_Next,    
5380: 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c       0,  0,  0},
5390: 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20    /* 4 */.      
53a0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 4c         { OP_MemL
53b0: 6f 61 64 2c 20 20 20 20 20 20 31 2c 20 20 30 2c  oad,      1,  0,
53c0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20    0},.          
53d0: 20 20 20 7b 20 4f 50 5f 4d 65 6d 4c 6f 61 64 2c     { OP_MemLoad,
53e0: 20 20 20 20 20 20 32 2c 20 20 30 2c 20 20 30 7d        2,  0,  0}
53f0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  ,.             {
5400: 20 4f 50 5f 45 71 2c 20 20 20 20 20 20 20 20 20   OP_Eq,         
5410: 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 2f    0,  0,  0},  /
5420: 2a 20 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 7 */.         
5430: 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 49 6e 63 72      { OP_MemIncr
5440: 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30  ,      0,  0,  0
5450: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  },.             
5460: 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20  { OP_String8,   
5470: 20 20 20 30 2c 20 20 30 2c 20 20 22 77 72 6f 6e     0,  0,  "wron
5480: 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
5490: 6e 20 69 6e 64 65 78 20 22 7d 2c 0a 20 20 20 20  n index "},.    
54a0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74           { OP_St
54b0: 72 69 6e 67 38 2c 20 20 20 20 20 20 30 2c 20 20  ring8,      0,  
54c0: 30 2c 20 20 30 7d 2c 20 20 2f 2a 20 31 30 20 2a  0,  0},  /* 10 *
54d0: 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  /.             {
54e0: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20   OP_Concat,     
54f0: 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20    0,  0,  0},.  
5500: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
5510: 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20 20 31 2c  Callback,     1,
5520: 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20    0,  0},.      
5530: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 20      };.         
5540: 20 69 66 28 20 70 49 64 78 2d 3e 74 6e 75 6d 3d   if( pIdx->tnum=
5550: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
5560: 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20           addr = 
5570: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5580: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
5590: 65 28 63 6e 74 49 64 78 29 2c 20 63 6e 74 49 64  e(cntIdx), cntId
55a0: 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  x);.          sq
55b0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
55c0: 31 28 76 2c 20 61 64 64 72 2b 32 2c 20 6a 2b 32  1(v, addr+2, j+2
55d0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
55e0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32  ite3VdbeChangeP2
55f0: 28 76 2c 20 61 64 64 72 2b 32 2c 20 61 64 64 72  (v, addr+2, addr
5600: 2b 35 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  +5);.          s
5610: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
5620: 50 31 28 76 2c 20 61 64 64 72 2b 34 2c 20 6a 2b  P1(v, addr+4, j+
5630: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  2);.          sq
5640: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
5650: 32 28 76 2c 20 61 64 64 72 2b 34 2c 20 61 64 64  2(v, addr+4, add
5660: 72 2b 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  r+3);.          
5670: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
5680: 65 50 32 28 76 2c 20 61 64 64 72 2b 37 2c 20 61  eP2(v, addr+7, a
5690: 64 64 72 2b 41 72 72 61 79 53 69 7a 65 28 63 6e  ddr+ArraySize(cn
56a0: 74 49 64 78 29 29 3b 0a 20 20 20 20 20 20 20 20  tIdx));.        
56b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
56c0: 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2b 31 30  ngeP3(v, addr+10
56d0: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50  , pIdx->zName, P
56e0: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
56f0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20     }.      } .  
5700: 20 20 7d 0a 20 20 20 20 61 64 64 72 20 3d 20 73    }.    addr = s
5710: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
5720: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
5730: 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43 6f  (endCode), endCo
5740: 64 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  de);.    sqlite3
5750: 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20  VdbeChangeP2(v, 
5760: 61 64 64 72 2b 32 2c 20 61 64 64 72 2b 41 72 72  addr+2, addr+Arr
5770: 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 29  aySize(endCode))
5780: 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  ;.  }else.#endif
5790: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
57a0: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20  INTEGRITY_CHECK 
57b0: 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  */..  /*.  **   
57c0: 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a  PRAGMA encoding.
57d0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e    **   PRAGMA en
57e0: 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22  coding = "utf-8"
57f0: 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31  |"utf-16"|"utf-1
5800: 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a  6le"|"utf-16be".
5810: 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 27    **.  ** In it'
5820: 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68  s first form, th
5830: 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e  is pragma return
5840: 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  s the encoding o
5850: 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20  f the main.  ** 
5860: 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
5870: 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74   database is not
5880: 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74   initialized, it
5890: 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
58a0: 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  now..  **.  ** T
58b0: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f  he second form o
58c0: 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73  f this pragma is
58d0: 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20   a no-op if the 
58e0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
58f0: 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20  le.  ** has not 
5900: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69  already been ini
5910: 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69  tialized. In thi
5920: 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20 74  s case it sets t
5930: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20  he default.  ** 
5940: 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69  encoding that wi
5950: 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ll be used for t
5960: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
5970: 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66   file if a new f
5980: 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61  ile.  ** is crea
5990: 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74  ted. If an exist
59a0: 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73  ing main databas
59b0: 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64  e file is opened
59c0: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
59d0: 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63  default text enc
59e0: 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78  oding for the ex
59f0: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
5a00: 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20  is used..  ** . 
5a10: 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73   ** In all cases
5a20: 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 63   new databases c
5a30: 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65  reated using the
5a40: 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20   ATTACH command 
5a50: 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64  are.  ** created
5a60: 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65   to use the same
5a70: 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
5a80: 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61  coding as the ma
5a90: 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a  in database. If.
5aa0: 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61    ** the main da
5ab0: 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62  tabase has not b
5ac0: 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
5ad0: 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77  and/or created w
5ae0: 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20  hen ATTACH.  ** 
5af0: 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68 69  is executed, thi
5b00: 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65  s is done before
5b10: 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65 72   the ATTACH oper
5b20: 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ation..  **.  **
5b30: 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66   In the second f
5b40: 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20  orm this pragma 
5b50: 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65 6e  sets the text en
5b60: 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65  coding to be use
5b70: 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61  d in.  ** new da
5b80: 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65  tabase files cre
5b90: 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20  ated using this 
5ba0: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  database handle.
5bb0: 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a   It is only.  **
5bc0: 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b   useful if invok
5bd0: 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61  ed immediately a
5be0: 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61  fter the main da
5bf0: 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20  tabase i.  */.  
5c00: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
5c10: 6d 70 28 7a 4c 65 66 74 2c 20 22 65 6e 63 6f 64  mp(zLeft, "encod
5c20: 69 6e 67 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ing")==0 ){.    
5c30: 73 74 61 74 69 63 20 73 74 72 75 63 74 20 45 6e  static struct En
5c40: 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68  cName {.      ch
5c50: 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
5c60: 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65   u8 enc;.    } e
5c70: 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20  ncnames[] = {.  
5c80: 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20      { "UTF-8",  
5c90: 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20    SQLITE_UTF8   
5ca0: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
5cb0: 22 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49  "UTF8",     SQLI
5cc0: 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d  TE_UTF8        }
5cd0: 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31  ,.      { "UTF-1
5ce0: 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  6le", SQLITE_UTF
5cf0: 31 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20 20  16LE     },.    
5d00: 20 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20    { "UTF16le",  
5d10: 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20  SQLITE_UTF16LE  
5d20: 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55     },.      { "U
5d30: 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45  TF-16be", SQLITE
5d40: 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a  _UTF16BE     },.
5d50: 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62 65        { "UTF16be
5d60: 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ",  SQLITE_UTF16
5d70: 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  BE     },.      
5d80: 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20  { "UTF-16",   0 
5d90: 2f 2a 20 46 69 6c 6c 65 64 20 69 6e 20 61 74 20  /* Filled in at 
5da0: 72 75 6e 2d 74 69 6d 65 20 2a 2f 20 7d 2c 0a 20  run-time */ },. 
5db0: 20 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20       { "UTF16", 
5dc0: 20 20 20 30 20 2f 2a 20 46 69 6c 6c 65 64 20 69     0 /* Filled i
5dd0: 6e 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 2a 2f  n at run-time */
5de0: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 30 2c 20 30   },.      { 0, 0
5df0: 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 73 74   }.    };.    st
5e00: 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a 70 45  ruct EncName *pE
5e10: 6e 63 3b 0a 20 20 20 20 65 6e 63 6e 61 6d 65 73  nc;.    encnames
5e20: 5b 36 5d 2e 65 6e 63 20 3d 20 65 6e 63 6e 61 6d  [6].enc = encnam
5e30: 65 73 5b 37 5d 2e 65 6e 63 20 3d 20 53 51 4c 49  es[7].enc = SQLI
5e40: 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a  TE_UTF16NATIVE;.
5e50: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
5e60: 29 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41  ){    /* "PRAGMA
5e70: 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20   encoding" */.  
5e80: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
5e90: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
5ea0: 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
5eb0: 6f 75 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  out;.      sqlit
5ec0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
5ed0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  (v, 1);.      sq
5ee0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
5ef0: 61 6d 65 28 76 2c 20 30 2c 20 22 65 6e 63 6f 64  ame(v, 0, "encod
5f00: 69 6e 67 22 2c 20 50 33 5f 53 54 41 54 49 43 29  ing", P3_STATIC)
5f10: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
5f20: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53  dbeAddOp(v, OP_S
5f30: 74 72 69 6e 67 38 2c 20 30 2c 20 30 29 3b 0a 20  tring8, 0, 0);. 
5f40: 20 20 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65       for(pEnc=&e
5f50: 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63  ncnames[0]; pEnc
5f60: 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29  ->zName; pEnc++)
5f70: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 45  {.        if( pE
5f80: 6e 63 2d 3e 65 6e 63 3d 3d 70 50 61 72 73 65 2d  nc->enc==pParse-
5f90: 3e 64 62 2d 3e 65 6e 63 20 29 7b 0a 20 20 20 20  >db->enc ){.    
5fa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5fb0: 65 43 68 61 6e 67 65 50 33 28 76 2c 20 2d 31 2c  eChangeP3(v, -1,
5fc0: 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 2c 20 50 33   pEnc->zName, P3
5fd0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
5fe0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
5ff0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
6000: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
6010: 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61  dOp(v, OP_Callba
6020: 63 6b 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 7d  ck, 1, 0);.    }
6030: 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20 20  else{           
6040: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6050: 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  "PRAGMA encoding
6060: 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20   = XXX" */.     
6070: 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20   /* Only change 
6080: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c  the value of sql
6090: 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64  ite.enc if the d
60a0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69  atabase handle i
60b0: 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69  s not.      ** i
60c0: 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74  nitialized. If t
60d0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
60e0: 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77   exists, the new
60f0: 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75   sqlite.enc valu
6100: 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20  e.      ** will 
6110: 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  be overwritten w
6120: 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69  hen the schema i
6130: 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49  s next loaded. I
6140: 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20  f it does not.  
6150: 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65      ** already e
6160: 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62  xists, it will b
6170: 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73 65  e created to use
6180: 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e   the new encodin
6190: 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a  g value..      *
61a0: 2f 0a 20 20 20 20 20 20 69 66 28 20 21 28 70 50  /.      if( !(pP
61b0: 61 72 73 65 2d 3e 64 62 2d 3e 66 6c 61 67 73 26  arse->db->flags&
61c0: 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a  SQLITE_Initializ
61d0: 65 64 29 20 29 7b 0a 20 20 20 20 20 20 20 20 66  ed) ){.        f
61e0: 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65  or(pEnc=&encname
61f0: 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d  s[0]; pEnc->zNam
6200: 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20  e; pEnc++){.    
6210: 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c        if( 0==sql
6220: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
6230: 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29  ht, pEnc->zName)
6240: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
6250: 70 50 61 72 73 65 2d 3e 64 62 2d 3e 65 6e 63 20  pParse->db->enc 
6260: 3d 20 70 45 6e 63 2d 3e 65 6e 63 3b 0a 20 20 20  = pEnc->enc;.   
6270: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
6280: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
6290: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
62a0: 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29  ( !pEnc->zName )
62b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
62c0: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
62d0: 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64  se, "unsupported
62e0: 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20   encoding: %s", 
62f0: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20  zRight);.       
6300: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
6310: 0a 20 20 7d 65 6c 73 65 0a 0a 23 69 66 20 64 65  .  }else..#if de
6320: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
6330: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
6340: 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a  QLITE_TEST).  /*
6350: 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65  .  ** Report the
6360: 20 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f   current state o
6370: 66 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20  f file logs for 
6380: 61 6c 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20  all databases.  
6390: 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
63a0: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
63b0: 6c 6f 63 6b 5f 73 74 61 74 75 73 22 29 3d 3d 30  lock_status")==0
63c0: 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
63d0: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
63e0: 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20   azLockName[] = 
63f0: 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65  {.      "unlocke
6400: 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72  d", "shared", "r
6410: 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69  eserved", "pendi
6420: 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22  ng", "exclusive"
6430: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
6440: 69 3b 0a 20 20 20 20 56 64 62 65 20 2a 76 20 3d  i;.    Vdbe *v =
6450: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
6460: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c  pParse);.    sql
6470: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
6480: 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 73 71  ls(v, 2);.    sq
6490: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
64a0: 61 6d 65 28 76 2c 20 30 2c 20 22 64 61 74 61 62  ame(v, 0, "datab
64b0: 61 73 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29  ase", P3_STATIC)
64c0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
64d0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
64e0: 2c 20 22 73 74 61 74 75 73 22 2c 20 50 33 5f 53  , "status", P3_S
64f0: 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
6500: 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
6510: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65  i++){.      Btre
6520: 65 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 50 61  e *pBt;.      Pa
6530: 67 65 72 20 2a 70 50 61 67 65 72 3b 0a 20 20 20  ger *pPager;.   
6540: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
6550: 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e  ].zName==0 ) con
6560: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  tinue;.      sql
6570: 69 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f  ite3VdbeOp3(v, O
6580: 50 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30 2c 20  P_String, 0, 0, 
6590: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
65a0: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
65b0: 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44      pBt = db->aD
65c0: 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20  b[i].pBt;.      
65d0: 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20 28 70  if( pBt==0 || (p
65e0: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
65f0: 74 72 65 65 50 61 67 65 72 28 70 42 74 29 29 3d  treePager(pBt))=
6600: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
6610: 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20  lite3VdbeOp3(v, 
6620: 4f 50 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30 2c  OP_String, 0, 0,
6630: 20 22 63 6c 6f 73 65 64 22 2c 20 50 33 5f 53 54   "closed", P3_ST
6640: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ATIC);.      }el
6650: 73 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  se{.        int 
6660: 6a 20 3d 20 73 71 6c 69 74 65 33 70 61 67 65 72  j = sqlite3pager
6670: 5f 6c 6f 63 6b 73 74 61 74 65 28 70 50 61 67 65  _lockstate(pPage
6680: 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  r);.        sqli
6690: 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50  te3VdbeOp3(v, OP
66a0: 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30 2c 20 0a  _String, 0, 0, .
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 28 6a 3e 3d              (j>=
66c0: 30 20 26 26 20 6a 3c 3d 34 29 20 3f 20 61 7a 4c  0 && j<=4) ? azL
66d0: 6f 63 6b 4e 61 6d 65 5b 6a 5d 20 3a 20 22 75 6e  ockName[j] : "un
66e0: 6b 6e 6f 77 6e 22 2c 20 50 33 5f 53 54 41 54 49  known", P3_STATI
66f0: 43 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  C);.      }.    
6700: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
6710: 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63  Op(v, OP_Callbac
6720: 6b 2c 20 32 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  k, 2, 0);.    }.
6730: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a    }else.#endif..
6740: 20 20 7b 7d 0a 70 72 61 67 6d 61 5f 6f 75 74 3a    {}.pragma_out:
6750: 0a 20 20 73 71 6c 69 74 65 46 72 65 65 28 7a 4c  .  sqliteFree(zL
6760: 65 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 46 72  eft);.  sqliteFr
6770: 65 65 28 7a 52 69 67 68 74 29 3b 0a 7d 0a        ee(zRight);.}.