System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 7deadc72314da2ab61c4d9e1c607babf730a925b:


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 33 20 32 30 30  agma.c,v 1.3 200
01d0: 35 2f 30 33 2f 32 32 20 31 34 3a 35 34 3a 32 33  5/03/22 14:54:23
01e0: 20 72 6d 73 69 6d 70 73 6f 6e 20 45 78 70 20 24   rmsimpson Exp $
01f0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
0200: 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63 6c  liteInt.h".#incl
0210: 75 64 65 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c  ude "os.h".#incl
0220: 75 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f  ude <ctype.h>../
0230: 2a 20 49 67 6e 6f 72 65 20 74 68 69 73 20 77 68  * Ignore this wh
0240: 6f 6c 65 20 66 69 6c 65 20 69 66 20 70 72 61 67  ole file if prag
0250: 6d 61 73 20 61 72 65 20 64 69 73 61 62 6c 65 64  mas are disabled
0260: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
0270: 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 0a  TE_OMIT_PRAGMA..
0280: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
0290: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
02a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
02b0: 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 70 61 67  ).# include "pag
02c0: 65 72 2e 68 22 0a 23 20 69 6e 63 6c 75 64 65 20  er.h".# include 
02d0: 22 62 74 72 65 65 2e 68 22 0a 23 65 6e 64 69 66  "btree.h".#endif
02e0: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ../*.** Interpre
02f0: 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69  t the given stri
0300: 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20 6c  ng as a safety l
0310: 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30 20  evel.  Return 0 
0320: 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f  for OFF,.** 1 fo
0330: 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20 61  r ON or NORMAL a
0340: 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20 20  nd 2 for FULL.  
0350: 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20  Return 1 for an 
0360: 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72  empty or .** unr
0370: 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67  ecognized string
0380: 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a   argument..**.**
0390: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 76   Note that the v
03a0: 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20 61  alues returned a
03b0: 72 65 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 74  re one less that
03c0: 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61 74   the values that
03d0: 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 70 61  .** should be pa
03e0: 73 73 65 64 20 69 6e 74 6f 20 73 71 6c 69 74 65  ssed into sqlite
03f0: 33 42 74 72 65 65 53 65 74 53 61 66 65 74 79 4c  3BtreeSetSafetyL
0400: 65 76 65 6c 28 29 2e 20 20 54 68 65 20 69 73 20  evel().  The is 
0410: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70 6f  done.** to suppo
0420: 72 74 20 6c 65 67 61 63 79 20 53 51 4c 20 63 6f  rt legacy SQL co
0430: 64 65 2e 20 20 54 68 65 20 73 61 66 65 74 79 20  de.  The safety 
0440: 6c 65 76 65 6c 20 75 73 65 64 20 74 6f 20 62 65  level used to be
0450: 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64 20   boolean.** and 
0460: 6f 6c 64 65 72 20 73 63 72 69 70 74 73 20 6d 61  older scripts ma
0470: 79 20 68 61 76 65 20 75 73 65 64 20 6e 75 6d 62  y have used numb
0480: 65 72 73 20 30 20 66 6f 72 20 4f 46 46 20 61 6e  ers 0 for OFF an
0490: 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73  d 1 for ON..*/.s
04a0: 74 61 74 69 63 20 69 6e 74 20 67 65 74 53 61 66  tatic int getSaf
04b0: 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74 20 75  etyLevel(const u
04c0: 38 20 2a 7a 29 7b 0a 20 20 20 20 20 20 20 20 20  8 *z){.         
04d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04e0: 20 20 20 20 2f 2a 20 31 32 33 34 35 36 37 38 39      /* 123456789
04f0: 20 31 32 33 34 35 36 37 38 39 20 2a 2f 0a 20 20   123456789 */.  
0500: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
0510: 72 20 7a 54 65 78 74 5b 5d 20 3d 20 22 6f 6e 6f  r zText[] = "ono
0520: 66 66 61 6c 73 65 79 65 73 74 72 75 65 66 75 6c  ffalseyestrueful
0530: 6c 22 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  l";.  static con
0540: 73 74 20 75 38 20 69 4f 66 66 73 65 74 5b 5d 20  st u8 iOffset[] 
0550: 3d 20 7b 30 2c 20 31 2c 20 32 2c 20 34 2c 20 39  = {0, 1, 2, 4, 9
0560: 2c 20 31 32 2c 20 31 36 7d 3b 0a 20 20 73 74 61  , 12, 16};.  sta
0570: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 4c 65  tic const u8 iLe
0580: 6e 67 74 68 5b 5d 20 3d 20 7b 32 2c 20 32 2c 20  ngth[] = {2, 2, 
0590: 33 2c 20 35 2c 20 33 2c 20 34 2c 20 34 7d 3b 0a  3, 5, 3, 4, 4};.
05a0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
05b0: 38 20 69 56 61 6c 75 65 5b 5d 20 3d 20 20 7b 31  8 iValue[] =  {1
05c0: 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 31 2c  , 0, 0, 0, 1, 1,
05d0: 20 32 7d 3b 0a 20 20 69 6e 74 20 69 2c 20 6e 3b   2};.  int i, n;
05e0: 0a 20 20 69 66 28 20 69 73 64 69 67 69 74 28 2a  .  if( isdigit(*
05f0: 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  z) ){.    return
0600: 20 61 74 6f 69 28 7a 29 3b 0a 20 20 7d 0a 20 20   atoi(z);.  }.  
0610: 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20  n = strlen(z);. 
0620: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73 69 7a 65   for(i=0; i<size
0630: 6f 66 28 69 4c 65 6e 67 74 68 29 3b 20 69 2b 2b  of(iLength); i++
0640: 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65 6e 67  ){.    if( iLeng
0650: 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c 69  th[i]==n && sqli
0660: 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a 54 65  te3StrNICmp(&zTe
0670: 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c 7a  xt[iOffset[i]],z
0680: 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ,n)==0 ){.      
0690: 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d  return iValue[i]
06a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
06b0: 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  turn 1;.}../*.**
06c0: 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67   Interpret the g
06d0: 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61  iven string as a
06e0: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 0a   boolean value..
06f0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65  */.static int ge
0700: 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 75  tBoolean(const u
0710: 38 20 2a 7a 29 7b 0a 20 20 72 65 74 75 72 6e 20  8 *z){.  return 
0720: 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a  getSafetyLevel(z
0730: 29 26 31 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  )&1;.}..#ifndef 
0740: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
0750: 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20  R_PRAGMAS./*.** 
0760: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
0770: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
0780: 74 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e  temp db location
0790: 2e 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66  . Return 1 for f
07a0: 69 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65  ile.** backed te
07b0: 6d 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65  mporary database
07c0: 73 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64  s, 2 for the Red
07d0: 2d 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d  -Black tree in m
07e0: 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a  emory database.*
07f0: 2a 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74  * and 0 to use t
0800: 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  he compile-time 
0810: 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74  default..*/.stat
0820: 69 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74  ic int getTempSt
0830: 6f 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ore(const char *
0840: 7a 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d  z){.  if( z[0]>=
0850: 27 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27  '0' && z[0]<='2'
0860: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a   ){.    return z
0870: 5b 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c  [0] - '0';.  }el
0880: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
0890: 72 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29  rICmp(z, "file")
08a0: 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72  ==0 ){.    retur
08b0: 6e 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  n 1;.  }else if(
08c0: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
08d0: 7a 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20  z, "memory")==0 
08e0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b  ){.    return 2;
08f0: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65  .  }else{.    re
0900: 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  turn 0;.  }.}.#e
0910: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50  ndif /* SQLITE_P
0920: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
0930: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
0940: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
0950: 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64  AS./*.** Invalid
0960: 61 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65  ate temp storage
0970: 2c 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68  , either when th
0980: 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69  e temp storage i
0990: 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f  s changed.** fro
09a0: 6d 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68  m default, or wh
09b0: 65 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68  en 'file' and th
09c0: 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  e temp_store_dir
09d0: 65 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67  ectory has chang
09e0: 65 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  ed.*/.static int
09f0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
0a00: 74 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50  torage(Parse *pP
0a10: 61 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33  arse){.  sqlite3
0a20: 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64   *db = pParse->d
0a30: 62 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62  b;.  if( db->aDb
0a40: 5b 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20  [1].pBt!=0 ){.  
0a50: 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
0a60: 26 20 53 51 4c 49 54 45 5f 49 6e 54 72 61 6e 73  & SQLITE_InTrans
0a70: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
0a80: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
0a90: 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f  , "temporary sto
0aa0: 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  rage cannot be c
0ab0: 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20  hanged ".       
0ac0: 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20   "from within a 
0ad0: 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20  transaction");. 
0ae0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
0af0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
0b00: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
0b10: 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d  Close(db->aDb[1]
0b20: 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61  .pBt);.    db->a
0b30: 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20  Db[1].pBt = 0;. 
0b40: 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 49     sqlite3ResetI
0b50: 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61 28 64 62  nternalSchema(db
0b60: 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75  , 0);.  }.  retu
0b70: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
0b80: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
0b90: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a  _PAGER_PRAGMAS *
0ba0: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
0bb0: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
0bc0: 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68  GMAS./*.** If th
0bd0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 20  e TEMP database 
0be0: 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73 65 20 69  is open, close i
0bf0: 74 20 61 6e 64 20 6d 61 72 6b 20 74 68 65 20 64  t and mark the d
0c00: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 0a 2a  atabase schema.*
0c10: 2a 20 61 73 20 6e 65 65 64 69 6e 67 20 72 65 6c  * as needing rel
0c20: 6f 61 64 69 6e 67 2e 20 20 54 68 69 73 20 6d 75  oading.  This mu
0c30: 73 74 20 62 65 20 64 6f 6e 65 20 77 68 65 6e 20  st be done when 
0c40: 75 73 69 6e 67 20 74 68 65 20 54 45 4d 50 5f 53  using the TEMP_S
0c50: 54 4f 52 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55  TORE.** or DEFAU
0c60: 4c 54 5f 54 45 4d 50 5f 53 54 4f 52 45 20 70 72  LT_TEMP_STORE pr
0c70: 61 67 6d 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63  agmas..*/.static
0c80: 20 69 6e 74 20 63 68 61 6e 67 65 54 65 6d 70 53   int changeTempS
0c90: 74 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50  torage(Parse *pP
0ca0: 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
0cb0: 20 2a 7a 53 74 6f 72 61 67 65 54 79 70 65 29 7b   *zStorageType){
0cc0: 0a 20 20 69 6e 74 20 74 73 20 3d 20 67 65 74 54  .  int ts = getT
0cd0: 65 6d 70 53 74 6f 72 65 28 7a 53 74 6f 72 61 67  empStore(zStorag
0ce0: 65 54 79 70 65 29 3b 0a 20 20 73 71 6c 69 74 65  eType);.  sqlite
0cf0: 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e  3 *db = pParse->
0d00: 64 62 3b 0a 20 20 69 66 28 20 64 62 2d 3e 74 65  db;.  if( db->te
0d10: 6d 70 5f 73 74 6f 72 65 3d 3d 74 73 20 29 20 72  mp_store==ts ) r
0d20: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
0d30: 0a 20 20 69 66 28 20 69 6e 76 61 6c 69 64 61 74  .  if( invalidat
0d40: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 20 70 50  eTempStorage( pP
0d50: 61 72 73 65 20 29 20 21 3d 20 53 51 4c 49 54 45  arse ) != SQLITE
0d60: 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72  _OK ){.    retur
0d70: 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  n SQLITE_ERROR;.
0d80: 20 20 7d 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73    }.  db->temp_s
0d90: 74 6f 72 65 20 3d 20 74 73 3b 0a 20 20 72 65 74  tore = ts;.  ret
0da0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
0db0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
0dc0: 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  E_PAGER_PRAGMAS 
0dd0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61  */../*.** Genera
0de0: 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72  te code to retur
0df0: 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67  n a single integ
0e00: 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  er value..*/.sta
0e10: 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53  tic void returnS
0e20: 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20 2a  ingleInt(Parse *
0e30: 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
0e40: 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 6e 74 20  ar *zLabel, int 
0e50: 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20 2a  value){.  Vdbe *
0e60: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
0e70: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 73 71  be(pParse);.  sq
0e80: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76  lite3VdbeAddOp(v
0e90: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 76 61  , OP_Integer, va
0ea0: 6c 75 65 2c 20 30 29 3b 0a 20 20 69 66 28 20 70  lue, 0);.  if( p
0eb0: 50 61 72 73 65 2d 3e 65 78 70 6c 61 69 6e 3d 3d  Parse->explain==
0ec0: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
0ed0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
0ee0: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
0ef0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
0f00: 76 2c 20 30 2c 20 7a 4c 61 62 65 6c 2c 20 50 33  v, 0, zLabel, P3
0f10: 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 0a 20 20  _STATIC);.  }.  
0f20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
0f30: 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c  (v, OP_Callback,
0f40: 20 31 2c 20 30 29 3b 0a 7d 0a 0a 23 69 66 6e 64   1, 0);.}..#ifnd
0f50: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
0f60: 4c 41 47 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a  LAG_PRAGMAS./*.*
0f70: 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69  * Check to see i
0f80: 66 20 7a 52 69 67 68 74 20 61 6e 64 20 7a 4c 65  f zRight and zLe
0f90: 66 74 20 72 65 66 65 72 20 74 6f 20 61 20 70 72  ft refer to a pr
0fa0: 61 67 6d 61 20 74 68 61 74 20 71 75 65 72 69 65  agma that querie
0fb0: 73 0a 2a 2a 20 6f 72 20 63 68 61 6e 67 65 73 20  s.** or changes 
0fc0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6c 61 67 73  one of the flags
0fd0: 20 69 6e 20 64 62 2d 3e 66 6c 61 67 73 2e 20 20   in db->flags.  
0fe0: 52 65 74 75 72 6e 20 31 20 69 66 20 73 6f 20 61  Return 1 if so a
0ff0: 6e 64 20 30 20 69 66 20 6e 6f 74 2e 0a 2a 2a 20  nd 0 if not..** 
1000: 41 6c 73 6f 2c 20 69 6d 70 6c 65 6d 65 6e 74 20  Also, implement 
1010: 74 68 65 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 73  the pragma..*/.s
1020: 74 61 74 69 63 20 69 6e 74 20 66 6c 61 67 50 72  tatic int flagPr
1030: 61 67 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72  agma(Parse *pPar
1040: 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  se, const char *
1050: 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20 63 68 61  zLeft, const cha
1060: 72 20 2a 7a 52 69 67 68 74 29 7b 0a 20 20 73 74  r *zRight){.  st
1070: 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
1080: 74 20 73 50 72 61 67 6d 61 54 79 70 65 20 7b 0a  t sPragmaType {.
1090: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
10a0: 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  zName;  /* Name 
10b0: 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20 2a 2f  of the pragma */
10c0: 0a 20 20 20 20 69 6e 74 20 6d 61 73 6b 3b 20 20  .    int mask;  
10d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b           /* Mask
10e0: 20 66 6f 72 20 74 68 65 20 64 62 2d 3e 66 6c 61   for the db->fla
10f0: 67 73 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20  gs value */.  } 
1100: 61 50 72 61 67 6d 61 5b 5d 20 3d 20 7b 0a 20 20  aPragma[] = {.  
1110: 20 20 7b 20 22 76 64 62 65 5f 74 72 61 63 65 22    { "vdbe_trace"
1120: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
1130: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
1140: 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20 22 73       },.    { "s
1150: 71 6c 5f 74 72 61 63 65 22 2c 20 20 20 20 20 20  ql_trace",      
1160: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
1170: 5f 53 71 6c 54 72 61 63 65 20 20 20 20 20 20 7d  _SqlTrace      }
1180: 2c 0a 20 20 20 20 7b 20 22 76 64 62 65 5f 6c 69  ,.    { "vdbe_li
1190: 73 74 69 6e 67 22 2c 20 20 20 20 20 20 20 20 20  sting",         
11a0: 20 20 20 20 53 51 4c 49 54 45 5f 56 64 62 65 4c      SQLITE_VdbeL
11b0: 69 73 74 69 6e 67 20 20 20 7d 2c 0a 20 20 20 20  isting   },.    
11c0: 7b 20 22 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e  { "full_column_n
11d0: 61 6d 65 73 22 2c 20 20 20 20 20 20 20 20 53 51  ames",        SQ
11e0: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
11f0: 73 20 20 7d 2c 0a 20 20 20 20 7b 20 22 73 68 6f  s  },.    { "sho
1200: 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22  rt_column_names"
1210: 2c 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 53  ,       SQLITE_S
1220: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 7d 2c 0a  hortColNames },.
1230: 20 20 20 20 7b 20 22 63 6f 75 6e 74 5f 63 68 61      { "count_cha
1240: 6e 67 65 73 22 2c 20 20 20 20 20 20 20 20 20 20  nges",          
1250: 20 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f    SQLITE_CountRo
1260: 77 73 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20  ws     },.    { 
1270: 22 65 6d 70 74 79 5f 72 65 73 75 6c 74 5f 63 61  "empty_result_ca
1280: 6c 6c 62 61 63 6b 73 22 2c 20 20 20 53 51 4c 49  llbacks",   SQLI
1290: 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20  TE_NullCallback 
12a0: 20 7d 2c 0a 20 20 20 20 2f 2a 20 54 68 65 20 66   },.    /* The f
12b0: 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 56 45 52 59  ollowing is VERY
12c0: 20 65 78 70 65 72 69 6d 65 6e 74 61 6c 20 2a 2f   experimental */
12d0: 0a 20 20 20 20 7b 20 22 77 72 69 74 61 62 6c 65  .    { "writable
12e0: 5f 73 63 68 65 6d 61 22 2c 20 20 20 20 20 20 20  _schema",       
12f0: 20 20 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53     SQLITE_WriteS
1300: 63 68 65 6d 61 20 20 20 7d 2c 0a 20 20 20 20 7b  chema   },.    {
1310: 20 22 6f 6d 69 74 5f 72 65 61 64 6c 6f 63 6b 22   "omit_readlock"
1320: 2c 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  ,            SQL
1330: 49 54 45 5f 4e 6f 52 65 61 64 6c 6f 63 6b 20 20  ITE_NoReadlock  
1340: 20 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69 6e 74 20    },.  };.  int 
1350: 69 3b 0a 20 20 63 6f 6e 73 74 20 73 74 72 75 63  i;.  const struc
1360: 74 20 73 50 72 61 67 6d 61 54 79 70 65 20 2a 70  t sPragmaType *p
1370: 3b 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 3d 61  ;.  for(i=0, p=a
1380: 50 72 61 67 6d 61 3b 20 69 3c 73 69 7a 65 6f 66  Pragma; i<sizeof
1390: 28 61 50 72 61 67 6d 61 29 2f 73 69 7a 65 6f 66  (aPragma)/sizeof
13a0: 28 61 50 72 61 67 6d 61 5b 30 5d 29 3b 20 69 2b  (aPragma[0]); i+
13b0: 2b 2c 20 70 2b 2b 29 7b 0a 20 20 20 20 69 66 28  +, p++){.    if(
13c0: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
13d0: 7a 4c 65 66 74 2c 20 70 2d 3e 7a 4e 61 6d 65 29  zLeft, p->zName)
13e0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
13f0: 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73  ite3 *db = pPars
1400: 65 2d 3e 64 62 3b 0a 20 20 20 20 20 20 56 64 62  e->db;.      Vdb
1410: 65 20 2a 76 3b 0a 20 20 20 20 20 20 76 20 3d 20  e *v;.      v = 
1420: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
1430: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 69 66  Parse);.      if
1440: 28 20 76 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ( v ){.        i
1450: 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a  f( zRight==0 ){.
1460: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1470: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
1480: 2c 20 70 2d 3e 7a 4e 61 6d 65 2c 20 28 64 62 2d  , p->zName, (db-
1490: 3e 66 6c 61 67 73 20 26 20 70 2d 3e 6d 61 73 6b  >flags & p->mask
14a0: 29 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  )!=0 );.        
14b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
14c0: 20 69 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e 28   if( getBoolean(
14d0: 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20 20 20  zRight) ){.     
14e0: 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
14f0: 20 7c 3d 20 70 2d 3e 6d 61 73 6b 3b 0a 20 20 20   |= p->mask;.   
1500: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
1510: 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c            db->fl
1520: 61 67 73 20 26 3d 20 7e 70 2d 3e 6d 61 73 6b 3b  ags &= ~p->mask;
1530: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
1540: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f       }.        /
1550: 2a 20 49 66 20 6f 6e 65 20 6f 66 20 74 68 65 73  * If one of thes
1560: 65 20 70 72 61 67 6d 61 73 20 69 73 20 65 78 65  e pragmas is exe
1570: 63 75 74 65 64 2c 20 61 6e 79 20 70 72 65 70 61  cuted, any prepa
1580: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 0a 20  red statements. 
1590: 20 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74         ** need t
15a0: 6f 20 62 65 20 72 65 63 6f 6d 70 69 6c 65 64 2e  o be recompiled.
15b0: 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  .        */.    
15c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
15d0: 64 64 4f 70 28 76 2c 20 4f 50 5f 45 78 70 69 72  ddOp(v, OP_Expir
15e0: 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  e, 0, 0);.      
15f0: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  }.      return 1
1600: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
1610: 74 75 72 6e 20 30 3b 0a 7d 0a 23 65 6e 64 69 66  turn 0;.}.#endif
1620: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
1630: 46 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  FLAG_PRAGMAS */.
1640: 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61  ./*.** Process a
1650: 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e   pragma statemen
1660: 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d  t.  .**.** Pragm
1670: 61 73 20 61 72 65 20 6f 66 20 74 68 69 73 20 66  as are of this f
1680: 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  orm:.**.**      
1690: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
16a0: 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a  .]id [= value].*
16b0: 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74 69 66  *.** The identif
16c0: 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ier might also b
16d0: 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54 68 65  e a string.  The
16e0: 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69   value is a stri
16f0: 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74  ng, and.** ident
1700: 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62  ifier, or a numb
1710: 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c 61  er.  If minusFla
1720: 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  g is true, then 
1730: 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  the value is.** 
1740: 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20 77 61  a number that wa
1750: 73 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  s preceded by a 
1760: 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a  minus sign..**.*
1770: 2a 20 49 66 20 74 68 65 20 6c 65 66 74 20 73 69  * If the left si
1780: 64 65 20 69 73 20 22 64 61 74 61 62 61 73 65 2e  de is "database.
1790: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
17a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 61   the database na
17b0: 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20 69  me.** and pId2 i
17c0: 73 20 74 68 65 20 69 64 2e 20 20 49 66 20 74 68  s the id.  If th
17d0: 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 6a  e left side is j
17e0: 75 73 74 20 22 69 64 22 20 74 68 65 6e 20 70 49  ust "id" then pI
17f0: 64 31 20 69 73 20 74 68 65 0a 2a 2a 20 69 64 20  d1 is the.** id 
1800: 61 6e 64 20 70 49 64 32 20 69 73 20 61 6e 79 20  and pId2 is any 
1810: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f  empty string..*/
1820: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
1830: 67 6d 61 28 0a 20 20 50 61 72 73 65 20 2a 70 50  gma(.  Parse *pP
1840: 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a  arse, .  Token *
1850: 70 49 64 31 2c 20 20 20 20 20 20 20 20 2f 2a 20  pId1,        /* 
1860: 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 5b 64  First part of [d
1870: 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c  atabase.]id fiel
1880: 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49  d */.  Token *pI
1890: 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20 53 65  d2,        /* Se
18a0: 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b 64 61  cond part of [da
18b0: 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c 64  tabase.]id field
18c0: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 54  , or NULL */.  T
18d0: 6f 6b 65 6e 20 2a 70 56 61 6c 75 65 2c 20 20 20  oken *pValue,   
18e0: 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72 20     /* Token for 
18f0: 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c  <value>, or NULL
1900: 20 2a 2f 0a 20 20 69 6e 74 20 6d 69 6e 75 73 46   */.  int minusF
1910: 6c 61 67 20 20 20 20 20 20 20 2f 2a 20 54 72 75  lag       /* Tru
1920: 65 20 69 66 20 61 20 27 2d 27 20 73 69 67 6e 20  e if a '-' sign 
1930: 70 72 65 63 65 64 65 64 20 3c 76 61 6c 75 65 3e  preceded <value>
1940: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a   */.){.  char *z
1950: 4c 65 66 74 20 3d 20 30 3b 20 20 20 20 20 20 20  Left = 0;       
1960: 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  /* Nul-terminate
1970: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c  d UTF-8 string <
1980: 69 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  id> */.  char *z
1990: 52 69 67 68 74 20 3d 20 30 3b 20 20 20 20 20 20  Right = 0;      
19a0: 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  /* Nul-terminate
19b0: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c  d UTF-8 string <
19c0: 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20  value>, or NULL 
19d0: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
19e0: 2a 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 54  *zDb = 0;   /* T
19f0: 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
1a00: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64   */.  Token *pId
1a10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1a20: 50 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64 3e 20  Pointer to <id> 
1a30: 74 6f 6b 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  token */.  int i
1a40: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
1a50: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 6e    /* Database in
1a60: 64 65 78 20 66 6f 72 20 3c 64 61 74 61 62 61 73  dex for <databas
1a70: 65 3e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  e> */.  sqlite3 
1a80: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
1a90: 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 56  ;.  Db *pDb;.  V
1aa0: 64 62 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33  dbe *v = sqlite3
1ab0: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
1ac0: 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65  .  if( v==0 ) re
1ad0: 74 75 72 6e 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65  turn;..  /* Inte
1ae0: 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61 62  rpret the [datab
1af0: 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74 68  ase.] part of th
1b00: 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  e pragma stateme
1b10: 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20  nt. iDb is the. 
1b20: 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65   ** index of the
1b30: 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70   database this p
1b40: 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61  ragma is being a
1b50: 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e  pplied to in db.
1b60: 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20  aDb[]. */.  iDb 
1b70: 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  = sqlite3TwoPart
1b80: 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64  Name(pParse, pId
1b90: 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a  1, pId2, &pId);.
1ba0: 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65    if( iDb<0 ) re
1bb0: 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64  turn;.  pDb = &d
1bc0: 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20  b->aDb[iDb];..  
1bd0: 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33 4e  zLeft = sqlite3N
1be0: 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 70 49 64  ameFromToken(pId
1bf0: 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20  );.  if( !zLeft 
1c00: 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20  ) return;.  if( 
1c10: 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20  minusFlag ){.   
1c20: 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65   zRight = sqlite
1c30: 33 4d 50 72 69 6e 74 66 28 22 2d 25 54 22 2c 20  3MPrintf("-%T", 
1c40: 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65  pValue);.  }else
1c50: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73  {.    zRight = s
1c60: 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
1c70: 6b 65 6e 28 70 56 61 6c 75 65 29 3b 0a 20 20 7d  ken(pValue);.  }
1c80: 0a 0a 20 20 7a 44 62 20 3d 20 28 28 69 44 62 3e  ..  zDb = ((iDb>
1c90: 30 29 3f 70 44 62 2d 3e 7a 4e 61 6d 65 3a 30 29  0)?pDb->zName:0)
1ca0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 41  ;.  if( sqlite3A
1cb0: 75 74 68 43 68 65 63 6b 28 70 50 61 72 73 65 2c  uthCheck(pParse,
1cc0: 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20   SQLITE_PRAGMA, 
1cd0: 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a  zLeft, zRight, z
1ce0: 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  Db) ){.    goto 
1cf0: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
1d00: 20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45   .#ifndef SQLITE
1d10: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
1d20: 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  MAS.  /*.  **  P
1d30: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
1d40: 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  ]default_cache_s
1d50: 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ize.  **  PRAGMA
1d60: 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65 66 61   [database.]defa
1d70: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e  ult_cache_size=N
1d80: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
1d90: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
1da0: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 65  s the current pe
1db0: 72 73 69 73 74 65 6e 74 20 73 65 74 74 69 6e 67  rsistent setting
1dc0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61   for the.  ** pa
1dd0: 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 20  ge cache size.  
1de0: 54 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  The value return
1df0: 65 64 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75  ed is the maximu
1e00: 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  m number of.  **
1e10: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 70 61   pages in the pa
1e20: 67 65 20 63 61 63 68 65 2e 20 20 54 68 65 20 73  ge cache.  The s
1e30: 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20  econd form sets 
1e40: 62 6f 74 68 20 74 68 65 20 63 75 72 72 65 6e 74  both the current
1e50: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
1e60: 20 73 69 7a 65 20 76 61 6c 75 65 20 61 6e 64 20   size value and 
1e70: 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20 70  the persistent p
1e80: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76  age cache size v
1e90: 61 6c 75 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64  alue.  ** stored
1ea0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
1eb0: 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a   file..  **.  **
1ec0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   The default cac
1ed0: 68 65 20 73 69 7a 65 20 69 73 20 73 74 6f 72 65  he size is store
1ee0: 64 20 69 6e 20 6d 65 74 61 2d 76 61 6c 75 65 20  d in meta-value 
1ef0: 32 20 6f 66 20 70 61 67 65 20 31 20 6f 66 20 74  2 of page 1 of t
1f00: 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  he.  ** database
1f10: 20 66 69 6c 65 2e 20 20 54 68 65 20 63 61 63 68   file.  The cach
1f20: 65 20 73 69 7a 65 20 69 73 20 61 63 74 75 61 6c  e size is actual
1f30: 6c 79 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20  ly the absolute 
1f40: 76 61 6c 75 65 20 6f 66 0a 20 20 2a 2a 20 74 68  value of.  ** th
1f50: 69 73 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  is memory locati
1f60: 6f 6e 2e 20 20 54 68 65 20 73 69 67 6e 20 6f 66  on.  The sign of
1f70: 20 6d 65 74 61 2d 76 61 6c 75 65 20 32 20 64 65   meta-value 2 de
1f80: 74 65 72 6d 69 6e 65 73 20 74 68 65 0a 20 20 2a  termines the.  *
1f90: 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73 65  * synchronous se
1fa0: 74 74 69 6e 67 2e 20 20 41 20 6e 65 67 61 74 69  tting.  A negati
1fb0: 76 65 20 76 61 6c 75 65 20 6d 65 61 6e 73 20 73  ve value means s
1fc0: 79 6e 63 68 72 6f 6e 6f 75 73 20 69 73 20 6f 66  ynchronous is of
1fd0: 66 0a 20 20 2a 2a 20 61 6e 64 20 61 20 70 6f 73  f.  ** and a pos
1fe0: 69 74 69 76 65 20 76 61 6c 75 65 20 6d 65 61 6e  itive value mean
1ff0: 73 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 69 73  s synchronous is
2000: 20 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20   on..  */.  if( 
2010: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
2020: 4c 65 66 74 2c 22 64 65 66 61 75 6c 74 5f 63 61  Left,"default_ca
2030: 63 68 65 5f 73 69 7a 65 22 29 3d 3d 30 20 29 7b  che_size")==0 ){
2040: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
2050: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 67 65 74  t VdbeOpList get
2060: 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a  CacheSize[] = {.
2070: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
2080: 6f 6f 6b 69 65 2c 20 20 30 2c 20 32 2c 20 20 20  ookie,  0, 2,   
2090: 20 20 20 20 20 30 7d 2c 20 20 2f 2a 20 30 20 2a       0},  /* 0 *
20a0: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 41 62 73  /.      { OP_Abs
20b0: 56 61 6c 75 65 2c 20 20 20 20 30 2c 20 30 2c 20  Value,    0, 0, 
20c0: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
20d0: 20 7b 20 4f 50 5f 44 75 70 2c 20 20 20 20 20 20   { OP_Dup,      
20e0: 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20     0, 0,        
20f0: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49  0},.      { OP_I
2100: 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 30  nteger,     0, 0
2110: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
2120: 20 20 20 7b 20 4f 50 5f 4e 65 2c 20 20 20 20 20     { OP_Ne,     
2130: 20 20 20 20 20 30 2c 20 36 2c 20 20 20 20 20 20       0, 6,      
2140: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
2150: 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c  _Integer,     0,
2160: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   0,        0},  
2170: 2f 2a 20 35 20 2a 2f 0a 20 20 20 20 20 20 7b 20  /* 5 */.      { 
2180: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20  OP_Callback,    
2190: 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 0,        0},
21a0: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
21b0: 61 64 64 72 3b 0a 20 20 20 20 69 66 28 20 73 71  addr;.    if( sq
21c0: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
21d0: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
21e0: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 69  ragma_out;.    i
21f0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
2200: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
2210: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
2220: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
2230: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
2240: 30 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c  0, "cache_size",
2250: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P3_STATIC);.   
2260: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
2270: 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
2280: 2c 20 41 72 72 61 79 53 69 7a 65 28 67 65 74 43  , ArraySize(getC
2290: 61 63 68 65 53 69 7a 65 29 2c 20 67 65 74 43 61  acheSize), getCa
22a0: 63 68 65 53 69 7a 65 29 3b 0a 20 20 20 20 20 20  cheSize);.      
22b0: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
22c0: 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62  eP1(v, addr, iDb
22d0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
22e0: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
22f0: 61 64 64 72 2b 35 2c 20 4d 41 58 5f 50 41 47 45  addr+5, MAX_PAGE
2300: 53 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  S);.    }else{. 
2310: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
2320: 61 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  atoi(zRight);.  
2330: 20 20 20 20 69 66 28 20 73 69 7a 65 3c 30 20 29      if( size<0 )
2340: 20 73 69 7a 65 20 3d 20 2d 73 69 7a 65 3b 0a 20   size = -size;. 
2350: 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69       sqlite3Begi
2360: 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
2370: 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b  pParse, 0, iDb);
2380: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
2390: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e  beAddOp(v, OP_In
23a0: 74 65 67 65 72 2c 20 73 69 7a 65 2c 20 30 29 3b  teger, size, 0);
23b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
23c0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 52 65  beAddOp(v, OP_Re
23d0: 61 64 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 32  adCookie, iDb, 2
23e0: 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20  );.      addr = 
23f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
2400: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
2410: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  0, 0);.      sql
2420: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c  ite3VdbeAddOp(v,
2430: 20 4f 50 5f 47 65 2c 20 30 2c 20 61 64 64 72 2b   OP_Ge, 0, addr+
2440: 33 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  3);.      sqlite
2450: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
2460: 5f 4e 65 67 61 74 69 76 65 2c 20 30 2c 20 30 29  _Negative, 0, 0)
2470: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
2480: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53  dbeAddOp(v, OP_S
2490: 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 32  etCookie, iDb, 2
24a0: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 63 61  );.      pDb->ca
24b0: 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b  che_size = size;
24c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
24d0: 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28  reeSetCacheSize(
24e0: 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 63  pDb->pBt, pDb->c
24f0: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
2500: 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a  }.  }else..  /*.
2510: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
2520: 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a  tabase.]page_siz
2530: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
2540: 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73  database.]page_s
2550: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
2560: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
2570: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
2580: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
2590: 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  he.  ** database
25a0: 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79   page size in by
25b0: 74 65 73 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  tes.  The second
25c0: 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65 0a 20   form sets the. 
25d0: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67   ** database pag
25e0: 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 54  e size value.  T
25f0: 68 65 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c  he value can onl
2600: 79 20 62 65 20 73 65 74 20 69 66 0a 20 20 2a 2a  y be set if.  **
2610: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
2620: 73 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63  s not yet been c
2630: 72 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 69  reated..  */.  i
2640: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
2650: 70 28 7a 4c 65 66 74 2c 22 70 61 67 65 5f 73 69  p(zLeft,"page_si
2660: 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 42  ze")==0 ){.    B
2670: 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d  tree *pBt = pDb-
2680: 3e 70 42 74 3b 0a 20 20 20 20 69 66 28 20 21 7a  >pBt;.    if( !z
2690: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
26a0: 6e 74 20 73 69 7a 65 20 3d 20 70 42 74 20 3f 20  nt size = pBt ? 
26b0: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 50  sqlite3BtreeGetP
26c0: 61 67 65 53 69 7a 65 28 70 42 74 29 20 3a 20 30  ageSize(pBt) : 0
26d0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  ;.      returnSi
26e0: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
26f0: 22 70 61 67 65 5f 73 69 7a 65 22 2c 20 73 69 7a  "page_size", siz
2700: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
2710: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
2720: 65 53 65 74 50 61 67 65 53 69 7a 65 28 70 42 74  eSetPageSize(pBt
2730: 2c 20 61 74 6f 69 28 7a 52 69 67 68 74 29 2c 20  , atoi(zRight), 
2740: 2d 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  -1);.    }.  }el
2750: 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  se.#endif /* SQL
2760: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
2770: 52 41 47 4d 41 53 20 2a 2f 0a 0a 20 20 2f 2a 0a  RAGMAS */..  /*.
2780: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
2790: 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63  tabase.]auto_vac
27a0: 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  uum.  **  PRAGMA
27b0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75 74 6f   [database.]auto
27c0: 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20  _vacuum=N.  **. 
27d0: 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74   ** Get or set t
27e0: 68 65 20 28 62 6f 6f 6c 65 61 6e 29 20 76 61 6c  he (boolean) val
27f0: 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ue of the databa
2800: 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27  se 'auto-vacuum'
2810: 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2f   parameter..  */
2820: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2830: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
2840: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
2850: 49 43 6d 70 28 7a 4c 65 66 74 2c 22 61 75 74 6f  ICmp(zLeft,"auto
2860: 5f 76 61 63 75 75 6d 22 29 3d 3d 30 20 29 7b 0a  _vacuum")==0 ){.
2870: 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d      Btree *pBt =
2880: 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69   pDb->pBt;.    i
2890: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
28a0: 20 20 20 20 69 6e 74 20 61 75 74 6f 5f 76 61 63      int auto_vac
28b0: 75 75 6d 20 3d 20 0a 20 20 20 20 20 20 20 20 20  uum = .         
28c0: 20 70 42 74 20 3f 20 73 71 6c 69 74 65 33 42 74   pBt ? sqlite3Bt
28d0: 72 65 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d  reeGetAutoVacuum
28e0: 28 70 42 74 29 20 3a 20 53 51 4c 49 54 45 5f 44  (pBt) : SQLITE_D
28f0: 45 46 41 55 4c 54 5f 41 55 54 4f 56 41 43 55 55  EFAULT_AUTOVACUU
2900: 4d 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  M;.      returnS
2910: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
2920: 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 22 2c 20   "auto_vacuum", 
2930: 61 75 74 6f 5f 76 61 63 75 75 6d 29 3b 0a 20 20  auto_vacuum);.  
2940: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
2950: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 41 75  qlite3BtreeSetAu
2960: 74 6f 56 61 63 75 75 6d 28 70 42 74 2c 20 67 65  toVacuum(pBt, ge
2970: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 29  tBoolean(zRight)
2980: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
2990: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
29a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
29b0: 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a  ER_PRAGMAS.  /*.
29c0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
29d0: 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69  tabase.]cache_si
29e0: 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  ze.  **  PRAGMA 
29f0: 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65  [database.]cache
2a00: 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  _size=N.  **.  *
2a10: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
2a20: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
2a30: 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69  rent local setti
2a40: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
2a50: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e  page cache size.
2a60: 20 20 54 68 65 20 6c 6f 63 61 6c 20 73 65 74 74    The local sett
2a70: 69 6e 67 20 63 61 6e 20 62 65 20 64 69 66 66 65  ing can be diffe
2a80: 72 65 6e 74 20 66 72 6f 6d 0a 20 20 2a 2a 20 74  rent from.  ** t
2a90: 68 65 20 70 65 72 73 69 73 74 65 6e 74 20 63 61  he persistent ca
2aa0: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 20 74  che size value t
2ab0: 68 61 74 20 69 73 20 73 74 6f 72 65 64 20 69 6e  hat is stored in
2ac0: 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20   the database.  
2ad0: 2a 2a 20 66 69 6c 65 20 69 74 73 65 6c 66 2e 20  ** file itself. 
2ae0: 20 54 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   The value retur
2af0: 6e 65 64 20 69 73 20 74 68 65 20 6d 61 78 69 6d  ned is the maxim
2b00: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a  um number of.  *
2b10: 2a 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 70  * pages in the p
2b20: 61 67 65 20 63 61 63 68 65 2e 20 20 54 68 65 20  age cache.  The 
2b30: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73  second form sets
2b40: 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a 2a 20   the local.  ** 
2b50: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20  page cache size 
2b60: 76 61 6c 75 65 2e 20 20 49 74 20 64 6f 65 73 20  value.  It does 
2b70: 6e 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 70  not change the p
2b80: 65 72 73 69 73 74 65 6e 74 0a 20 20 2a 2a 20 63  ersistent.  ** c
2b90: 61 63 68 65 20 73 69 7a 65 20 73 74 6f 72 65 64  ache size stored
2ba0: 20 6f 6e 20 74 68 65 20 64 69 73 6b 20 73 6f 20   on the disk so 
2bb0: 74 68 65 20 63 61 63 68 65 20 73 69 7a 65 20 77  the cache size w
2bc0: 69 6c 6c 20 72 65 76 65 72 74 0a 20 20 2a 2a 20  ill revert.  ** 
2bd0: 74 6f 20 69 74 73 20 64 65 66 61 75 6c 74 20 76  to its default v
2be0: 61 6c 75 65 20 77 68 65 6e 20 74 68 65 20 64 61  alue when the da
2bf0: 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
2c00: 20 61 6e 64 20 72 65 6f 70 65 6e 65 64 2e 0a 20   and reopened.. 
2c10: 20 2a 2a 20 4e 20 73 68 6f 75 6c 64 20 62 65 20   ** N should be 
2c20: 61 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  a positive integ
2c30: 65 72 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  er..  */.  if( s
2c40: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
2c50: 65 66 74 2c 22 63 61 63 68 65 5f 73 69 7a 65 22  eft,"cache_size"
2c60: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )==0 ){.    if( 
2c70: 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
2c80: 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f  a(pParse) ) goto
2c90: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
2ca0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
2cb0: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
2cc0: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 63  leInt(pParse, "c
2cd0: 61 63 68 65 5f 73 69 7a 65 22 2c 20 70 44 62 2d  ache_size", pDb-
2ce0: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
2cf0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
2d00: 6e 74 20 73 69 7a 65 20 3d 20 61 74 6f 69 28 7a  nt size = atoi(z
2d10: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 69 66  Right);.      if
2d20: 28 20 73 69 7a 65 3c 30 20 29 20 73 69 7a 65 20  ( size<0 ) size 
2d30: 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20 20 20 70  = -size;.      p
2d40: 44 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d  Db->cache_size =
2d50: 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c   size;.      sql
2d60: 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
2d70: 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20  eSize(pDb->pBt, 
2d80: 70 44 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29  pDb->cache_size)
2d90: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
2da0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
2db0: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20  GMA temp_store. 
2dc0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d   **   PRAGMA tem
2dd0: 70 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61 75  p_store = "defau
2de0: 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69  lt"|"memory"|"fi
2df0: 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  le".  **.  ** Re
2e00: 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20  turn or set the 
2e10: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  local value of t
2e20: 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c  he temp_store fl
2e30: 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20  ag.  Changing.  
2e40: 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  ** the local val
2e50: 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65  ue does not make
2e60: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
2e70: 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68  disk file and th
2e80: 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 76  e default.  ** v
2e90: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73  alue will be res
2ea0: 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74  tored the next t
2eb0: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
2ec0: 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a   is opened..  **
2ed0: 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  .  ** Note that 
2ee0: 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 66  it is possible f
2ef0: 6f 72 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  or the library c
2f00: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
2f10: 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72  ons to.  ** over
2f20: 72 69 64 65 20 74 68 69 73 20 73 65 74 74 69 6e  ride this settin
2f30: 67 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c  g.  */.  if( sql
2f40: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66  ite3StrICmp(zLef
2f50: 74 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 29  t, "temp_store")
2f60: 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 21  ==0 ){.    if( !
2f70: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
2f80: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
2f90: 70 50 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74  pParse, "temp_st
2fa0: 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73  ore", db->temp_s
2fb0: 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  tore);.    }else
2fc0: 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54 65  {.      changeTe
2fd0: 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65  mpStorage(pParse
2fe0: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d  , zRight);.    }
2ff0: 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20  .  }else..  /*. 
3000: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d   **   PRAGMA tem
3010: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
3020: 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  y.  **   PRAGMA 
3030: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
3040: 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65 63  tory = ""|"direc
3050: 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a  tory_name".  **.
3060: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
3070: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
3080: 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73  ue of the temp_s
3090: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 66  tore_directory f
30a0: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
30b0: 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65   ** the value se
30c0: 74 73 20 61 20 73 70 65 63 69 66 69 63 20 64 69  ts a specific di
30d0: 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73  rectory to be us
30e0: 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
30f0: 20 66 69 6c 65 73 2e 0a 20 20 2a 2a 20 53 65 74   files..  ** Set
3100: 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73  ting to a null s
3110: 74 72 69 6e 67 20 72 65 76 65 72 74 73 20 74 6f  tring reverts to
3120: 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 6d   the default tem
3130: 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79  porary directory
3140: 20 73 65 61 72 63 68 2e 0a 20 20 2a 2a 20 49 66   search..  ** If
3150: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
3160: 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 2c  tory is changed,
3170: 20 74 68 65 6e 20 69 6e 76 61 6c 69 64 61 74 65   then invalidate
3180: 54 65 6d 70 53 74 6f 72 61 67 65 2e 0a 20 20 2a  TempStorage..  *
3190: 2a 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c  *.  */.  if( sql
31a0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66  ite3StrICmp(zLef
31b0: 74 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64  t, "temp_store_d
31c0: 69 72 65 63 74 6f 72 79 22 29 3d 3d 30 20 29 7b  irectory")==0 ){
31d0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
31e0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
31f0: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
3200: 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20  tory ){.        
3210: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
3220: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
3230: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
3240: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
3250: 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72   "temp_store_dir
3260: 65 63 74 6f 72 79 22 2c 20 50 33 5f 53 54 41 54  ectory", P3_STAT
3270: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
3280: 69 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f  ite3VdbeOp3(v, O
3290: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 30 2c  P_String8, 0, 0,
32a0: 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69   sqlite3_temp_di
32b0: 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20  rectory, 0);.   
32c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
32d0: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c  AddOp(v, OP_Call
32e0: 62 61 63 6b 2c 20 31 2c 20 30 29 3b 0a 20 20 20  back, 1, 0);.   
32f0: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
3300: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
3310: 5b 30 5d 20 26 26 20 21 73 71 6c 69 74 65 33 4f  [0] && !sqlite3O
3320: 73 49 73 44 69 72 57 72 69 74 61 62 6c 65 28 7a  sIsDirWritable(z
3330: 52 69 67 68 74 29 20 29 7b 0a 20 20 20 20 20 20  Right) ){.      
3340: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
3350: 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61  g(pParse, "not a
3360: 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74   writable direct
3370: 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 67  ory");.        g
3380: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
3390: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
33a0: 28 20 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a  ( TEMP_STORE==0.
33b0: 20 20 20 20 20 20 20 7c 7c 20 28 54 45 4d 50 5f         || (TEMP_
33c0: 53 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d 3e  STORE==1 && db->
33d0: 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a 20  temp_store<=1). 
33e0: 20 20 20 20 20 20 7c 7c 20 28 54 45 4d 50 5f 53        || (TEMP_S
33f0: 54 4f 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74  TORE==2 && db->t
3400: 65 6d 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20  emp_store==1).  
3410: 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69      ){.        i
3420: 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f  nvalidateTempSto
3430: 72 61 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20  rage(pParse);.  
3440: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
3450: 74 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 74  teFree(sqlite3_t
3460: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  emp_directory);.
3470: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
3480: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  [0] ){.        s
3490: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
34a0: 63 74 6f 72 79 20 3d 20 7a 52 69 67 68 74 3b 0a  ctory = zRight;.
34b0: 20 20 20 20 20 20 20 20 7a 52 69 67 68 74 20 3d          zRight =
34c0: 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
34d0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
34e0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
34f0: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  = 0;.      }.   
3500: 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a   }.  }else..  /*
3510: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
3520: 64 61 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72  database.]synchr
3530: 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20 20 50 52 41  onous.  **   PRA
3540: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
3550: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 7c 4f  ynchronous=OFF|O
3560: 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c 0a 20 20  N|NORMAL|FULL.  
3570: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
3580: 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20  r set the local 
3590: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 79 6e  value of the syn
35a0: 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20  chronous flag.  
35b0: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
35c0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f  e local value do
35d0: 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e  es not make chan
35e0: 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20  ges to the disk 
35f0: 66 69 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 2a  file and the.  *
3600: 2a 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * default value 
3610: 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64  will be restored
3620: 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74   the next time t
3630: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 0a 20  he database is. 
3640: 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f   ** opened..  */
3650: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  .  if( sqlite3St
3660: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 73 79 6e  rICmp(zLeft,"syn
3670: 63 68 72 6f 6e 6f 75 73 22 29 3d 3d 30 20 29 7b  chronous")==0 ){
3680: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
3690: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
36a0: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
36b0: 5f 6f 75 74 3b 0a 20 20 20 20 69 66 28 20 21 7a  _out;.    if( !z
36c0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
36d0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
36e0: 50 61 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e  Parse, "synchron
36f0: 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74  ous", pDb->safet
3700: 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20  y_level-1);.    
3710: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28  }else{.      if(
3720: 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
3730: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
3740: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
3750: 73 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  se, .           
3760: 20 22 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d   "Safety level m
3770: 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65  ay not be change
3780: 64 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73  d inside a trans
3790: 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20  action");.      
37a0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
37b0: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
37c0: 20 3d 20 67 65 74 53 61 66 65 74 79 4c 65 76 65   = getSafetyLeve
37d0: 6c 28 7a 52 69 67 68 74 29 2b 31 3b 0a 20 20 20  l(zRight)+1;.   
37e0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
37f0: 65 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28  eSetSafetyLevel(
3800: 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 73  pDb->pBt, pDb->s
3810: 61 66 65 74 79 5f 6c 65 76 65 6c 29 3b 0a 20 20  afety_level);.  
3820: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
3830: 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  lse.#endif /* SQ
3840: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
3850: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
3860: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3870: 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20 20 69  FLAG_PRAGMAS.  i
3880: 66 28 20 66 6c 61 67 50 72 61 67 6d 61 28 70 50  f( flagPragma(pP
3890: 61 72 73 65 2c 20 7a 4c 65 66 74 2c 20 7a 52 69  arse, zLeft, zRi
38a0: 67 68 74 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54  ght) ){.    /* T
38b0: 68 65 20 66 6c 61 67 50 72 61 67 6d 61 28 29 20  he flagPragma() 
38c0: 73 75 62 72 6f 75 74 69 6e 65 20 61 6c 73 6f 20  subroutine also 
38d0: 67 65 6e 65 72 61 74 65 73 20 61 6e 79 20 6e 65  generates any ne
38e0: 63 65 73 73 61 72 79 20 63 6f 64 65 0a 20 20 20  cessary code.   
38f0: 20 2a 2a 20 74 68 65 72 65 20 69 73 20 6e 6f 74   ** there is not
3900: 68 69 6e 67 20 6d 6f 72 65 20 74 6f 20 64 6f 20  hing more to do 
3910: 68 65 72 65 20 2a 2f 0a 20 20 7d 65 6c 73 65 0a  here */.  }else.
3920: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
3930: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
3940: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
3950: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
3960: 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20  A_PRAGMAS.  /*. 
3970: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 61 62   **   PRAGMA tab
3980: 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29  le_info(<table>)
3990: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
39a0: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 66  n a single row f
39b0: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  or each column o
39c0: 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  f the named tabl
39d0: 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  e. The columns o
39e0: 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74 75 72  f.  ** the retur
39f0: 6e 65 64 20 64 61 74 61 20 73 65 74 20 61 72 65  ned data set are
3a00: 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a  :.  **.  ** cid:
3a10: 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69          Column i
3a20: 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d  d (numbered from
3a30: 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2c 20   left to right, 
3a40: 73 74 61 72 74 69 6e 67 20 61 74 20 30 29 0a 20  starting at 0). 
3a50: 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20 20 20   ** name:       
3a60: 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a  Column name.  **
3a70: 20 74 79 70 65 3a 20 20 20 20 20 20 20 43 6f 6c   type:       Col
3a80: 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  umn declaration 
3a90: 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75  type..  ** notnu
3aa0: 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66 20 27  ll:    True if '
3ab0: 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70 61 72  NOT NULL' is par
3ac0: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c  t of column decl
3ad0: 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c  aration.  ** dfl
3ae0: 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64 65 66  t_value: The def
3af0: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
3b00: 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e  he column, if an
3b10: 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73 71  y..  */.  if( sq
3b20: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
3b30: 66 74 2c 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22  ft, "table_info"
3b40: 29 3d 3d 30 20 26 26 20 7a 52 69 67 68 74 20 29  )==0 && zRight )
3b50: 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  {.    Table *pTa
3b60: 62 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  b;.    if( sqlit
3b70: 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61  e3ReadSchema(pPa
3b80: 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67  rse) ) goto prag
3b90: 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 70 54 61 62  ma_out;.    pTab
3ba0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
3bb0: 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  ble(db, zRight, 
3bc0: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
3bd0: 61 62 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  ab ){.      int 
3be0: 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  i;.      sqlite3
3bf0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
3c00: 2c 20 36 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 6);.      sqli
3c10: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
3c20: 65 28 76 2c 20 30 2c 20 22 63 69 64 22 2c 20 50  e(v, 0, "cid", P
3c30: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
3c40: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
3c50: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 22 6e 61  olName(v, 1, "na
3c60: 6d 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  me", P3_STATIC);
3c70: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
3c80: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
3c90: 32 2c 20 22 74 79 70 65 22 2c 20 50 33 5f 53 54  2, "type", P3_ST
3ca0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
3cb0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
3cc0: 6d 65 28 76 2c 20 33 2c 20 22 6e 6f 74 6e 75 6c  me(v, 3, "notnul
3cd0: 6c 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  l", P3_STATIC);.
3ce0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
3cf0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34  eSetColName(v, 4
3d00: 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20  , "dflt_value", 
3d10: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
3d20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
3d30: 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 22 70  ColName(v, 5, "p
3d40: 6b 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  k", P3_STATIC);.
3d50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 69 65        sqlite3Vie
3d60: 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
3d70: 70 50 61 72 73 65 2c 20 70 54 61 62 29 3b 0a 20  pParse, pTab);. 
3d80: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
3d90: 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 29  pTab->nCol; i++)
3da0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
3db0: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
3dc0: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 30 29 3b  _Integer, i, 0);
3dd0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
3de0: 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74  VdbeOp3(v, OP_St
3df0: 72 69 6e 67 38 2c 20 30 2c 20 30 2c 20 70 54 61  ring8, 0, 0, pTa
3e00: 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 7a 4e 61 6d 65  b->aCol[i].zName
3e10: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
3e20: 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20  lite3VdbeOp3(v, 
3e30: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 30  OP_String8, 0, 0
3e40: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 54 61  ,.           pTa
3e50: 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 7a 54 79 70 65  b->aCol[i].zType
3e60: 20 3f 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 5d   ? pTab->aCol[i]
3e70: 2e 7a 54 79 70 65 20 3a 20 22 6e 75 6d 65 72 69  .zType : "numeri
3e80: 63 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  c", 0);.        
3e90: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
3ea0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
3eb0: 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 6e 6f  pTab->aCol[i].no
3ec0: 74 4e 75 6c 6c 2c 20 30 29 3b 0a 20 20 20 20 20  tNull, 0);.     
3ed0: 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f     sqlite3ExprCo
3ee0: 64 65 28 70 50 61 72 73 65 2c 20 70 54 61 62 2d  de(pParse, pTab-
3ef0: 3e 61 43 6f 6c 5b 69 5d 2e 70 44 66 6c 74 29 3b  >aCol[i].pDflt);
3f00: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
3f10: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
3f20: 49 6e 74 65 67 65 72 2c 20 70 54 61 62 2d 3e 61  Integer, pTab->a
3f30: 43 6f 6c 5b 69 5d 2e 69 73 50 72 69 6d 4b 65 79  Col[i].isPrimKey
3f40: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
3f50: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76  lite3VdbeAddOp(v
3f60: 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 36  , OP_Callback, 6
3f70: 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 0);.      }.  
3f80: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69    }.  }else..  i
3f90: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
3fa0: 70 28 7a 4c 65 66 74 2c 20 22 69 6e 64 65 78 5f  p(zLeft, "index_
3fb0: 69 6e 66 6f 22 29 3d 3d 30 20 26 26 20 7a 52 69  info")==0 && zRi
3fc0: 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78  ght ){.    Index
3fd0: 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c   *pIdx;.    Tabl
3fe0: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 69 66 28  e *pTab;.    if(
3ff0: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
4000: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
4010: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
4020: 20 20 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33    pIdx = sqlite3
4030: 46 69 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52  FindIndex(db, zR
4040: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
4050: 69 66 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20  if( pIdx ){.    
4060: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 70    int i;.      p
4070: 54 61 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62  Tab = pIdx->pTab
4080: 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  le;.      sqlite
4090: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
40a0: 76 2c 20 33 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 3);.      sql
40b0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
40c0: 6d 65 28 76 2c 20 30 2c 20 22 73 65 71 6e 6f 22  me(v, 0, "seqno"
40d0: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
40e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
40f0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
4100: 22 63 69 64 22 2c 20 50 33 5f 53 54 41 54 49 43  "cid", P3_STATIC
4110: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
4120: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
4130: 2c 20 32 2c 20 22 6e 61 6d 65 22 2c 20 50 33 5f  , 2, "name", P3_
4140: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 66  STATIC);.      f
4150: 6f 72 28 69 3d 30 3b 20 69 3c 70 49 64 78 2d 3e  or(i=0; i<pIdx->
4160: 6e 43 6f 6c 75 6d 6e 3b 20 69 2b 2b 29 7b 0a 20  nColumn; i++){. 
4170: 20 20 20 20 20 20 20 69 6e 74 20 63 6e 75 6d 20         int cnum 
4180: 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e  = pIdx->aiColumn
4190: 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  [i];.        sql
41a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c  ite3VdbeAddOp(v,
41b0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20   OP_Integer, i, 
41c0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
41d0: 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20  te3VdbeAddOp(v, 
41e0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 63 6e 75 6d  OP_Integer, cnum
41f0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 61 73  , 0);.        as
4200: 73 65 72 74 28 20 70 54 61 62 2d 3e 6e 43 6f 6c  sert( pTab->nCol
4210: 3e 63 6e 75 6d 20 29 3b 0a 20 20 20 20 20 20 20  >cnum );.       
4220: 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33 28   sqlite3VdbeOp3(
4230: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
4240: 2c 20 30 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b  , 0, pTab->aCol[
4250: 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b  cnum].zName, 0);
4260: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4270: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
4280: 43 61 6c 6c 62 61 63 6b 2c 20 33 2c 20 30 29 3b  Callback, 3, 0);
4290: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
42a0: 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 73 71   }else..  if( sq
42b0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
42c0: 66 74 2c 20 22 69 6e 64 65 78 5f 6c 69 73 74 22  ft, "index_list"
42d0: 29 3d 3d 30 20 26 26 20 7a 52 69 67 68 74 20 29  )==0 && zRight )
42e0: 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
42f0: 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  x;.    Table *pT
4300: 61 62 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69  ab;.    if( sqli
4310: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
4320: 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
4330: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 70 54 61  gma_out;.    pTa
4340: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
4350: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
4360: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
4370: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  Tab ){.      v =
4380: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
4390: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70  pParse);.      p
43a0: 49 64 78 20 3d 20 70 54 61 62 2d 3e 70 49 6e 64  Idx = pTab->pInd
43b0: 65 78 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49  ex;.      if( pI
43c0: 64 78 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  dx ){.        in
43d0: 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20  t i = 0; .      
43e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
43f0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20  NumCols(v, 3);. 
4400: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
4410: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
4420: 30 2c 20 22 73 65 71 22 2c 20 50 33 5f 53 54 41  0, "seq", P3_STA
4430: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
4440: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
4450: 61 6d 65 28 76 2c 20 31 2c 20 22 6e 61 6d 65 22  ame(v, 1, "name"
4460: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
4470: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4480: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
4490: 2c 20 22 75 6e 69 71 75 65 22 2c 20 50 33 5f 53  , "unique", P3_S
44a0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
44b0: 77 68 69 6c 65 28 70 49 64 78 29 7b 0a 20 20 20  while(pIdx){.   
44c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
44d0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e  beAddOp(v, OP_In
44e0: 74 65 67 65 72 2c 20 69 2c 20 30 29 3b 0a 20 20  teger, i, 0);.  
44f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
4500: 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72  dbeOp3(v, OP_Str
4510: 69 6e 67 38 2c 20 30 2c 20 30 2c 20 70 49 64 78  ing8, 0, 0, pIdx
4520: 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ->zName, 0);.   
4530: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
4540: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e  beAddOp(v, OP_In
4550: 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 6f 6e 45  teger, pIdx->onE
4560: 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 2c 20 30  rror!=OE_None, 0
4570: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
4580: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c  ite3VdbeAddOp(v,
4590: 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 33 2c   OP_Callback, 3,
45a0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2b   0);.          +
45b0: 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70 49  +i;.          pI
45c0: 64 78 20 3d 20 70 49 64 78 2d 3e 70 4e 65 78 74  dx = pIdx->pNext
45d0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
45e0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73    }.    }.  }els
45f0: 65 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  e..  if( sqlite3
4600: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
4610: 64 61 74 61 62 61 73 65 5f 6c 69 73 74 22 29 3d  database_list")=
4620: 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  =0 ){.    int i;
4630: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
4640: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
4650: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
4660: 5f 6f 75 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  _out;.    sqlite
4670: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
4680: 76 2c 20 33 29 3b 0a 20 20 20 20 73 71 6c 69 74  v, 3);.    sqlit
4690: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
46a0: 28 76 2c 20 30 2c 20 22 73 65 71 22 2c 20 50 33  (v, 0, "seq", P3
46b0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
46c0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
46d0: 61 6d 65 28 76 2c 20 31 2c 20 22 6e 61 6d 65 22  ame(v, 1, "name"
46e0: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
46f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
4700: 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 22 66  ColName(v, 2, "f
4710: 69 6c 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29  ile", P3_STATIC)
4720: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
4730: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
4740: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
4750: 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f  b[i].pBt==0 ) co
4760: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73  ntinue;.      as
4770: 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d  sert( db->aDb[i]
4780: 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20  .zName!=0 );.   
4790: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
47a0: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
47b0: 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20 20 20 20  r, i, 0);.      
47c0: 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76  sqlite3VdbeOp3(v
47d0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
47e0: 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a   0, db->aDb[i].z
47f0: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
4800: 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76  sqlite3VdbeOp3(v
4810: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
4820: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 73   0,.           s
4830: 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 46 69  qlite3BtreeGetFi
4840: 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69  lename(db->aDb[i
4850: 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20 20 20 20  ].pBt), 0);.    
4860: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
4870: 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63  Op(v, OP_Callbac
4880: 6b 2c 20 33 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  k, 3, 0);.    }.
4890: 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28 20 73    }else..  if( s
48a0: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
48b0: 65 66 74 2c 20 22 63 6f 6c 6c 61 74 69 6f 6e 5f  eft, "collation_
48c0: 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  list")==0 ){.   
48d0: 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20   int i = 0;.    
48e0: 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20  HashElem *p;.   
48f0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
4900: 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20  umCols(v, 2);.  
4910: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
4920: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 22 73  ColName(v, 0, "s
4930: 65 71 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  eq", P3_STATIC);
4940: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4950: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
4960: 20 22 6e 61 6d 65 22 2c 20 50 33 5f 53 54 41 54   "name", P3_STAT
4970: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73  IC);.    for(p=s
4980: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
4990: 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70  db->aCollSeq); p
49a0: 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; p=sqliteHashNe
49b0: 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f  xt(p)){.      Co
49c0: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28  llSeq *pColl = (
49d0: 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65  CollSeq *)sqlite
49e0: 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20  HashData(p);.   
49f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
4a00: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
4a10: 72 2c 20 69 2b 2b 2c 20 30 29 3b 0a 20 20 20 20  r, i++, 0);.    
4a20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33    sqlite3VdbeOp3
4a30: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
4a40: 30 2c 20 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61  0, 0, pColl->zNa
4a50: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  me, 0);.      sq
4a60: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76  lite3VdbeAddOp(v
4a70: 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 32  , OP_Callback, 2
4a80: 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  , 0);.    }.  }e
4a90: 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  lse.#endif /* SQ
4aa0: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
4ab0: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
4ac0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4ad0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 69  _FOREIGN_KEY.  i
4ae0: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
4af0: 70 28 7a 4c 65 66 74 2c 20 22 66 6f 72 65 69 67  p(zLeft, "foreig
4b00: 6e 5f 6b 65 79 5f 6c 69 73 74 22 29 3d 3d 30 20  n_key_list")==0 
4b10: 26 26 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  && zRight ){.   
4b20: 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20   FKey *pFK;.    
4b30: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
4b40: 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
4b50: 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
4b60: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
4b70: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
4b80: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
4b90: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
4ba0: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
4bb0: 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
4bc0: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
4bd0: 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54  ;.      pFK = pT
4be0: 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20  ab->pFKey;.     
4bf0: 20 69 66 28 20 70 46 4b 20 29 7b 0a 20 20 20 20   if( pFK ){.    
4c00: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a      int i = 0; .
4c10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
4c20: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
4c30: 20 35 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   5);.        sql
4c40: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
4c50: 6d 65 28 76 2c 20 30 2c 20 22 69 64 22 2c 20 50  me(v, 0, "id", P
4c60: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
4c70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4c80: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 22  tColName(v, 1, "
4c90: 73 65 71 22 2c 20 50 33 5f 53 54 41 54 49 43 29  seq", P3_STATIC)
4ca0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
4cb0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
4cc0: 76 2c 20 32 2c 20 22 74 61 62 6c 65 22 2c 20 50  v, 2, "table", P
4cd0: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
4ce0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4cf0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 22  tColName(v, 3, "
4d00: 66 72 6f 6d 22 2c 20 50 33 5f 53 54 41 54 49 43  from", P3_STATIC
4d10: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
4d20: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
4d30: 28 76 2c 20 34 2c 20 22 74 6f 22 2c 20 50 33 5f  (v, 4, "to", P3_
4d40: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
4d50: 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a 20 20 20   while(pFK){.   
4d60: 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20         int j;.  
4d70: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b          for(j=0;
4d80: 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b   j<pFK->nCol; j+
4d90: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
4da0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
4db0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
4dc0: 69 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  i, 0);.         
4dd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
4de0: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
4df0: 72 2c 20 6a 2c 20 30 29 3b 0a 20 20 20 20 20 20  r, j, 0);.      
4e00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4e10: 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e  eOp3(v, OP_Strin
4e20: 67 38 2c 20 30 2c 20 30 2c 20 70 46 4b 2d 3e 7a  g8, 0, 0, pFK->z
4e30: 54 6f 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  To, 0);.        
4e40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f      sqlite3VdbeO
4e50: 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p3(v, OP_String8
4e60: 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 0, 0,.        
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e80: 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b       pTab->aCol[
4e90: 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72  pFK->aCol[j].iFr
4ea0: 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  om].zName, 0);. 
4eb0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
4ec0: 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f  e3VdbeOp3(v, OP_
4ed0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 30 2c 20 70  String8, 0, 0, p
4ee0: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c  FK->aCol[j].zCol
4ef0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
4f00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
4f10: 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63  Op(v, OP_Callbac
4f20: 6b 2c 20 35 2c 20 30 29 3b 0a 20 20 20 20 20 20  k, 5, 0);.      
4f30: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
4f40: 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70  ++i;.          p
4f50: 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46  FK = pFK->pNextF
4f60: 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  rom;.        }. 
4f70: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
4f80: 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 21  else.#endif /* !
4f90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
4fa0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
4fb0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45   */..#ifndef NDE
4fc0: 42 55 47 0a 20 20 69 66 28 20 73 71 6c 69 74 65  BUG.  if( sqlite
4fd0: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
4fe0: 22 70 61 72 73 65 72 5f 74 72 61 63 65 22 29 3d  "parser_trace")=
4ff0: 3d 30 20 29 7b 0a 20 20 20 20 65 78 74 65 72 6e  =0 ){.    extern
5000: 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72   void sqlite3Par
5010: 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20  serTrace(FILE*, 
5020: 63 68 61 72 20 2a 29 3b 0a 20 20 20 20 69 66 28  char *);.    if(
5030: 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67   getBoolean(zRig
5040: 68 74 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ht) ){.      sql
5050: 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
5060: 73 74 64 6f 75 74 2c 20 22 70 61 72 73 65 72 3a  stdout, "parser:
5070: 20 22 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a   ");.    }else{.
5080: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72        sqlite3Par
5090: 73 65 72 54 72 61 63 65 28 30 2c 20 30 29 3b 0a  serTrace(0, 0);.
50a0: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65      }.  }else.#e
50b0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
50c0: 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
50d0: 49 54 59 5f 43 48 45 43 4b 0a 20 20 69 66 28 20  ITY_CHECK.  if( 
50e0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
50f0: 4c 65 66 74 2c 20 22 69 6e 74 65 67 72 69 74 79  Left, "integrity
5100: 5f 63 68 65 63 6b 22 29 3d 3d 30 20 29 7b 0a 20  _check")==0 ){. 
5110: 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64     int i, j, add
5120: 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20  r;..    /* Code 
5130: 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a 65 73  that initializes
5140: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 63   the integrity c
5150: 68 65 63 6b 20 70 72 6f 67 72 61 6d 2e 20 20 53  heck program.  S
5160: 65 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 72  et the.    ** er
5170: 72 6f 72 20 63 6f 75 6e 74 20 30 0a 20 20 20 20  ror count 0.    
5180: 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  */.    static co
5190: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 69  nst VdbeOpList i
51a0: 6e 69 74 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20  nitCode[] = {.  
51b0: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
51c0: 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20  ,     0, 0,     
51d0: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
51e0: 50 5f 4d 65 6d 53 74 6f 72 65 2c 20 20 20 20 30  P_MemStore,    0
51f0: 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 1,        0},.
5200: 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f 2a 20 43      };..    /* C
5210: 6f 64 65 20 74 68 61 74 20 61 70 70 65 61 72 73  ode that appears
5220: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
5230: 68 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  he integrity che
5240: 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72 6f 72  ck.  If no error
5250: 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61 67 65 73  .    ** messages
5260: 20 68 61 76 65 20 62 65 65 6e 20 67 65 6e 65 72   have been gener
5270: 61 74 65 64 2c 20 6f 75 74 70 75 74 20 4f 4b 2e  ated, output OK.
5280: 20 20 4f 74 68 65 72 77 69 73 65 20 6f 75 74 70    Otherwise outp
5290: 75 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 72  ut the.    ** er
52a0: 72 6f 72 20 6d 65 73 73 61 67 65 0a 20 20 20 20  ror message.    
52b0: 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  */.    static co
52c0: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 65  nst VdbeOpList e
52d0: 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20  ndCode[] = {.   
52e0: 20 20 20 7b 20 4f 50 5f 4d 65 6d 4c 6f 61 64 2c     { OP_MemLoad,
52f0: 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20       0, 0,      
5300: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
5310: 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c  _Integer,     0,
5320: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   0,        0},. 
5330: 20 20 20 20 20 7b 20 4f 50 5f 4e 65 2c 20 20 20       { OP_Ne,   
5340: 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20         0, 0,    
5350: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20      0},    /* 2 
5360: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74  */.      { OP_St
5370: 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 30 2c  ring8,     0, 0,
5380: 20 20 20 20 20 20 20 20 22 6f 6b 22 7d 2c 0a 20          "ok"},. 
5390: 20 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61       { OP_Callba
53a0: 63 6b 2c 20 20 20 20 31 2c 20 30 2c 20 20 20 20  ck,    1, 0,    
53b0: 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a      0},.    };..
53c0: 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
53d0: 65 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72  e the VDBE progr
53e0: 61 6d 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71  am */.    if( sq
53f0: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
5400: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
5410: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 73  ragma_out;.    s
5420: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
5430: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
5440: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
5450: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 22 69 6e 74  lName(v, 0, "int
5460: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 20 50  egrity_check", P
5470: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  3_STATIC);.    s
5480: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
5490: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
54a0: 28 69 6e 69 74 43 6f 64 65 29 2c 20 69 6e 69 74  (initCode), init
54b0: 43 6f 64 65 29 3b 0a 0a 20 20 20 20 2f 2a 20 44  Code);..    /* D
54c0: 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63  o an integrity c
54d0: 68 65 63 6b 20 6f 6e 20 65 61 63 68 20 64 61 74  heck on each dat
54e0: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
54f0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
5500: 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
5510: 20 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20    HashElem *x;. 
5520: 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30       int cnt = 0
5530: 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ;..      sqlite3
5540: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
5550: 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 0a 20 20  (pParse, i);..  
5560: 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74      /* Do an int
5570: 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20  egrity check of 
5580: 74 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20  the B-Tree.     
5590: 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28 78 3d   */.      for(x=
55a0: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
55b0: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 74 62 6c 48  &db->aDb[i].tblH
55c0: 61 73 68 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74  ash); x; x=sqlit
55d0: 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20  eHashNext(x)){. 
55e0: 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54         Table *pT
55f0: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
5600: 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20  ata(x);.        
5610: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
5620: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5630: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65  AddOp(v, OP_Inte
5640: 67 65 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c  ger, pTab->tnum,
5650: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 63 6e 74   0);.        cnt
5660: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  ++;.        for(
5670: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
5680: 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
5690: 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20  dx->pNext){.    
56a0: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
56b0: 33 43 68 65 63 6b 49 6e 64 65 78 43 6f 6c 6c 53  3CheckIndexCollS
56c0: 65 71 28 70 50 61 72 73 65 2c 20 70 49 64 78 29  eq(pParse, pIdx)
56d0: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
56e0: 75 74 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  ut;.          sq
56f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76  lite3VdbeAddOp(v
5700: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49  , OP_Integer, pI
5710: 64 78 2d 3e 74 6e 75 6d 2c 20 30 29 3b 0a 20 20  dx->tnum, 0);.  
5720: 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20          cnt++;. 
5730: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
5740: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 63  .      assert( c
5750: 6e 74 3e 30 20 29 3b 0a 20 20 20 20 20 20 73 71  nt>0 );.      sq
5760: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76  lite3VdbeAddOp(v
5770: 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  , OP_IntegrityCk
5780: 2c 20 63 6e 74 2c 20 69 29 3b 0a 20 20 20 20 20  , cnt, i);.     
5790: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
57a0: 70 28 76 2c 20 4f 50 5f 44 75 70 2c 20 30 2c 20  p(v, OP_Dup, 0, 
57b0: 31 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d  1);.      addr =
57c0: 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33 28   sqlite3VdbeOp3(
57d0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
57e0: 2c 20 30 2c 20 22 6f 6b 22 2c 20 50 33 5f 53 54  , 0, "ok", P3_ST
57f0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
5800: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c  ite3VdbeAddOp(v,
5810: 20 4f 50 5f 45 71 2c 20 30 2c 20 61 64 64 72 2b   OP_Eq, 0, addr+
5820: 36 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  6);.      sqlite
5830: 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53  3VdbeOp3(v, OP_S
5840: 74 72 69 6e 67 38 2c 20 30 2c 20 30 2c 0a 20 20  tring8, 0, 0,.  
5850: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50         sqlite3MP
5860: 72 69 6e 74 66 28 22 2a 2a 2a 20 69 6e 20 64 61  rintf("*** in da
5870: 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22  tabase %s ***\n"
5880: 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
5890: 6d 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50 33  me),.         P3
58a0: 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20  _DYNAMIC);.     
58b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
58c0: 70 28 76 2c 20 4f 50 5f 50 75 6c 6c 2c 20 31 2c  p(v, OP_Pull, 1,
58d0: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
58e0: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
58f0: 50 5f 43 6f 6e 63 61 74 2c 20 30 2c 20 31 29 3b  P_Concat, 0, 1);
5900: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
5910: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61  beAddOp(v, OP_Ca
5920: 6c 6c 62 61 63 6b 2c 20 31 2c 20 30 29 3b 0a 0a  llback, 1, 0);..
5930: 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
5940: 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64 69 63  re all the indic
5950: 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74  es are construct
5960: 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20  ed correctly..  
5970: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
5980: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
5990: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b  hema(pParse, i);
59a0: 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c  .      for(x=sql
59b0: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
59c0: 2d 3e 61 44 62 5b 69 5d 2e 74 62 6c 48 61 73 68  ->aDb[i].tblHash
59d0: 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61  ); x; x=sqliteHa
59e0: 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20  shNext(x)){.    
59f0: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20      Table *pTab 
5a00: 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  = sqliteHashData
5a10: 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  (x);.        Ind
5a20: 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20  ex *pIdx;.      
5a30: 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 0a    int loopTop;..
5a40: 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62          if( pTab
5a50: 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f  ->pIndex==0 ) co
5a60: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
5a70: 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
5a80: 41 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72 73  AndIndices(pPars
5a90: 65 2c 20 70 54 61 62 2c 20 31 2c 20 4f 50 5f 4f  e, pTab, 1, OP_O
5aa0: 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20  penRead);.      
5ab0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5ac0: 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  Op(v, OP_Integer
5ad0: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 0, 0);.       
5ae0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5af0: 70 28 76 2c 20 4f 50 5f 4d 65 6d 53 74 6f 72 65  p(v, OP_MemStore
5b00: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , 1, 1);.       
5b10: 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74   loopTop = sqlit
5b20: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
5b30: 50 5f 52 65 77 69 6e 64 2c 20 31 2c 20 30 29 3b  P_Rewind, 1, 0);
5b40: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5b50: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
5b60: 4d 65 6d 49 6e 63 72 2c 20 31 2c 20 30 29 3b 0a  MemIncr, 1, 0);.
5b70: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
5b80: 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
5b90: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
5ba0: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
5bb0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  {.          int 
5bc0: 6a 6d 70 32 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp2;.          
5bd0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
5be0: 65 4f 70 4c 69 73 74 20 69 64 78 45 72 72 5b 5d  eOpList idxErr[]
5bf0: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   = {.           
5c00: 20 7b 20 4f 50 5f 4d 65 6d 49 6e 63 72 2c 20 20   { OP_MemIncr,  
5c10: 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 0a 20     0,  0,  0},. 
5c20: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
5c30: 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20  String8,     0, 
5c40: 20 30 2c 20 20 22 72 6f 77 69 64 20 22 7d 2c 0a   0,  "rowid "},.
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
5c60: 5f 52 65 63 6e 6f 2c 20 20 20 20 20 20 20 31 2c  _Recno,       1,
5c70: 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20    0,  0},.      
5c80: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
5c90: 67 38 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20  g8,     0,  0,  
5ca0: 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  " missing from i
5cb0: 6e 64 65 78 20 22 7d 2c 0a 20 20 20 20 20 20 20  ndex "},.       
5cc0: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
5cd0: 38 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30  8,     0,  0,  0
5ce0: 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20  },    /* 4 */.  
5cf0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43            { OP_C
5d00: 6f 6e 63 61 74 2c 20 20 20 20 20 20 32 2c 20 20  oncat,      2,  
5d10: 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20  0,  0},.        
5d20: 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63      { OP_Callbac
5d30: 6b 2c 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d  k,    1,  0,  0}
5d40: 2c 0a 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 20  ,.          };. 
5d50: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
5d60: 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
5d70: 28 76 2c 20 70 49 64 78 2c 20 31 29 3b 0a 20 20  (v, pIdx, 1);.  
5d80: 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73          jmp2 = s
5d90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
5da0: 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 6a 2b 32  v, OP_Found, j+2
5db0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
5dc0: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
5dd0: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
5de0: 72 72 61 79 53 69 7a 65 28 69 64 78 45 72 72 29  rraySize(idxErr)
5df0: 2c 20 69 64 78 45 72 72 29 3b 0a 20 20 20 20 20  , idxErr);.     
5e00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5e10: 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72  ChangeP3(v, addr
5e20: 2b 34 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c  +4, pIdx->zName,
5e30: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P3_STATIC);.   
5e40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5e50: 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 6a 6d  beChangeP2(v, jm
5e60: 70 32 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43  p2, sqlite3VdbeC
5e70: 75 72 72 65 6e 74 41 64 64 72 28 76 29 29 3b 0a  urrentAddr(v));.
5e80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
5e90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5ea0: 4f 70 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 31  Op(v, OP_Next, 1
5eb0: 2c 20 6c 6f 6f 70 54 6f 70 2b 31 29 3b 0a 20 20  , loopTop+1);.  
5ec0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5ed0: 65 43 68 61 6e 67 65 50 32 28 76 2c 20 6c 6f 6f  eChangeP2(v, loo
5ee0: 70 54 6f 70 2c 20 73 71 6c 69 74 65 33 56 64 62  pTop, sqlite3Vdb
5ef0: 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 29  eCurrentAddr(v))
5f00: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  ;.        for(j=
5f10: 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
5f20: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
5f30: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
5f40: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 74  +){.          st
5f50: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
5f60: 70 4c 69 73 74 20 63 6e 74 49 64 78 5b 5d 20 3d  pList cntIdx[] =
5f70: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
5f80: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
5f90: 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 0a 20     0,  0,  0},. 
5fa0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
5fb0: 5f 4d 65 6d 53 74 6f 72 65 2c 20 20 20 20 20 32  _MemStore,     2
5fc0: 2c 20 20 31 2c 20 20 30 7d 2c 0a 20 20 20 20 20  ,  1,  0},.     
5fd0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 77          { OP_Rew
5fe0: 69 6e 64 2c 20 20 20 20 20 20 20 30 2c 20 20 30  ind,       0,  0
5ff0: 2c 20 20 30 7d 2c 20 20 2f 2a 20 32 20 2a 2f 0a  ,  0},  /* 2 */.
6000: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f               { O
6010: 50 5f 4d 65 6d 49 6e 63 72 2c 20 20 20 20 20 20  P_MemIncr,      
6020: 32 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20  2,  0,  0},.    
6030: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 4e 65           { OP_Ne
6040: 78 74 2c 20 20 20 20 20 20 20 20 20 30 2c 20 20  xt,         0,  
6050: 30 2c 20 20 30 7d 2c 20 20 2f 2a 20 34 20 2a 2f  0,  0},  /* 4 */
6060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  .             { 
6070: 4f 50 5f 4d 65 6d 4c 6f 61 64 2c 20 20 20 20 20  OP_MemLoad,     
6080: 20 31 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20   1,  0,  0},.   
6090: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 4d            { OP_M
60a0: 65 6d 4c 6f 61 64 2c 20 20 20 20 20 20 32 2c 20  emLoad,      2, 
60b0: 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20   0,  0},.       
60c0: 20 20 20 20 20 20 7b 20 4f 50 5f 45 71 2c 20 20        { OP_Eq,  
60d0: 20 20 20 20 20 20 20 20 20 30 2c 20 20 30 2c 20           0,  0, 
60e0: 20 30 7d 2c 20 20 2f 2a 20 37 20 2a 2f 0a 20 20   0},  /* 7 */.  
60f0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
6100: 4d 65 6d 49 6e 63 72 2c 20 20 20 20 20 20 30 2c  MemIncr,      0,
6110: 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20    0,  0},.      
6120: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69         { OP_Stri
6130: 6e 67 38 2c 20 20 20 20 20 20 30 2c 20 20 30 2c  ng8,      0,  0,
6140: 20 20 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e    "wrong # of en
6150: 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22  tries in index "
6160: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  },.             
6170: 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20  { OP_String8,   
6180: 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20     0,  0,  0},  
6190: 2f 2a 20 31 30 20 2a 2f 0a 20 20 20 20 20 20 20  /* 10 */.       
61a0: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61        { OP_Conca
61b0: 74 2c 20 20 20 20 20 20 20 30 2c 20 20 30 2c 20  t,       0,  0, 
61c0: 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20   0},.           
61d0: 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c    { OP_Callback,
61e0: 20 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d 2c       1,  0,  0},
61f0: 0a 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 20 20  .          };.  
6200: 20 20 20 20 20 20 20 20 69 66 28 20 70 49 64 78          if( pIdx
6210: 2d 3e 74 6e 75 6d 3d 3d 30 20 29 20 63 6f 6e 74  ->tnum==0 ) cont
6220: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
6230: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
6240: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
6250: 72 72 61 79 53 69 7a 65 28 63 6e 74 49 64 78 29  rraySize(cntIdx)
6260: 2c 20 63 6e 74 49 64 78 29 3b 0a 20 20 20 20 20  , cntIdx);.     
6270: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
6280: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
6290: 2b 32 2c 20 6a 2b 32 29 3b 0a 20 20 20 20 20 20  +2, j+2);.      
62a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
62b0: 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b  hangeP2(v, addr+
62c0: 32 2c 20 61 64 64 72 2b 35 29 3b 0a 20 20 20 20  2, addr+5);.    
62d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
62e0: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
62f0: 72 2b 34 2c 20 6a 2b 32 29 3b 0a 20 20 20 20 20  r+4, j+2);.     
6300: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
6310: 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72  ChangeP2(v, addr
6320: 2b 34 2c 20 61 64 64 72 2b 33 29 3b 0a 20 20 20  +4, addr+3);.   
6330: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
6340: 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64  beChangeP2(v, ad
6350: 64 72 2b 37 2c 20 61 64 64 72 2b 41 72 72 61 79  dr+7, addr+Array
6360: 53 69 7a 65 28 63 6e 74 49 64 78 29 29 3b 0a 20  Size(cntIdx));. 
6370: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
6380: 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20  VdbeChangeP3(v, 
6390: 61 64 64 72 2b 31 30 2c 20 70 49 64 78 2d 3e 7a  addr+10, pIdx->z
63a0: 4e 61 6d 65 2c 20 50 33 5f 53 54 41 54 49 43 29  Name, P3_STATIC)
63b0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
63c0: 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61    } .    }.    a
63d0: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
63e0: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
63f0: 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29  raySize(endCode)
6400: 2c 20 65 6e 64 43 6f 64 65 29 3b 0a 20 20 20 20  , endCode);.    
6410: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
6420: 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 61  eP2(v, addr+2, a
6430: 64 64 72 2b 41 72 72 61 79 53 69 7a 65 28 65 6e  ddr+ArraySize(en
6440: 64 43 6f 64 65 29 29 3b 0a 20 20 7d 65 6c 73 65  dCode));.  }else
6450: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
6460: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
6470: 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64  _CHECK */..#ifnd
6480: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
6490: 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  TF16.  /*.  **  
64a0: 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67   PRAGMA encoding
64b0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65  .  **   PRAGMA e
64c0: 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38  ncoding = "utf-8
64d0: 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d  "|"utf-16"|"utf-
64e0: 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22  16le"|"utf-16be"
64f0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74  .  **.  ** In it
6500: 27 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74  's first form, t
6510: 68 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72  his pragma retur
6520: 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  ns the encoding 
6530: 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a  of the main.  **
6540: 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
6550: 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  e database is no
6560: 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69  t initialized, i
6570: 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  t is initialized
6580: 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20   now..  **.  ** 
6590: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
65a0: 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69  of this pragma i
65b0: 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  s a no-op if the
65c0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
65d0: 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74  ile.  ** has not
65e0: 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e   already been in
65f0: 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68  itialized. In th
6600: 69 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20  is case it sets 
6610: 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a  the default.  **
6620: 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77   encoding that w
6630: 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
6640: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
6650: 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20  e file if a new 
6660: 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65  file.  ** is cre
6670: 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73  ated. If an exis
6680: 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61  ting main databa
6690: 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65  se file is opene
66a0: 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  d, then the.  **
66b0: 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
66c0: 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65  coding for the e
66d0: 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
66e0: 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a   is used..  ** .
66f0: 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65    ** In all case
6700: 73 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  s new databases 
6710: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
6720: 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64  e ATTACH command
6730: 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65   are.  ** create
6740: 64 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d  d to use the sam
6750: 65 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65  e default text e
6760: 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d  ncoding as the m
6770: 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66  ain database. If
6780: 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  .  ** the main d
6790: 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
67a0: 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
67b0: 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20   and/or created 
67c0: 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a  when ATTACH.  **
67d0: 20 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68   is executed, th
67e0: 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72  is is done befor
67f0: 65 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65  e the ATTACH ope
6800: 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  ration..  **.  *
6810: 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  * In the second 
6820: 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61  form this pragma
6830: 20 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65   sets the text e
6840: 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73  ncoding to be us
6850: 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64  ed in.  ** new d
6860: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72  atabase files cr
6870: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73  eated using this
6880: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
6890: 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a  . It is only.  *
68a0: 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f  * useful if invo
68b0: 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ked immediately 
68c0: 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64  after the main d
68d0: 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20  atabase i.  */. 
68e0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
68f0: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 65 6e 63 6f  Cmp(zLeft, "enco
6900: 64 69 6e 67 22 29 3d 3d 30 20 29 7b 0a 20 20 20  ding")==0 ){.   
6910: 20 73 74 61 74 69 63 20 73 74 72 75 63 74 20 45   static struct E
6920: 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63  ncName {.      c
6930: 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20  har *zName;.    
6940: 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20    u8 enc;.    } 
6950: 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20  encnames[] = {. 
6960: 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c 20       { "UTF-8", 
6970: 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20     SQLITE_UTF8  
6980: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
6990: 20 22 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c   "UTF8",     SQL
69a0: 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20  ITE_UTF8        
69b0: 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  },.      { "UTF-
69c0: 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  16le", SQLITE_UT
69d0: 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20  F16LE     },.   
69e0: 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20     { "UTF16le", 
69f0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
6a00: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
6a10: 55 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54  UTF-16be", SQLIT
6a20: 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c  E_UTF16BE     },
6a30: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62  .      { "UTF16b
6a40: 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31  e",  SQLITE_UTF1
6a50: 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  6BE     },.     
6a60: 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30   { "UTF-16",   0
6a70: 20 2f 2a 20 46 69 6c 6c 65 64 20 69 6e 20 61 74   /* Filled in at
6a80: 20 72 75 6e 2d 74 69 6d 65 20 2a 2f 20 7d 2c 0a   run-time */ },.
6a90: 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c        { "UTF16",
6aa0: 20 20 20 20 30 20 2f 2a 20 46 69 6c 6c 65 64 20      0 /* Filled 
6ab0: 69 6e 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 2a  in at run-time *
6ac0: 2f 20 7d 2c 0a 20 20 20 20 20 20 7b 20 30 2c 20  / },.      { 0, 
6ad0: 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 73  0 }.    };.    s
6ae0: 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a 70  truct EncName *p
6af0: 45 6e 63 3b 0a 20 20 20 20 65 6e 63 6e 61 6d 65  Enc;.    encname
6b00: 73 5b 36 5d 2e 65 6e 63 20 3d 20 65 6e 63 6e 61  s[6].enc = encna
6b10: 6d 65 73 5b 37 5d 2e 65 6e 63 20 3d 20 53 51 4c  mes[7].enc = SQL
6b20: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b  ITE_UTF16NATIVE;
6b30: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
6b40: 20 29 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d   ){    /* "PRAGM
6b50: 41 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20  A encoding" */. 
6b60: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
6b70: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
6b80: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
6b90: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  _out;.      sqli
6ba0: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
6bb0: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  s(v, 1);.      s
6bc0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
6bd0: 4e 61 6d 65 28 76 2c 20 30 2c 20 22 65 6e 63 6f  Name(v, 0, "enco
6be0: 64 69 6e 67 22 2c 20 50 33 5f 53 54 41 54 49 43  ding", P3_STATIC
6bf0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
6c00: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
6c10: 53 74 72 69 6e 67 38 2c 20 30 2c 20 30 29 3b 0a  String8, 0, 0);.
6c20: 20 20 20 20 20 20 66 6f 72 28 70 45 6e 63 3d 26        for(pEnc=&
6c30: 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e  encnames[0]; pEn
6c40: 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b  c->zName; pEnc++
6c50: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ){.        if( p
6c60: 45 6e 63 2d 3e 65 6e 63 3d 3d 70 50 61 72 73 65  Enc->enc==pParse
6c70: 2d 3e 64 62 2d 3e 65 6e 63 20 29 7b 0a 20 20 20  ->db->enc ){.   
6c80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
6c90: 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 2d 31  beChangeP3(v, -1
6ca0: 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 2c 20 50  , pEnc->zName, P
6cb0: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
6cc0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
6cd0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
6ce0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
6cf0: 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62  ddOp(v, OP_Callb
6d00: 61 63 6b 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20  ack, 1, 0);.    
6d10: 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20  }else{          
6d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6d30: 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
6d40: 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20  g = XXX" */.    
6d50: 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65    /* Only change
6d60: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71   the value of sq
6d70: 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20  lite.enc if the 
6d80: 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
6d90: 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  is not.      ** 
6da0: 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20  initialized. If 
6db0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
6dc0: 65 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65  e exists, the ne
6dd0: 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c  w sqlite.enc val
6de0: 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c  ue.      ** will
6df0: 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
6e00: 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
6e10: 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20  is next loaded. 
6e20: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20  If it does not. 
6e30: 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20       ** already 
6e40: 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20  exists, it will 
6e50: 62 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  be created to us
6e60: 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69  e the new encodi
6e70: 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20  ng value..      
6e80: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 21 28 70  */.      if( !(p
6e90: 50 61 72 73 65 2d 3e 64 62 2d 3e 66 6c 61 67 73  Parse->db->flags
6ea0: 26 53 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69  &SQLITE_Initiali
6eb0: 7a 65 64 29 20 29 7b 0a 20 20 20 20 20 20 20 20  zed) ){.        
6ec0: 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d  for(pEnc=&encnam
6ed0: 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61  es[0]; pEnc->zNa
6ee0: 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20  me; pEnc++){.   
6ef0: 20 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71         if( 0==sq
6f00: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69  lite3StrICmp(zRi
6f10: 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65  ght, pEnc->zName
6f20: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ) ){.           
6f30: 20 70 50 61 72 73 65 2d 3e 64 62 2d 3e 65 6e 63   pParse->db->enc
6f40: 20 3d 20 70 45 6e 63 2d 3e 65 6e 63 3b 0a 20 20   = pEnc->enc;.  
6f50: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
6f60: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
6f70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
6f80: 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20  f( !pEnc->zName 
6f90: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
6fa0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
6fb0: 72 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65  rse, "unsupporte
6fc0: 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c  d encoding: %s",
6fd0: 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20   zRight);.      
6fe0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
6ff0: 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66  }.  }else.#endif
7000: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
7010: 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65  UTF16 */..#ifnde
7020: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  f SQLITE_OMIT_SC
7030: 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
7040: 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  GMAS.  /*.  **  
7050: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
7060: 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  e.]schema_versio
7070: 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  n.  **   PRAGMA 
7080: 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d  [database.]schem
7090: 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  a_version = <int
70a0: 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
70b0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
70c0: 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e  se.]user_version
70d0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
70e0: 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76  database.]user_v
70f0: 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65  ersion = <intege
7100: 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  r>.  **.  ** The
7110: 20 70 72 61 67 6d 61 27 73 20 73 63 68 65 6d 61   pragma's schema
7120: 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65  _version and use
7130: 72 5f 76 65 72 73 69 6f 6e 20 61 72 65 20 75 73  r_version are us
7140: 65 64 20 74 6f 20 73 65 74 20 6f 72 20 67 65 74  ed to set or get
7150: 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  .  ** the value 
7160: 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  of the schema-ve
7170: 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76  rsion and user-v
7180: 65 72 73 69 6f 6e 2c 20 72 65 73 70 65 63 74 69  ersion, respecti
7190: 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20  vely. Both.  ** 
71a0: 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
71b0: 6f 6e 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d  on and the user-
71c0: 76 65 72 73 69 6f 6e 20 61 72 65 20 33 32 2d 62  version are 32-b
71d0: 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65  it signed intege
71e0: 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69  rs.  ** stored i
71f0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  n the database h
7200: 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  eader..  **.  **
7210: 20 54 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   The schema-cook
7220: 69 65 20 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e  ie is usually on
7230: 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69  ly manipulated i
7240: 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c  nternally by SQL
7250: 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20  ite. It.  ** is 
7260: 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 53  incremented by S
7270: 51 4c 69 74 65 20 77 68 65 6e 65 76 65 72 20 74  QLite whenever t
7280: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
7290: 6d 61 20 69 73 20 6d 6f 64 69 66 69 65 64 20 28  ma is modified (
72a0: 62 79 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e 67  by.  ** creating
72b0: 20 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20 74   or dropping a t
72c0: 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e 20  able or index). 
72d0: 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  The schema versi
72e0: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 0a 20 20  on is used by.  
72f0: 2a 2a 20 53 51 4c 69 74 65 20 65 61 63 68 20 74  ** SQLite each t
7300: 69 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65  ime a query is e
7310: 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72  xecuted to ensur
7320: 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72  e that the inter
7330: 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f  nal cache.  ** o
7340: 66 20 74 68 65 20 73 63 68 65 6d 61 20 75 73 65  f the schema use
7350: 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67  d when compiling
7360: 20 74 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d   the SQL query m
7370: 61 74 63 68 65 73 20 74 68 65 20 73 63 68 65 6d  atches the schem
7380: 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64 61  a of.  ** the da
7390: 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77  tabase against w
73a0: 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65  hich the compile
73b0: 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61  d query is actua
73c0: 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20  lly executed..  
73d0: 2a 2a 20 53 75 62 76 65 72 74 69 6e 67 20 74 68  ** Subverting th
73e0: 69 73 20 6d 65 63 68 61 6e 69 73 6d 20 62 79 20  is mechanism by 
73f0: 75 73 69 6e 67 20 22 50 52 41 47 4d 41 20 73 63  using "PRAGMA sc
7400: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f  hema_version" to
7410: 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68 65   modify.  ** the
7420: 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
7430: 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64  is potentially d
7440: 61 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d 61 79  angerous and may
7450: 20 6c 65 61 64 20 74 6f 20 70 72 6f 67 72 61 6d   lead to program
7460: 0a 20 20 2a 2a 20 63 72 61 73 68 65 73 20 6f 72  .  ** crashes or
7470: 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
7480: 74 69 6f 6e 2e 20 55 73 65 20 77 69 74 68 20 63  tion. Use with c
7490: 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a  aution!.  **.  *
74a0: 2a 20 54 68 65 20 75 73 65 72 2d 76 65 72 73 69  * The user-versi
74b0: 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69  on is not used i
74c0: 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c  nternally by SQL
74d0: 69 74 65 2e 20 49 74 20 6d 61 79 20 62 65 20 75  ite. It may be u
74e0: 73 65 64 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c  sed by.  ** appl
74f0: 69 63 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79  ications for any
7500: 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20   purpose..  */. 
7510: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
7520: 43 6d 70 28 7a 4c 65 66 74 2c 20 22 73 63 68 65  Cmp(zLeft, "sche
7530: 6d 61 5f 76 65 72 73 69 6f 6e 22 29 3d 3d 30 20  ma_version")==0 
7540: 7c 7c 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ||.      sqlite3
7550: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22  StrICmp(zLeft, "
7560: 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 29 3d 3d  user_version")==
7570: 30 20 29 7b 0a 0a 20 20 20 20 69 6e 74 20 69 43  0 ){..    int iC
7580: 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 43 6f 6f 6b  ookie;   /* Cook
7590: 69 65 20 69 6e 64 65 78 2e 20 30 20 66 6f 72 20  ie index. 0 for 
75a0: 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 2c 20 36  schema-cookie, 6
75b0: 20 66 6f 72 20 75 73 65 72 2d 63 6f 6f 6b 69 65   for user-cookie
75c0: 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 4c 65  . */.    if( zLe
75d0: 66 74 5b 30 5d 3d 3d 27 73 27 20 7c 7c 20 7a 4c  ft[0]=='s' || zL
75e0: 65 66 74 5b 30 5d 3d 3d 27 53 27 20 29 7b 0a 20  eft[0]=='S' ){. 
75f0: 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 30       iCookie = 0
7600: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
7610: 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 35 3b 0a     iCookie = 5;.
7620: 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 7a      }..    if( z
7630: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 2f  Right ){.      /
7640: 2a 20 57 72 69 74 65 20 74 68 65 20 73 70 65 63  * Write the spec
7650: 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c  ified cookie val
7660: 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74  ue */.      stat
7670: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
7680: 69 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20  ist setCookie[] 
7690: 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
76a0: 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
76b0: 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20   0,  1,  0},    
76c0: 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 0 */.        
76d0: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
76e0: 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c       0,  0,  0},
76f0: 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20      /* 1 */.    
7700: 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b      { OP_SetCook
7710: 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20  ie,      0,  0, 
7720: 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a   0},    /* 2 */.
7730: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69        };.      i
7740: 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65  nt addr = sqlite
7750: 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
7760: 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43  , ArraySize(setC
7770: 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69  ookie), setCooki
7780: 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
7790: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
77a0: 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20   addr, iDb);.   
77b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
77c0: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31  angeP1(v, addr+1
77d0: 2c 20 61 74 6f 69 28 7a 52 69 67 68 74 29 29 3b  , atoi(zRight));
77e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
77f0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
7800: 64 72 2b 32 2c 20 69 44 62 29 3b 0a 20 20 20 20  dr+2, iDb);.    
7810: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
7820: 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c  ngeP2(v, addr+2,
7830: 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d   iCookie);.    }
7840: 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52  else{.      /* R
7850: 65 61 64 20 74 68 65 20 73 70 65 63 69 66 69 65  ead the specifie
7860: 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a  d cookie value *
7870: 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  /.      static c
7880: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
7890: 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b  readCookie[] = {
78a0: 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  .        { OP_Re
78b0: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30  adCookie,      0
78c0: 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  0,  0},    /*
78d0: 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   0 */.        { 
78e0: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20  OP_Callback,    
78f0: 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d 0a 20      1,  0,  0}. 
7900: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e       };.      in
7910: 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33  t addr = sqlite3
7920: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
7930: 20 41 72 72 61 79 53 69 7a 65 28 72 65 61 64 43   ArraySize(readC
7940: 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b  ookie), readCook
7950: 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ie);.      sqlit
7960: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
7970: 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
7980: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
7990: 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2c  hangeP2(v, addr,
79a0: 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20   iCookie);.     
79b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
79c0: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
79d0: 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f    }.  }.#endif /
79e0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  * SQLITE_OMIT_SC
79f0: 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
7a00: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 20 64 65 66  GMAS */..#if def
7a10: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
7a20: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
7a30: 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a  LITE_TEST).  /*.
7a40: 20 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20    ** Report the 
7a50: 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66  current state of
7a60: 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61   file logs for a
7a70: 6c 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a  ll databases.  *
7a80: 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  /.  if( sqlite3S
7a90: 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 6c  trICmp(zLeft, "l
7aa0: 6f 63 6b 5f 73 74 61 74 75 73 22 29 3d 3d 30 20  ock_status")==0 
7ab0: 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  ){.    static co
7ac0: 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20  nst char *const 
7ad0: 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b  azLockName[] = {
7ae0: 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64  .      "unlocked
7af0: 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72 65  ", "shared", "re
7b00: 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69 6e  served", "pendin
7b10: 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22 0a  g", "exclusive".
7b20: 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69      };.    int i
7b30: 3b 0a 20 20 20 20 56 64 62 65 20 2a 76 20 3d 20  ;.    Vdbe *v = 
7b40: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
7b50: 50 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69  Parse);.    sqli
7b60: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
7b70: 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 73 71 6c  s(v, 2);.    sql
7b80: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
7b90: 6d 65 28 76 2c 20 30 2c 20 22 64 61 74 61 62 61  me(v, 0, "databa
7ba0: 73 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  se", P3_STATIC);
7bb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7bc0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
7bd0: 20 22 73 74 61 74 75 73 22 2c 20 50 33 5f 53 54   "status", P3_ST
7be0: 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69  ATIC);.    for(i
7bf0: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
7c00: 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65  ++){.      Btree
7c10: 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 50 61 67   *pBt;.      Pag
7c20: 65 72 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20  er *pPager;.    
7c30: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d    if( db->aDb[i]
7c40: 2e 7a 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74  .zName==0 ) cont
7c50: 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  inue;.      sqli
7c60: 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50  te3VdbeOp3(v, OP
7c70: 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30 2c 20 64  _String, 0, 0, d
7c80: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c  b->aDb[i].zName,
7c90: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P3_STATIC);.   
7ca0: 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62     pBt = db->aDb
7cb0: 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69  [i].pBt;.      i
7cc0: 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20 28 70 50  f( pBt==0 || (pP
7cd0: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
7ce0: 72 65 65 50 61 67 65 72 28 70 42 74 29 29 3d 3d  reePager(pBt))==
7cf0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
7d00: 69 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f  ite3VdbeOp3(v, O
7d10: 50 5f 53 74 72 69 6e 67 2c 20 30 2c 20 30 2c 20  P_String, 0, 0, 
7d20: 22 63 6c 6f 73 65 64 22 2c 20 50 33 5f 53 54 41  "closed", P3_STA
7d30: 54 49 43 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  TIC);.      }els
7d40: 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6a  e{.        int j
7d50: 20 3d 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f   = sqlite3pager_
7d60: 6c 6f 63 6b 73 74 61 74 65 28 70 50 61 67 65 72  lockstate(pPager
7d70: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
7d80: 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f  e3VdbeOp3(v, OP_
7d90: 53 74 72 69 6e 67 2c 20 30 2c 20 30 2c 20 0a 20  String, 0, 0, . 
7da0: 20 20 20 20 20 20 20 20 20 20 20 28 6a 3e 3d 30             (j>=0
7db0: 20 26 26 20 6a 3c 3d 34 29 20 3f 20 61 7a 4c 6f   && j<=4) ? azLo
7dc0: 63 6b 4e 61 6d 65 5b 6a 5d 20 3a 20 22 75 6e 6b  ckName[j] : "unk
7dd0: 6e 6f 77 6e 22 2c 20 50 33 5f 53 54 41 54 49 43  nown", P3_STATIC
7de0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
7df0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
7e00: 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b  p(v, OP_Callback
7e10: 2c 20 32 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  , 2, 0);.    }. 
7e20: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20   }else.#endif.. 
7e30: 20 7b 7d 0a 0a 20 20 69 66 28 20 76 20 29 7b 0a   {}..  if( v ){.
7e40: 20 20 20 20 2f 2a 20 43 6f 64 65 20 61 6e 20 4f      /* Code an O
7e50: 50 5f 45 78 70 69 72 65 20 61 74 20 74 68 65 20  P_Expire at the 
7e60: 65 6e 64 20 6f 66 20 65 61 63 68 20 50 52 41 47  end of each PRAG
7e70: 4d 41 20 70 72 6f 67 72 61 6d 20 74 6f 20 63 61  MA program to ca
7e80: 75 73 65 0a 20 20 20 20 2a 2a 20 74 68 65 20 56  use.    ** the V
7e90: 44 42 45 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  DBE implementing
7ea0: 20 74 68 65 20 70 72 61 67 6d 61 20 74 6f 20 65   the pragma to e
7eb0: 78 70 69 72 65 2e 20 4d 6f 73 74 20 28 61 6c 6c  xpire. Most (all
7ec0: 3f 29 20 70 72 61 67 6d 61 73 0a 20 20 20 20 2a  ?) pragmas.    *
7ed0: 2a 20 61 72 65 20 6f 6e 6c 79 20 76 61 6c 69 64  * are only valid
7ee0: 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 65 78   for a single ex
7ef0: 65 63 75 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a  ecution..    */.
7f00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
7f10: 64 64 4f 70 28 76 2c 20 4f 50 5f 45 78 70 69 72  ddOp(v, OP_Expir
7f20: 65 2c 20 31 2c 20 30 29 3b 0a 20 20 7d 0a 70 72  e, 1, 0);.  }.pr
7f30: 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69  agma_out:.  sqli
7f40: 74 65 46 72 65 65 28 7a 4c 65 66 74 29 3b 0a 20  teFree(zLeft);. 
7f50: 20 73 71 6c 69 74 65 46 72 65 65 28 7a 52 69 67   sqliteFree(zRig
7f60: 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  ht);.}..#endif /
7f70: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
7f80: 41 47 4d 41 20 2a 2f 0a                          AGMA */.