/ Hex Artifact Content
Login

Artifact 845c8ab0ab7d09ed2115d3dfc859ba2364b365a7:


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 39 31 20 32 30  agma.c,v 1.91 20
01d0: 30 35 2f 30 33 2f 32 39 20 30 33 3a 31 30 3a 35  05/03/29 03:10:5
01e0: 39 20 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78  9 danielk1977 Ex
01f0: 70 20 24 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  p $.*/.#include 
0200: 22 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69  "sqliteInt.h".#i
0210: 6e 63 6c 75 64 65 20 22 6f 73 2e 68 22 0a 23 69  nclude "os.h".#i
0220: 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
0230: 0a 0a 2f 2a 20 49 67 6e 6f 72 65 20 74 68 69 73  ../* Ignore this
0240: 20 77 68 6f 6c 65 20 66 69 6c 65 20 69 66 20 70   whole file if p
0250: 72 61 67 6d 61 73 20 61 72 65 20 64 69 73 61 62  ragmas are disab
0260: 6c 65 64 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  led.*/.#ifndef S
0270: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
0280: 41 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  A..#if defined(S
0290: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
02a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54  defined(SQLITE_T
02b0: 45 53 54 29 0a 23 20 69 6e 63 6c 75 64 65 20 22  EST).# include "
02c0: 70 61 67 65 72 2e 68 22 0a 23 20 69 6e 63 6c 75  pager.h".# inclu
02d0: 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 65 6e  de "btree.h".#en
02e0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  dif../*.** Inter
02f0: 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20 73  pret the given s
0300: 74 72 69 6e 67 20 61 73 20 61 20 73 61 66 65 74  tring as a safet
0310: 79 20 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e  y level.  Return
0320: 20 30 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31   0 for OFF,.** 1
0330: 20 66 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41   for ON or NORMA
0340: 4c 20 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c  L and 2 for FULL
0350: 2e 20 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20  .  Return 1 for 
0360: 61 6e 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20  an empty or .** 
0370: 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72  unrecognized str
0380: 69 6e 67 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a  ing argument..**
0390: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
03a0: 65 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  e values returne
03b0: 64 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74  d are one less t
03c0: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74  hat the values t
03d0: 68 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65  hat.** should be
03e0: 20 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c   passed into sql
03f0: 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65  ite3BtreeSetSafe
0400: 74 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20  tyLevel().  The 
0410: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75  is done.** to su
0420: 70 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c  pport legacy SQL
0430: 20 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65   code.  The safe
0440: 74 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f  ty level used to
0450: 20 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61   be boolean.** a
0460: 6e 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73  nd older scripts
0470: 20 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e   may have used n
0480: 75 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46  umbers 0 for OFF
0490: 20 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a   and 1 for ON..*
04a0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
04b0: 53 61 66 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73  SafetyLevel(cons
04c0: 74 20 75 38 20 2a 7a 29 7b 0a 20 20 20 20 20 20  t u8 *z){.      
04d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04e0: 20 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36         /* 123456
04f0: 37 38 39 20 31 32 33 34 35 36 37 38 39 20 2a 2f  789 123456789 */
0500: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
0510: 63 68 61 72 20 7a 54 65 78 74 5b 5d 20 3d 20 22  char zText[] = "
0520: 6f 6e 6f 66 66 61 6c 73 65 79 65 73 74 72 75 65  onoffalseyestrue
0530: 66 75 6c 6c 22 3b 0a 20 20 73 74 61 74 69 63 20  full";.  static 
0540: 63 6f 6e 73 74 20 75 38 20 69 4f 66 66 73 65 74  const u8 iOffset
0550: 5b 5d 20 3d 20 7b 30 2c 20 31 2c 20 32 2c 20 34  [] = {0, 1, 2, 4
0560: 2c 20 39 2c 20 31 32 2c 20 31 36 7d 3b 0a 20 20  , 9, 12, 16};.  
0570: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20  static const u8 
0580: 69 4c 65 6e 67 74 68 5b 5d 20 3d 20 7b 32 2c 20  iLength[] = {2, 
0590: 32 2c 20 33 2c 20 35 2c 20 33 2c 20 34 2c 20 34  2, 3, 5, 3, 4, 4
05a0: 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
05b0: 74 20 75 38 20 69 56 61 6c 75 65 5b 5d 20 3d 20  t u8 iValue[] = 
05c0: 20 7b 31 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c   {1, 0, 0, 0, 1,
05d0: 20 31 2c 20 32 7d 3b 0a 20 20 69 6e 74 20 69 2c   1, 2};.  int i,
05e0: 20 6e 3b 0a 20 20 69 66 28 20 69 73 64 69 67 69   n;.  if( isdigi
05f0: 74 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74  t(*z) ){.    ret
0600: 75 72 6e 20 61 74 6f 69 28 7a 29 3b 0a 20 20 7d  urn atoi(z);.  }
0610: 0a 20 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29  .  n = strlen(z)
0620: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 73  ;.  for(i=0; i<s
0630: 69 7a 65 6f 66 28 69 4c 65 6e 67 74 68 29 3b 20  izeof(iLength); 
0640: 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c  i++){.    if( iL
0650: 65 6e 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73  ength[i]==n && s
0660: 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26  qlite3StrNICmp(&
0670: 7a 54 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d  zText[iOffset[i]
0680: 5d 2c 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20  ],z,n)==0 ){.   
0690: 20 20 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65     return iValue
06a0: 5b 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  [i];.    }.  }. 
06b0: 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a   return 1;.}../*
06c0: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
06d0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
06e0: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
06f0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
0700: 20 67 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73   getBoolean(cons
0710: 74 20 75 38 20 2a 7a 29 7b 0a 20 20 72 65 74 75  t u8 *z){.  retu
0720: 72 6e 20 67 65 74 53 61 66 65 74 79 4c 65 76 65  rn getSafetyLeve
0730: 6c 28 7a 29 26 31 3b 0a 7d 0a 0a 23 69 66 6e 64  l(z)&1;.}..#ifnd
0740: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
0750: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a  AGER_PRAGMAS./*.
0760: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
0770: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
0780: 20 61 20 74 65 6d 70 20 64 62 20 6c 6f 63 61 74   a temp db locat
0790: 69 6f 6e 2e 20 52 65 74 75 72 6e 20 31 20 66 6f  ion. Return 1 fo
07a0: 72 20 66 69 6c 65 0a 2a 2a 20 62 61 63 6b 65 64  r file.** backed
07b0: 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74 61 62   temporary datab
07c0: 61 73 65 73 2c 20 32 20 66 6f 72 20 74 68 65 20  ases, 2 for the 
07d0: 52 65 64 2d 42 6c 61 63 6b 20 74 72 65 65 20 69  Red-Black tree i
07e0: 6e 20 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n memory databas
07f0: 65 0a 2a 2a 20 61 6e 64 20 30 20 74 6f 20 75 73  e.** and 0 to us
0800: 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  e the compile-ti
0810: 6d 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73  me default..*/.s
0820: 74 61 74 69 63 20 69 6e 74 20 67 65 74 54 65 6d  tatic int getTem
0830: 70 53 74 6f 72 65 28 63 6f 6e 73 74 20 63 68 61  pStore(const cha
0840: 72 20 2a 7a 29 7b 0a 20 20 69 66 28 20 7a 5b 30  r *z){.  if( z[0
0850: 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 30 5d 3c 3d  ]>='0' && z[0]<=
0860: 27 32 27 20 29 7b 0a 20 20 20 20 72 65 74 75 72  '2' ){.    retur
0870: 6e 20 7a 5b 30 5d 20 2d 20 27 30 27 3b 0a 20 20  n z[0] - '0';.  
0880: 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
0890: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 69 6c  3StrICmp(z, "fil
08a0: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65  e")==0 ){.    re
08b0: 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c 73 65 20  turn 1;.  }else 
08c0: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
08d0: 6d 70 28 7a 2c 20 22 6d 65 6d 6f 72 79 22 29 3d  mp(z, "memory")=
08e0: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
08f0: 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
0900: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d   return 0;.  }.}
0910: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
0920: 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  E_PAGER_PRAGMAS 
0930: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
0940: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
0950: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61  AGMAS./*.** Inva
0960: 6c 69 64 61 74 65 20 74 65 6d 70 20 73 74 6f 72  lidate temp stor
0970: 61 67 65 2c 20 65 69 74 68 65 72 20 77 68 65 6e  age, either when
0980: 20 74 68 65 20 74 65 6d 70 20 73 74 6f 72 61 67   the temp storag
0990: 65 20 69 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20  e is changed.** 
09a0: 66 72 6f 6d 20 64 65 66 61 75 6c 74 2c 20 6f 72  from default, or
09b0: 20 77 68 65 6e 20 27 66 69 6c 65 27 20 61 6e 64   when 'file' and
09c0: 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f   the temp_store_
09d0: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 63 68  directory has ch
09e0: 61 6e 67 65 64 0a 2a 2f 0a 73 74 61 74 69 63 20  anged.*/.static 
09f0: 69 6e 74 20 69 6e 76 61 6c 69 64 61 74 65 54 65  int invalidateTe
0a00: 6d 70 53 74 6f 72 61 67 65 28 50 61 72 73 65 20  mpStorage(Parse 
0a10: 2a 70 50 61 72 73 65 29 7b 0a 20 20 73 71 6c 69  *pParse){.  sqli
0a20: 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65  te3 *db = pParse
0a30: 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64 62 2d 3e  ->db;.  if( db->
0a40: 61 44 62 5b 31 5d 2e 70 42 74 21 3d 30 20 29 7b  aDb[1].pBt!=0 ){
0a50: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
0a60: 67 73 20 26 20 53 51 4c 49 54 45 5f 49 6e 54 72  gs & SQLITE_InTr
0a70: 61 6e 73 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ans ){.      sql
0a80: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
0a90: 72 73 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20  rse, "temporary 
0aa0: 73 74 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62  storage cannot b
0ab0: 65 20 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20  e changed ".    
0ac0: 20 20 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e      "from within
0ad0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29   a transaction")
0ae0: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 53  ;.      return S
0af0: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
0b00: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74   }.    sqlite3Bt
0b10: 72 65 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62  reeClose(db->aDb
0b20: 5b 31 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62  [1].pBt);.    db
0b30: 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30  ->aDb[1].pBt = 0
0b40: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65 73  ;.    sqlite3Res
0b50: 65 74 49 6e 74 65 72 6e 61 6c 53 63 68 65 6d 61  etInternalSchema
0b60: 28 64 62 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 72  (db, 0);.  }.  r
0b70: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
0b80: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
0b90: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
0ba0: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
0bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
0bc0: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
0bd0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
0be0: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
0bf0: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
0c00: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
0c10: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
0c20: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
0c30: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
0c40: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 54 45 4d  en using the TEM
0c50: 50 5f 53 54 4f 52 45 0a 2a 2a 20 6f 72 20 44 45  P_STORE.** or DE
0c60: 46 41 55 4c 54 5f 54 45 4d 50 5f 53 54 4f 52 45  FAULT_TEMP_STORE
0c70: 20 70 72 61 67 6d 61 73 2e 0a 2a 2f 0a 73 74 61   pragmas..*/.sta
0c80: 74 69 63 20 69 6e 74 20 63 68 61 6e 67 65 54 65  tic int changeTe
0c90: 6d 70 53 74 6f 72 61 67 65 28 50 61 72 73 65 20  mpStorage(Parse 
0ca0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
0cb0: 68 61 72 20 2a 7a 53 74 6f 72 61 67 65 54 79 70  har *zStorageTyp
0cc0: 65 29 7b 0a 20 20 69 6e 74 20 74 73 20 3d 20 67  e){.  int ts = g
0cd0: 65 74 54 65 6d 70 53 74 6f 72 65 28 7a 53 74 6f  etTempStore(zSto
0ce0: 72 61 67 65 54 79 70 65 29 3b 0a 20 20 73 71 6c  rageType);.  sql
0cf0: 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73  ite3 *db = pPars
0d00: 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64 62 2d  e->db;.  if( db-
0d10: 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 74 73 20  >temp_store==ts 
0d20: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
0d30: 4f 4b 3b 0a 20 20 69 66 28 20 69 6e 76 61 6c 69  OK;.  if( invali
0d40: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28  dateTempStorage(
0d50: 20 70 50 61 72 73 65 20 29 20 21 3d 20 53 51 4c   pParse ) != SQL
0d60: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
0d70: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
0d80: 52 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 74 65 6d  R;.  }.  db->tem
0d90: 70 5f 73 74 6f 72 65 20 3d 20 74 73 3b 0a 20 20  p_store = ts;.  
0da0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
0db0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
0dc0: 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d  LITE_PAGER_PRAGM
0dd0: 41 53 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e  AS */../*.** Gen
0de0: 65 72 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65  erate code to re
0df0: 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e  turn a single in
0e00: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
0e10: 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 74 75  static void retu
0e20: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 50 61 72 73  rnSingleInt(Pars
0e30: 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
0e40: 20 63 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69   char *zLabel, i
0e50: 6e 74 20 76 61 6c 75 65 29 7b 0a 20 20 56 64 62  nt value){.  Vdb
0e60: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
0e70: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
0e80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
0e90: 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  p(v, OP_Integer,
0ea0: 20 76 61 6c 75 65 2c 20 30 29 3b 0a 20 20 69 66   value, 0);.  if
0eb0: 28 20 70 50 61 72 73 65 2d 3e 65 78 70 6c 61 69  ( pParse->explai
0ec0: 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  n==0 ){.    sqli
0ed0: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
0ee0: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  s(v, 1);.    sql
0ef0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
0f00: 6d 65 28 76 2c 20 30 2c 20 7a 4c 61 62 65 6c 2c  me(v, 0, zLabel,
0f10: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d   P3_STATIC);.  }
0f20: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  .  sqlite3VdbeAd
0f30: 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61  dOp(v, OP_Callba
0f40: 63 6b 2c 20 31 2c 20 30 29 3b 0a 7d 0a 0a 23 69  ck, 1, 0);.}..#i
0f50: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
0f60: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 2f  T_FLAG_PRAGMAS./
0f70: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65  *.** Check to se
0f80: 65 20 69 66 20 7a 52 69 67 68 74 20 61 6e 64 20  e if zRight and 
0f90: 7a 4c 65 66 74 20 72 65 66 65 72 20 74 6f 20 61  zLeft refer to a
0fa0: 20 70 72 61 67 6d 61 20 74 68 61 74 20 71 75 65   pragma that que
0fb0: 72 69 65 73 0a 2a 2a 20 6f 72 20 63 68 61 6e 67  ries.** or chang
0fc0: 65 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6c  es one of the fl
0fd0: 61 67 73 20 69 6e 20 64 62 2d 3e 66 6c 61 67 73  ags in db->flags
0fe0: 2e 20 20 52 65 74 75 72 6e 20 31 20 69 66 20 73  .  Return 1 if s
0ff0: 6f 20 61 6e 64 20 30 20 69 66 20 6e 6f 74 2e 0a  o and 0 if not..
1000: 2a 2a 20 41 6c 73 6f 2c 20 69 6d 70 6c 65 6d 65  ** Also, impleme
1010: 6e 74 20 74 68 65 20 70 72 61 67 6d 61 2e 0a 2a  nt the pragma..*
1020: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 66 6c 61  /.static int fla
1030: 67 50 72 61 67 6d 61 28 50 61 72 73 65 20 2a 70  gPragma(Parse *p
1040: 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
1050: 72 20 2a 7a 4c 65 66 74 2c 20 63 6f 6e 73 74 20  r *zLeft, const 
1060: 63 68 61 72 20 2a 7a 52 69 67 68 74 29 7b 0a 20  char *zRight){. 
1070: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74   static const st
1080: 72 75 63 74 20 73 50 72 61 67 6d 61 54 79 70 65  ruct sPragmaType
1090: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
10a0: 72 20 2a 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61  r *zName;  /* Na
10b0: 6d 65 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61  me of the pragma
10c0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6d 61 73 6b   */.    int mask
10d0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d  ;           /* M
10e0: 61 73 6b 20 66 6f 72 20 74 68 65 20 64 62 2d 3e  ask for the db->
10f0: 66 6c 61 67 73 20 76 61 6c 75 65 20 2a 2f 0a 20  flags value */. 
1100: 20 7d 20 61 50 72 61 67 6d 61 5b 5d 20 3d 20 7b   } aPragma[] = {
1110: 0a 20 20 20 20 7b 20 22 76 64 62 65 5f 74 72 61  .    { "vdbe_tra
1120: 63 65 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ce",            
1130: 20 20 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72     SQLITE_VdbeTr
1140: 61 63 65 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b  ace     },.    {
1150: 20 22 73 71 6c 5f 74 72 61 63 65 22 2c 20 20 20   "sql_trace",   
1160: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
1170: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20 20 20  ITE_SqlTrace    
1180: 20 20 7d 2c 0a 20 20 20 20 7b 20 22 76 64 62 65    },.    { "vdbe
1190: 5f 6c 69 73 74 69 6e 67 22 2c 20 20 20 20 20 20  _listing",      
11a0: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 56 64         SQLITE_Vd
11b0: 62 65 4c 69 73 74 69 6e 67 20 20 20 7d 2c 0a 20  beListing   },. 
11c0: 20 20 20 7b 20 22 66 75 6c 6c 5f 63 6f 6c 75 6d     { "full_colum
11d0: 6e 5f 6e 61 6d 65 73 22 2c 20 20 20 20 20 20 20  n_names",       
11e0: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
11f0: 61 6d 65 73 20 20 7d 2c 0a 20 20 20 20 7b 20 22  ames  },.    { "
1200: 73 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  short_column_nam
1210: 65 73 22 2c 20 20 20 20 20 20 20 53 51 4c 49 54  es",       SQLIT
1220: 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20  E_ShortColNames 
1230: 7d 2c 0a 20 20 20 20 7b 20 22 63 6f 75 6e 74 5f  },.    { "count_
1240: 63 68 61 6e 67 65 73 22 2c 20 20 20 20 20 20 20  changes",       
1250: 20 20 20 20 20 53 51 4c 49 54 45 5f 43 6f 75 6e       SQLITE_Coun
1260: 74 52 6f 77 73 20 20 20 20 20 7d 2c 0a 20 20 20  tRows     },.   
1270: 20 7b 20 22 65 6d 70 74 79 5f 72 65 73 75 6c 74   { "empty_result
1280: 5f 63 61 6c 6c 62 61 63 6b 73 22 2c 20 20 20 53  _callbacks",   S
1290: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
12a0: 63 6b 20 20 7d 2c 0a 20 20 20 20 2f 2a 20 54 68  ck  },.    /* Th
12b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 56  e following is V
12c0: 45 52 59 20 65 78 70 65 72 69 6d 65 6e 74 61 6c  ERY experimental
12d0: 20 2a 2f 0a 20 20 20 20 7b 20 22 77 72 69 74 61   */.    { "writa
12e0: 62 6c 65 5f 73 63 68 65 6d 61 22 2c 20 20 20 20  ble_schema",    
12f0: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 57 72 69        SQLITE_Wri
1300: 74 65 53 63 68 65 6d 61 20 20 20 7d 2c 0a 20 20  teSchema   },.  
1310: 20 20 7b 20 22 6f 6d 69 74 5f 72 65 61 64 6c 6f    { "omit_readlo
1320: 63 6b 22 2c 20 20 20 20 20 20 20 20 20 20 20 20  ck",            
1330: 53 51 4c 49 54 45 5f 4e 6f 52 65 61 64 6c 6f 63  SQLITE_NoReadloc
1340: 6b 20 20 20 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69  k    },.  };.  i
1350: 6e 74 20 69 3b 0a 20 20 63 6f 6e 73 74 20 73 74  nt i;.  const st
1360: 72 75 63 74 20 73 50 72 61 67 6d 61 54 79 70 65  ruct sPragmaType
1370: 20 2a 70 3b 0a 20 20 66 6f 72 28 69 3d 30 2c 20   *p;.  for(i=0, 
1380: 70 3d 61 50 72 61 67 6d 61 3b 20 69 3c 73 69 7a  p=aPragma; i<siz
1390: 65 6f 66 28 61 50 72 61 67 6d 61 29 2f 73 69 7a  eof(aPragma)/siz
13a0: 65 6f 66 28 61 50 72 61 67 6d 61 5b 30 5d 29 3b  eof(aPragma[0]);
13b0: 20 69 2b 2b 2c 20 70 2b 2b 29 7b 0a 20 20 20 20   i++, p++){.    
13c0: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
13d0: 6d 70 28 7a 4c 65 66 74 2c 20 70 2d 3e 7a 4e 61  mp(zLeft, p->zNa
13e0: 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  me)==0 ){.      
13f0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50  sqlite3 *db = pP
1400: 61 72 73 65 2d 3e 64 62 3b 0a 20 20 20 20 20 20  arse->db;.      
1410: 56 64 62 65 20 2a 76 3b 0a 20 20 20 20 20 20 76  Vdbe *v;.      v
1420: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
1430: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
1440: 20 69 66 28 20 76 20 29 7b 0a 20 20 20 20 20 20   if( v ){.      
1450: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
1460: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ){.          ret
1470: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
1480: 72 73 65 2c 20 70 2d 3e 7a 4e 61 6d 65 2c 20 28  rse, p->zName, (
1490: 64 62 2d 3e 66 6c 61 67 73 20 26 20 70 2d 3e 6d  db->flags & p->m
14a0: 61 73 6b 29 21 3d 30 20 29 3b 0a 20 20 20 20 20  ask)!=0 );.     
14b0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14c0: 20 20 20 20 69 66 28 20 67 65 74 42 6f 6f 6c 65      if( getBoole
14d0: 61 6e 28 7a 52 69 67 68 74 29 20 29 7b 0a 20 20  an(zRight) ){.  
14e0: 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c            db->fl
14f0: 61 67 73 20 7c 3d 20 70 2d 3e 6d 61 73 6b 3b 0a  ags |= p->mask;.
1500: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d  .            db-
1520: 3e 66 6c 61 67 73 20 26 3d 20 7e 70 2d 3e 6d 61  >flags &= ~p->ma
1530: 73 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  sk;.          }.
1540: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1550: 20 20 2f 2a 20 49 66 20 6f 6e 65 20 6f 66 20 74    /* If one of t
1560: 68 65 73 65 20 70 72 61 67 6d 61 73 20 69 73 20  hese pragmas is 
1570: 65 78 65 63 75 74 65 64 2c 20 61 6e 79 20 70 72  executed, any pr
1580: 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
1590: 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 6e 65 65  s.        ** nee
15a0: 64 20 74 6f 20 62 65 20 72 65 63 6f 6d 70 69 6c  d to be recompil
15b0: 65 64 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  ed..        */. 
15c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
15d0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 45 78  beAddOp(v, OP_Ex
15e0: 70 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20  pire, 0, 0);.   
15f0: 20 20 20 7d 0a 20 20 20 20 20 20 72 65 74 75 72     }.      retur
1600: 6e 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  n 1;.    }.  }. 
1610: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 23 65 6e   return 0;.}.#en
1620: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
1630: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20  IT_FLAG_PRAGMAS 
1640: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73  */../*.** Proces
1650: 73 20 61 20 70 72 61 67 6d 61 20 73 74 61 74 65  s a pragma state
1660: 6d 65 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72  ment.  .**.** Pr
1670: 61 67 6d 61 73 20 61 72 65 20 6f 66 20 74 68 69  agmas are of thi
1680: 73 20 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20  s form:.**.**   
1690: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
16a0: 61 73 65 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65  ase.]id [= value
16b0: 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e  ].**.** The iden
16c0: 74 69 66 69 65 72 20 6d 69 67 68 74 20 61 6c 73  tifier might als
16d0: 6f 20 62 65 20 61 20 73 74 72 69 6e 67 2e 20 20  o be a string.  
16e0: 54 68 65 20 76 61 6c 75 65 20 69 73 20 61 20 73  The value is a s
16f0: 74 72 69 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64  tring, and.** id
1700: 65 6e 74 69 66 69 65 72 2c 20 6f 72 20 61 20 6e  entifier, or a n
1710: 75 6d 62 65 72 2e 20 20 49 66 20 6d 69 6e 75 73  umber.  If minus
1720: 46 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  Flag is true, th
1730: 65 6e 20 74 68 65 20 76 61 6c 75 65 20 69 73 0a  en the value is.
1740: 2a 2a 20 61 20 6e 75 6d 62 65 72 20 74 68 61 74  ** a number that
1750: 20 77 61 73 20 70 72 65 63 65 64 65 64 20 62 79   was preceded by
1760: 20 61 20 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a   a minus sign..*
1770: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6c 65 66 74  *.** If the left
1780: 20 73 69 64 65 20 69 73 20 22 64 61 74 61 62 61   side is "databa
1790: 73 65 2e 69 64 22 20 74 68 65 6e 20 70 49 64 31  se.id" then pId1
17a0: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
17b0: 20 6e 61 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64   name.** and pId
17c0: 32 20 69 73 20 74 68 65 20 69 64 2e 20 20 49 66  2 is the id.  If
17d0: 20 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 69   the left side i
17e0: 73 20 6a 75 73 74 20 22 69 64 22 20 74 68 65 6e  s just "id" then
17f0: 20 70 49 64 31 20 69 73 20 74 68 65 0a 2a 2a 20   pId1 is the.** 
1800: 69 64 20 61 6e 64 20 70 49 64 32 20 69 73 20 61  id and pId2 is a
1810: 6e 79 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e  ny empty string.
1820: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
1830: 50 72 61 67 6d 61 28 0a 20 20 50 61 72 73 65 20  Pragma(.  Parse 
1840: 2a 70 50 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65  *pParse, .  Toke
1850: 6e 20 2a 70 49 64 31 2c 20 20 20 20 20 20 20 20  n *pId1,        
1860: 2f 2a 20 46 69 72 73 74 20 70 61 72 74 20 6f 66  /* First part of
1870: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 66   [database.]id f
1880: 69 65 6c 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  ield */.  Token 
1890: 2a 70 49 64 32 2c 20 20 20 20 20 20 20 20 2f 2a  *pId2,        /*
18a0: 20 53 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20   Second part of 
18b0: 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69  [database.]id fi
18c0: 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  eld, or NULL */.
18d0: 20 20 54 6f 6b 65 6e 20 2a 70 56 61 6c 75 65 2c    Token *pValue,
18e0: 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 66        /* Token f
18f0: 6f 72 20 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e  or <value>, or N
1900: 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 6d 69 6e  ULL */.  int min
1910: 75 73 46 6c 61 67 20 20 20 20 20 20 20 2f 2a 20  usFlag       /* 
1920: 54 72 75 65 20 69 66 20 61 20 27 2d 27 20 73 69  True if a '-' si
1930: 67 6e 20 70 72 65 63 65 64 65 64 20 3c 76 61 6c  gn preceded <val
1940: 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72  ue> */.){.  char
1950: 20 2a 7a 4c 65 66 74 20 3d 20 30 3b 20 20 20 20   *zLeft = 0;    
1960: 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e     /* Nul-termin
1970: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
1980: 67 20 3c 69 64 3e 20 2a 2f 0a 20 20 63 68 61 72  g <id> */.  char
1990: 20 2a 7a 52 69 67 68 74 20 3d 20 30 3b 20 20 20   *zRight = 0;   
19a0: 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e     /* Nul-termin
19b0: 61 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e  ated UTF-8 strin
19c0: 67 20 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55  g <value>, or NU
19d0: 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  LL */.  const ch
19e0: 61 72 20 2a 7a 44 62 20 3d 20 30 3b 20 20 20 2f  ar *zDb = 0;   /
19f0: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 6e  * The database n
1a00: 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ame */.  Token *
1a10: 70 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  pId;            
1a20: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 3c 69  /* Pointer to <i
1a30: 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a 20 20 69 6e  d> token */.  in
1a40: 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1a50: 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
1a60: 20 69 6e 64 65 78 20 66 6f 72 20 3c 64 61 74 61   index for <data
1a70: 62 61 73 65 3e 20 2a 2f 0a 20 20 73 71 6c 69 74  base> */.  sqlit
1a80: 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65 2d  e3 *db = pParse-
1a90: 3e 64 62 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  >db;.  Db *pDb;.
1aa0: 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c 69    Vdbe *v = sqli
1ab0: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
1ac0: 65 29 3b 0a 20 20 69 66 28 20 76 3d 3d 30 20 29  e);.  if( v==0 )
1ad0: 20 72 65 74 75 72 6e 3b 0a 0a 20 20 2f 2a 20 49   return;..  /* I
1ae0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 5b 64 61  nterpret the [da
1af0: 74 61 62 61 73 65 2e 5d 20 70 61 72 74 20 6f 66  tabase.] part of
1b00: 20 74 68 65 20 70 72 61 67 6d 61 20 73 74 61 74   the pragma stat
1b10: 65 6d 65 6e 74 2e 20 69 44 62 20 69 73 20 74 68  ement. iDb is th
1b20: 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20  e.  ** index of 
1b30: 74 68 65 20 64 61 74 61 62 61 73 65 20 74 68 69  the database thi
1b40: 73 20 70 72 61 67 6d 61 20 69 73 20 62 65 69 6e  s pragma is bein
1b50: 67 20 61 70 70 6c 69 65 64 20 74 6f 20 69 6e 20  g applied to in 
1b60: 64 62 2e 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69  db.aDb[]. */.  i
1b70: 44 62 20 3d 20 73 71 6c 69 74 65 33 54 77 6f 50  Db = sqlite3TwoP
1b80: 61 72 74 4e 61 6d 65 28 70 50 61 72 73 65 2c 20  artName(pParse, 
1b90: 70 49 64 31 2c 20 70 49 64 32 2c 20 26 70 49 64  pId1, pId2, &pId
1ba0: 29 3b 0a 20 20 69 66 28 20 69 44 62 3c 30 20 29  );.  if( iDb<0 )
1bb0: 20 72 65 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d   return;.  pDb =
1bc0: 20 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a   &db->aDb[iDb];.
1bd0: 0a 20 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74  .  zLeft = sqlit
1be0: 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
1bf0: 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65  pId);.  if( !zLe
1c00: 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69  ft ) return;.  i
1c10: 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a  f( minusFlag ){.
1c20: 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c      zRight = sql
1c30: 69 74 65 33 4d 50 72 69 6e 74 66 28 22 2d 25 54  ite3MPrintf("-%T
1c40: 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65  ", pValue);.  }e
1c50: 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  lse{.    zRight 
1c60: 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f  = sqlite3NameFro
1c70: 6d 54 6f 6b 65 6e 28 70 56 61 6c 75 65 29 3b 0a  mToken(pValue);.
1c80: 20 20 7d 0a 0a 20 20 7a 44 62 20 3d 20 28 28 69    }..  zDb = ((i
1c90: 44 62 3e 30 29 3f 70 44 62 2d 3e 7a 4e 61 6d 65  Db>0)?pDb->zName
1ca0: 3a 30 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  :0);.  if( sqlit
1cb0: 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61 72  e3AuthCheck(pPar
1cc0: 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d  se, SQLITE_PRAGM
1cd0: 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74  A, zLeft, zRight
1ce0: 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f  , zDb) ){.    go
1cf0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
1d00: 20 7d 0a 20 0a 23 69 66 6e 64 65 66 20 53 51 4c   }. .#ifndef SQL
1d10: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
1d20: 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a  RAGMAS.  /*.  **
1d30: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
1d40: 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68  se.]default_cach
1d50: 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41  e_size.  **  PRA
1d60: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64  GMA [database.]d
1d70: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
1d80: 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  e=N.  **.  ** Th
1d90: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
1da0: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
1db0: 20 70 65 72 73 69 73 74 65 6e 74 20 73 65 74 74   persistent sett
1dc0: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
1dd0: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
1de0: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72 65 74  .  The value ret
1df0: 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d 61 78  urned is the max
1e00: 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 20  imum number of. 
1e10: 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74 68 65   ** pages in the
1e20: 20 70 61 67 65 20 63 61 63 68 65 2e 20 20 54 68   page cache.  Th
1e30: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
1e40: 74 73 20 62 6f 74 68 20 74 68 65 20 63 75 72 72  ts both the curr
1e50: 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  ent.  ** page ca
1e60: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 20 61  che size value a
1e70: 6e 64 20 74 68 65 20 70 65 72 73 69 73 74 65 6e  nd the persisten
1e80: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
1e90: 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73 74 6f  e value.  ** sto
1ea0: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
1eb0: 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a 20  ase file..  **. 
1ec0: 20 2a 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20   ** The default 
1ed0: 63 61 63 68 65 20 73 69 7a 65 20 69 73 20 73 74  cache size is st
1ee0: 6f 72 65 64 20 69 6e 20 6d 65 74 61 2d 76 61 6c  ored in meta-val
1ef0: 75 65 20 32 20 6f 66 20 70 61 67 65 20 31 20 6f  ue 2 of page 1 o
1f00: 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62  f the.  ** datab
1f10: 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 63  ase file.  The c
1f20: 61 63 68 65 20 73 69 7a 65 20 69 73 20 61 63 74  ache size is act
1f30: 75 61 6c 6c 79 20 74 68 65 20 61 62 73 6f 6c 75  ually the absolu
1f40: 74 65 20 76 61 6c 75 65 20 6f 66 0a 20 20 2a 2a  te value of.  **
1f50: 20 74 68 69 73 20 6d 65 6d 6f 72 79 20 6c 6f 63   this memory loc
1f60: 61 74 69 6f 6e 2e 20 20 54 68 65 20 73 69 67 6e  ation.  The sign
1f70: 20 6f 66 20 6d 65 74 61 2d 76 61 6c 75 65 20 32   of meta-value 2
1f80: 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 0a   determines the.
1f90: 20 20 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73    ** synchronous
1fa0: 20 73 65 74 74 69 6e 67 2e 20 20 41 20 6e 65 67   setting.  A neg
1fb0: 61 74 69 76 65 20 76 61 6c 75 65 20 6d 65 61 6e  ative value mean
1fc0: 73 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 69 73  s synchronous is
1fd0: 20 6f 66 66 0a 20 20 2a 2a 20 61 6e 64 20 61 20   off.  ** and a 
1fe0: 70 6f 73 69 74 69 76 65 20 76 61 6c 75 65 20 6d  positive value m
1ff0: 65 61 6e 73 20 73 79 6e 63 68 72 6f 6e 6f 75 73  eans synchronous
2000: 20 69 73 20 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 69   is on..  */.  i
2010: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
2020: 70 28 7a 4c 65 66 74 2c 22 64 65 66 61 75 6c 74  p(zLeft,"default
2030: 5f 63 61 63 68 65 5f 73 69 7a 65 22 29 3d 3d 30  _cache_size")==0
2040: 20 29 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63   ){.    static c
2050: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
2060: 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d  getCacheSize[] =
2070: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65   {.      { OP_Re
2080: 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 32 2c  adCookie,  0, 2,
2090: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 2f 2a 20          0},  /* 
20a0: 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  0 */.      { OP_
20b0: 41 62 73 56 61 6c 75 65 2c 20 20 20 20 30 2c 20  AbsValue,    0, 
20c0: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  0,        0},.  
20d0: 20 20 20 20 7b 20 4f 50 5f 44 75 70 2c 20 20 20      { OP_Dup,   
20e0: 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20        0, 0,     
20f0: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
2100: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30  P_Integer,     0
2110: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 0,        0},.
2120: 20 20 20 20 20 20 7b 20 4f 50 5f 4e 65 2c 20 20        { OP_Ne,  
2130: 20 20 20 20 20 20 20 20 30 2c 20 36 2c 20 20 20          0, 6,   
2140: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
2150: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
2160: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
2170: 2c 20 20 2f 2a 20 35 20 2a 2f 0a 20 20 20 20 20  ,  /* 5 */.     
2180: 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20   { OP_Callback, 
2190: 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20     1, 0,        
21a0: 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69  0},.    };.    i
21b0: 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28  nt addr;.    if(
21c0: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
21d0: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
21e0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
21f0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
2200: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
2210: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
2220: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
2230: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
2240: 76 2c 20 30 2c 20 22 63 61 63 68 65 5f 73 69 7a  v, 0, "cache_siz
2250: 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  e", P3_STATIC);.
2260: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
2270: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
2280: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67  t(v, ArraySize(g
2290: 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65  etCacheSize), ge
22a0: 74 43 61 63 68 65 53 69 7a 65 29 3b 0a 20 20 20  tCacheSize);.   
22b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
22c0: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20  angeP1(v, addr, 
22d0: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
22e0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
22f0: 76 2c 20 61 64 64 72 2b 35 2c 20 4d 41 58 5f 50  v, addr+5, MAX_P
2300: 41 47 45 53 29 3b 0a 20 20 20 20 7d 65 6c 73 65  AGES);.    }else
2310: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
2320: 20 3d 20 61 74 6f 69 28 7a 52 69 67 68 74 29 3b   = atoi(zRight);
2330: 0a 20 20 20 20 20 20 69 66 28 20 73 69 7a 65 3c  .      if( size<
2340: 30 20 29 20 73 69 7a 65 20 3d 20 2d 73 69 7a 65  0 ) size = -size
2350: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
2360: 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
2370: 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44  on(pParse, 0, iD
2380: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
2390: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
23a0: 5f 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c 20  _Integer, size, 
23b0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
23c0: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
23d0: 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 69 44 62  _ReadCookie, iDb
23e0: 2c 20 32 29 3b 0a 20 20 20 20 20 20 61 64 64 72  , 2);.      addr
23f0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
2400: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
2410: 72 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  r, 0, 0);.      
2420: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
2430: 28 76 2c 20 4f 50 5f 47 65 2c 20 30 2c 20 61 64  (v, OP_Ge, 0, ad
2440: 64 72 2b 33 29 3b 0a 20 20 20 20 20 20 73 71 6c  dr+3);.      sql
2450: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c  ite3VdbeAddOp(v,
2460: 20 4f 50 5f 4e 65 67 61 74 69 76 65 2c 20 30 2c   OP_Negative, 0,
2470: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
2480: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
2490: 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62  P_SetCookie, iDb
24a0: 2c 20 32 29 3b 0a 20 20 20 20 20 20 70 44 62 2d  , 2);.      pDb-
24b0: 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69  >cache_size = si
24c0: 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ze;.      sqlite
24d0: 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69  3BtreeSetCacheSi
24e0: 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62  ze(pDb->pBt, pDb
24f0: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
2500: 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20     }.  }else..  
2510: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
2520: 5b 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65 5f  [database.]page_
2530: 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  size.  **  PRAGM
2540: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61 67  A [database.]pag
2550: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
2560: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
2570: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
2580: 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  rrent setting fo
2590: 72 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62  r the.  ** datab
25a0: 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 69 6e  ase page size in
25b0: 20 62 79 74 65 73 2e 20 20 54 68 65 20 73 65 63   bytes.  The sec
25c0: 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 74 68  ond form sets th
25d0: 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  e.  ** database 
25e0: 70 61 67 65 20 73 69 7a 65 20 76 61 6c 75 65 2e  page size value.
25f0: 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e 20    The value can 
2600: 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 0a 20  only be set if. 
2610: 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
2620: 20 68 61 73 20 6e 6f 74 20 79 65 74 20 62 65 65   has not yet bee
2630: 6e 20 63 72 65 61 74 65 64 2e 0a 20 20 2a 2f 0a  n created..  */.
2640: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
2650: 49 43 6d 70 28 7a 4c 65 66 74 2c 22 70 61 67 65  ICmp(zLeft,"page
2660: 5f 73 69 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20  _size")==0 ){.  
2670: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70    Btree *pBt = p
2680: 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 66 28  Db->pBt;.    if(
2690: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
26a0: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 70 42 74    int size = pBt
26b0: 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 47   ? sqlite3BtreeG
26c0: 65 74 50 61 67 65 53 69 7a 65 28 70 42 74 29 20  etPageSize(pBt) 
26d0: 3a 20 30 3b 0a 20 20 20 20 20 20 72 65 74 75 72  : 0;.      retur
26e0: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
26f0: 65 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 20  e, "page_size", 
2700: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  size);.    }else
2710: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  {.      sqlite3B
2720: 74 72 65 65 53 65 74 50 61 67 65 53 69 7a 65 28  treeSetPageSize(
2730: 70 42 74 2c 20 61 74 6f 69 28 7a 52 69 67 68 74  pBt, atoi(zRight
2740: 29 2c 20 2d 31 29 3b 0a 20 20 20 20 7d 0a 20 20  ), -1);.    }.  
2750: 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20  }else.#endif /* 
2760: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
2770: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 20 20  R_PRAGMAS */..  
2780: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
2790: 5b 64 61 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f  [database.]auto_
27a0: 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41  vacuum.  **  PRA
27b0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61  GMA [database.]a
27c0: 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a  uto_vacuum=N.  *
27d0: 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65  *.  ** Get or se
27e0: 74 20 74 68 65 20 28 62 6f 6f 6c 65 61 6e 29 20  t the (boolean) 
27f0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74  value of the dat
2800: 61 62 61 73 65 20 27 61 75 74 6f 2d 76 61 63 75  abase 'auto-vacu
2810: 75 6d 27 20 70 61 72 61 6d 65 74 65 72 2e 0a 20  um' parameter.. 
2820: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
2830: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
2840: 55 4d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  UM.  if( sqlite3
2850: 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 61  StrICmp(zLeft,"a
2860: 75 74 6f 5f 76 61 63 75 75 6d 22 29 3d 3d 30 20  uto_vacuum")==0 
2870: 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42  ){.    Btree *pB
2880: 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  t = pDb->pBt;.  
2890: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
28a0: 0a 20 20 20 20 20 20 69 6e 74 20 61 75 74 6f 5f  .      int auto_
28b0: 76 61 63 75 75 6d 20 3d 20 0a 20 20 20 20 20 20  vacuum = .      
28c0: 20 20 20 20 70 42 74 20 3f 20 73 71 6c 69 74 65      pBt ? sqlite
28d0: 33 42 74 72 65 65 47 65 74 41 75 74 6f 56 61 63  3BtreeGetAutoVac
28e0: 75 75 6d 28 70 42 74 29 20 3a 20 53 51 4c 49 54  uum(pBt) : SQLIT
28f0: 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 56 41  E_DEFAULT_AUTOVA
2900: 43 55 55 4d 3b 0a 20 20 20 20 20 20 72 65 74 75  CUUM;.      retu
2910: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
2920: 73 65 2c 20 22 61 75 74 6f 5f 76 61 63 75 75 6d  se, "auto_vacuum
2930: 22 2c 20 61 75 74 6f 5f 76 61 63 75 75 6d 29 3b  ", auto_vacuum);
2940: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2950: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
2960: 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c  tAutoVacuum(pBt,
2970: 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67   getBoolean(zRig
2980: 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  ht));.    }.  }e
2990: 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  lse.#endif..#ifn
29a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
29b0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20  PAGER_PRAGMAS.  
29c0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
29d0: 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65  [database.]cache
29e0: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
29f0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61  MA [database.]ca
2a00: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
2a10: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
2a20: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
2a30: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65  current local se
2a40: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
2a50: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
2a60: 7a 65 2e 20 20 54 68 65 20 6c 6f 63 61 6c 20 73  ze.  The local s
2a70: 65 74 74 69 6e 67 20 63 61 6e 20 62 65 20 64 69  etting can be di
2a80: 66 66 65 72 65 6e 74 20 66 72 6f 6d 0a 20 20 2a  fferent from.  *
2a90: 2a 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74  * the persistent
2aa0: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
2ab0: 65 20 74 68 61 74 20 69 73 20 73 74 6f 72 65 64  e that is stored
2ac0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2ad0: 0a 20 20 2a 2a 20 66 69 6c 65 20 69 74 73 65 6c  .  ** file itsel
2ae0: 66 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72 65  f.  The value re
2af0: 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d 61  turned is the ma
2b00: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a  ximum number of.
2b10: 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74 68    ** pages in th
2b20: 65 20 70 61 67 65 20 63 61 63 68 65 2e 20 20 54  e page cache.  T
2b30: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73  he second form s
2b40: 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20  ets the local.  
2b50: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
2b60: 7a 65 20 76 61 6c 75 65 2e 20 20 49 74 20 64 6f  ze value.  It do
2b70: 65 73 20 6e 6f 74 20 63 68 61 6e 67 65 20 74 68  es not change th
2b80: 65 20 70 65 72 73 69 73 74 65 6e 74 0a 20 20 2a  e persistent.  *
2b90: 2a 20 63 61 63 68 65 20 73 69 7a 65 20 73 74 6f  * cache size sto
2ba0: 72 65 64 20 6f 6e 20 74 68 65 20 64 69 73 6b 20  red on the disk 
2bb0: 73 6f 20 74 68 65 20 63 61 63 68 65 20 73 69 7a  so the cache siz
2bc0: 65 20 77 69 6c 6c 20 72 65 76 65 72 74 0a 20 20  e will revert.  
2bd0: 2a 2a 20 74 6f 20 69 74 73 20 64 65 66 61 75 6c  ** to its defaul
2be0: 74 20 76 61 6c 75 65 20 77 68 65 6e 20 74 68 65  t value when the
2bf0: 20 64 61 74 61 62 61 73 65 20 69 73 20 63 6c 6f   database is clo
2c00: 73 65 64 20 61 6e 64 20 72 65 6f 70 65 6e 65 64  sed and reopened
2c10: 2e 0a 20 20 2a 2a 20 4e 20 73 68 6f 75 6c 64 20  ..  ** N should 
2c20: 62 65 20 61 20 70 6f 73 69 74 69 76 65 20 69 6e  be a positive in
2c30: 74 65 67 65 72 2e 0a 20 20 2a 2f 0a 20 20 69 66  teger..  */.  if
2c40: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
2c50: 28 7a 4c 65 66 74 2c 22 63 61 63 68 65 5f 73 69  (zLeft,"cache_si
2c60: 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69  ze")==0 ){.    i
2c70: 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
2c80: 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
2c90: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
2ca0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
2cb0: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
2cc0: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
2cd0: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 70   "cache_size", p
2ce0: 44 62 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b  Db->cache_size);
2cf0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
2d00: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 61 74 6f    int size = ato
2d10: 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  i(zRight);.     
2d20: 20 69 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69   if( size<0 ) si
2d30: 7a 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20  ze = -size;.    
2d40: 20 20 70 44 62 2d 3e 63 61 63 68 65 5f 73 69 7a    pDb->cache_siz
2d50: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20  e = size;.      
2d60: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
2d70: 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42  acheSize(pDb->pB
2d80: 74 2c 20 70 44 62 2d 3e 63 61 63 68 65 5f 73 69  t, pDb->cache_si
2d90: 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  ze);.    }.  }el
2da0: 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  se..  /*.  **   
2db0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
2dc0: 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  e.  **   PRAGMA 
2dd0: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65  temp_store = "de
2de0: 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c  fault"|"memory"|
2df0: 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  "file".  **.  **
2e00: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
2e10: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
2e20: 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65  f the temp_store
2e30: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
2e40: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
2e50: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
2e60: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
2e70: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
2e80: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a   the default.  *
2e90: 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  * value will be 
2ea0: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
2eb0: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
2ec0: 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20  ase is opened.. 
2ed0: 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68   **.  ** Note th
2ee0: 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  at it is possibl
2ef0: 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72  e for the librar
2f00: 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  y compile-time o
2f10: 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f  ptions to.  ** o
2f20: 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65 74  verride this set
2f30: 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ting.  */.  if( 
2f40: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
2f50: 4c 65 66 74 2c 20 22 74 65 6d 70 5f 73 74 6f 72  Left, "temp_stor
2f60: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  e")==0 ){.    if
2f70: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
2f80: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
2f90: 6e 74 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70  nt(pParse, "temp
2fa0: 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d  _store", db->tem
2fb0: 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65  p_store);.    }e
2fc0: 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e 67  lse{.      chang
2fd0: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
2fe0: 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  rse, zRight);.  
2ff0: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f    }.  }else..  /
3000: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
3010: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
3020: 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41 47  tory.  **   PRAG
3030: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
3040: 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64 69  rectory = ""|"di
3050: 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20  rectory_name".  
3060: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
3070: 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20  r set the local 
3080: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d  value of the tem
3090: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
30a0: 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  y flag.  Changin
30b0: 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65  g.  ** the value
30c0: 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63   sets a specific
30d0: 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62 65   directory to be
30e0: 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
30f0: 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a 20  ary files..  ** 
3100: 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c  Setting to a nul
3110: 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73  l string reverts
3120: 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20   to the default 
3130: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
3140: 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a 2a  ory search..  **
3150: 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64 69   If temporary di
3160: 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67  rectory is chang
3170: 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69 64  ed, then invalid
3180: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e 0a  ateTempStorage..
3190: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 69 66 28 20    **.  */.  if( 
31a0: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
31b0: 4c 65 66 74 2c 20 22 74 65 6d 70 5f 73 74 6f 72  Left, "temp_stor
31c0: 65 5f 64 69 72 65 63 74 6f 72 79 22 29 3d 3d 30  e_directory")==0
31d0: 20 29 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   ){.    if( !zRi
31e0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ght ){.      if(
31f0: 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69   sqlite3_temp_di
3200: 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20  rectory ){.     
3210: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
3220: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
3230: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
3240: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
3250: 20 30 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f   0, "temp_store_
3260: 64 69 72 65 63 74 6f 72 79 22 2c 20 50 33 5f 53  directory", P3_S
3270: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
3280: 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76  sqlite3VdbeOp3(v
3290: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
32a0: 20 30 2c 20 73 71 6c 69 74 65 33 5f 74 65 6d 70   0, sqlite3_temp
32b0: 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a  _directory, 0);.
32c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
32d0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43  dbeAddOp(v, OP_C
32e0: 61 6c 6c 62 61 63 6b 2c 20 31 2c 20 30 29 3b 0a  allback, 1, 0);.
32f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
3300: 65 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  e{.      if( zRi
3310: 67 68 74 5b 30 5d 20 26 26 20 21 73 71 6c 69 74  ght[0] && !sqlit
3320: 65 33 4f 73 49 73 44 69 72 57 72 69 74 61 62 6c  e3OsIsDirWritabl
3330: 65 28 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20  e(zRight) ){.   
3340: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
3350: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f  rMsg(pParse, "no
3360: 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72  t a writable dir
3370: 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20  ectory");.      
3380: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
3390: 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  t;.      }.     
33a0: 20 69 66 28 20 54 45 4d 50 5f 53 54 4f 52 45 3d   if( TEMP_STORE=
33b0: 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20 28 54 45  =0.       || (TE
33c0: 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64  MP_STORE==1 && d
33d0: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31  b->temp_store<=1
33e0: 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 54 45 4d  ).       || (TEM
33f0: 50 5f 53 54 4f 52 45 3d 3d 32 20 26 26 20 64 62  P_STORE==2 && db
3400: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 31 29  ->temp_store==1)
3410: 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
3420: 20 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70    invalidateTemp
3430: 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 29 3b  Storage(pParse);
3440: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
3450: 71 6c 69 74 65 46 72 65 65 28 73 71 6c 69 74 65  qliteFree(sqlite
3460: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
3470: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  );.      if( zRi
3480: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
3490: 20 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64    sqlite3_temp_d
34a0: 69 72 65 63 74 6f 72 79 20 3d 20 7a 52 69 67 68  irectory = zRigh
34b0: 74 3b 0a 20 20 20 20 20 20 20 20 7a 52 69 67 68  t;.        zRigh
34c0: 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c  t = 0;.      }el
34d0: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
34e0: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
34f0: 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ry = 0;.      }.
3500: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20      }.  }else.. 
3510: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
3520: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 79 6e  A [database.]syn
3530: 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20 20  chronous.  **   
3540: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
3550: 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46  .]synchronous=OF
3560: 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c  F|ON|NORMAL|FULL
3570: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
3580: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63  n or set the loc
3590: 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
35a0: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67  synchronous flag
35b0: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
35c0: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
35d0: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63   does not make c
35e0: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69  hanges to the di
35f0: 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65 0a  sk file and the.
3600: 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76 61 6c    ** default val
3610: 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f  ue will be resto
3620: 72 65 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d  red the next tim
3630: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  e the database i
3640: 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20  s.  ** opened.. 
3650: 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65   */.  if( sqlite
3660: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22  3StrICmp(zLeft,"
3670: 73 79 6e 63 68 72 6f 6e 6f 75 73 22 29 3d 3d 30  synchronous")==0
3680: 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   ){.    if( sqli
3690: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
36a0: 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
36b0: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 69 66 28  gma_out;.    if(
36c0: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
36d0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
36e0: 74 28 70 50 61 72 73 65 2c 20 22 73 79 6e 63 68  t(pParse, "synch
36f0: 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61  ronous", pDb->sa
3700: 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20  fety_level-1);. 
3710: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3720: 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d  if( !db->autoCom
3730: 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73  mit ){.        s
3740: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
3750: 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20 20  Parse, .        
3760: 20 20 20 20 22 53 61 66 65 74 79 20 6c 65 76 65      "Safety leve
3770: 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61  l may not be cha
3780: 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74 72  nged inside a tr
3790: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
37a0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
37b0: 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65    pDb->safety_le
37c0: 76 65 6c 20 3d 20 67 65 74 53 61 66 65 74 79 4c  vel = getSafetyL
37d0: 65 76 65 6c 28 7a 52 69 67 68 74 29 2b 31 3b 0a  evel(zRight)+1;.
37e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
37f0: 74 72 65 65 53 65 74 53 61 66 65 74 79 4c 65 76  treeSetSafetyLev
3800: 65 6c 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62  el(pDb->pBt, pDb
3810: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 29 3b  ->safety_level);
3820: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
3830: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
3840: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
3850: 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  ER_PRAGMAS */..#
3860: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
3870: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a  IT_FLAG_PRAGMAS.
3880: 20 20 69 66 28 20 66 6c 61 67 50 72 61 67 6d 61    if( flagPragma
3890: 28 70 50 61 72 73 65 2c 20 7a 4c 65 66 74 2c 20  (pParse, zLeft, 
38a0: 7a 52 69 67 68 74 29 20 29 7b 0a 20 20 20 20 2f  zRight) ){.    /
38b0: 2a 20 54 68 65 20 66 6c 61 67 50 72 61 67 6d 61  * The flagPragma
38c0: 28 29 20 73 75 62 72 6f 75 74 69 6e 65 20 61 6c  () subroutine al
38d0: 73 6f 20 67 65 6e 65 72 61 74 65 73 20 61 6e 79  so generates any
38e0: 20 6e 65 63 65 73 73 61 72 79 20 63 6f 64 65 0a   necessary code.
38f0: 20 20 20 20 2a 2a 20 74 68 65 72 65 20 69 73 20      ** there is 
3900: 6e 6f 74 68 69 6e 67 20 6d 6f 72 65 20 74 6f 20  nothing more to 
3910: 64 6f 20 68 65 72 65 20 2a 2f 0a 20 20 7d 65 6c  do here */.  }el
3920: 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  se.#endif /* SQL
3930: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
3940: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
3950: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  f SQLITE_OMIT_SC
3960: 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f  HEMA_PRAGMAS.  /
3970: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
3980: 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c  table_info(<tabl
3990: 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  e>).  **.  ** Re
39a0: 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  turn a single ro
39b0: 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  w for each colum
39c0: 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74  n of the named t
39d0: 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e  able. The column
39e0: 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65  s of.  ** the re
39f0: 74 75 72 6e 65 64 20 64 61 74 61 20 73 65 74 20  turned data set 
3a00: 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63  are:.  **.  ** c
3a10: 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d  id:        Colum
3a20: 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66  n id (numbered f
3a30: 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
3a40: 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20 30  t, starting at 0
3a50: 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20  ).  ** name:    
3a60: 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20     Column name. 
3a70: 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20   ** type:       
3a80: 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  Column declarati
3a90: 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f  on type..  ** no
3aa0: 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69  tnull:    True i
3ab0: 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20  f 'NOT NULL' is 
3ac0: 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64  part of column d
3ad0: 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20  eclaration.  ** 
3ae0: 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20  dflt_value: The 
3af0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
3b00: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66  r the column, if
3b10: 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 69 66 28   any..  */.  if(
3b20: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
3b30: 7a 4c 65 66 74 2c 20 22 74 61 62 6c 65 5f 69 6e  zLeft, "table_in
3b40: 66 6f 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68  fo")==0 && zRigh
3b50: 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a  t ){.    Table *
3b60: 70 54 61 62 3b 0a 20 20 20 20 69 66 28 20 73 71  pTab;.    if( sq
3b70: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
3b80: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
3b90: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 70  ragma_out;.    p
3ba0: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
3bb0: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
3bc0: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
3bd0: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 69   pTab ){.      i
3be0: 6e 74 20 69 3b 0a 20 20 20 20 20 20 73 71 6c 69  nt i;.      sqli
3bf0: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
3c00: 73 28 76 2c 20 36 29 3b 0a 20 20 20 20 20 20 73  s(v, 6);.      s
3c10: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
3c20: 4e 61 6d 65 28 76 2c 20 30 2c 20 22 63 69 64 22  Name(v, 0, "cid"
3c30: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
3c40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
3c50: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
3c60: 22 6e 61 6d 65 22 2c 20 50 33 5f 53 54 41 54 49  "name", P3_STATI
3c70: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
3c80: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
3c90: 76 2c 20 32 2c 20 22 74 79 70 65 22 2c 20 50 33  v, 2, "type", P3
3ca0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
3cb0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
3cc0: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 22 6e 6f 74  lName(v, 3, "not
3cd0: 6e 75 6c 6c 22 2c 20 50 33 5f 53 54 41 54 49 43  null", P3_STATIC
3ce0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3cf0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
3d00: 2c 20 34 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65  , 4, "dflt_value
3d10: 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  ", P3_STATIC);. 
3d20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
3d30: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c  SetColName(v, 5,
3d40: 20 22 70 6b 22 2c 20 50 33 5f 53 54 41 54 49 43   "pk", P3_STATIC
3d50: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
3d60: 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
3d70: 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62 29  es(pParse, pTab)
3d80: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
3d90: 20 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69   i<pTab->nCol; i
3da0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
3db0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c  ite3VdbeAddOp(v,
3dc0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20   OP_Integer, i, 
3dd0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
3de0: 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50  te3VdbeOp3(v, OP
3df0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 30 2c 20  _String8, 0, 0, 
3e00: 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 7a 4e  pTab->aCol[i].zN
3e10: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ame, 0);.       
3e20: 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33 28   sqlite3VdbeOp3(
3e30: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
3e40: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
3e50: 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 7a 54  pTab->aCol[i].zT
3e60: 79 70 65 20 3f 20 70 54 61 62 2d 3e 61 43 6f 6c  ype ? pTab->aCol
3e70: 5b 69 5d 2e 7a 54 79 70 65 20 3a 20 22 6e 75 6d  [i].zType : "num
3e80: 65 72 69 63 22 2c 20 30 29 3b 0a 20 20 20 20 20  eric", 0);.     
3e90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
3ea0: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
3eb0: 72 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 5d  r, pTab->aCol[i]
3ec0: 2e 6e 6f 74 4e 75 6c 6c 2c 20 30 29 3b 0a 20 20  .notNull, 0);.  
3ed0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
3ee0: 72 43 6f 64 65 28 70 50 61 72 73 65 2c 20 70 54  rCode(pParse, pT
3ef0: 61 62 2d 3e 61 43 6f 6c 5b 69 5d 2e 70 44 66 6c  ab->aCol[i].pDfl
3f00: 74 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  t);.        sqli
3f10: 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20  te3VdbeAddOp(v, 
3f20: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54 61 62  OP_Integer, pTab
3f30: 2d 3e 61 43 6f 6c 5b 69 5d 2e 69 73 50 72 69 6d  ->aCol[i].isPrim
3f40: 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Key, 0);.       
3f50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
3f60: 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b  p(v, OP_Callback
3f70: 2c 20 36 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d  , 6, 0);.      }
3f80: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a  .    }.  }else..
3f90: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
3fa0: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 69 6e 64  ICmp(zLeft, "ind
3fb0: 65 78 5f 69 6e 66 6f 22 29 3d 3d 30 20 26 26 20  ex_info")==0 && 
3fc0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e  zRight ){.    In
3fd0: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54  dex *pIdx;.    T
3fe0: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
3ff0: 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53  if( sqlite3ReadS
4000: 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20  chema(pParse) ) 
4010: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
4020: 0a 20 20 20 20 70 49 64 78 20 3d 20 73 71 6c 69  .    pIdx = sqli
4030: 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62 2c  te3FindIndex(db,
4040: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
4050: 20 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a 20     if( pIdx ){. 
4060: 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
4070: 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e 70    pTab = pIdx->p
4080: 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c  Table;.      sql
4090: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
40a0: 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 20 20  ls(v, 3);.      
40b0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
40c0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 22 73 65 71  lName(v, 0, "seq
40d0: 6e 6f 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  no", P3_STATIC);
40e0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
40f0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
4100: 31 2c 20 22 63 69 64 22 2c 20 50 33 5f 53 54 41  1, "cid", P3_STA
4110: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
4120: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
4130: 65 28 76 2c 20 32 2c 20 22 6e 61 6d 65 22 2c 20  e(v, 2, "name", 
4140: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
4150: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 49 64    for(i=0; i<pId
4160: 78 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20 69 2b 2b 29  x->nColumn; i++)
4170: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6e  {.        int cn
4180: 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c  um = pIdx->aiCol
4190: 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20  umn[i];.        
41a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
41b0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
41c0: 69 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  i, 0);.        s
41d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
41e0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 63  v, OP_Integer, c
41f0: 6e 75 6d 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  num, 0);.       
4200: 20 61 73 73 65 72 74 28 20 70 54 61 62 2d 3e 6e   assert( pTab->n
4210: 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20 20 20 20  Col>cnum );.    
4220: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f      sqlite3VdbeO
4230: 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p3(v, OP_String8
4240: 2c 20 30 2c 20 30 2c 20 70 54 61 62 2d 3e 61 43  , 0, 0, pTab->aC
4250: 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20  ol[cnum].zName, 
4260: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
4270: 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20  te3VdbeAddOp(v, 
4280: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 33 2c 20  OP_Callback, 3, 
4290: 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  0);.      }.    
42a0: 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
42b0: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
42c0: 7a 4c 65 66 74 2c 20 22 69 6e 64 65 78 5f 6c 69  zLeft, "index_li
42d0: 73 74 22 29 3d 3d 30 20 26 26 20 7a 52 69 67 68  st")==0 && zRigh
42e0: 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  t ){.    Index *
42f0: 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20  pIdx;.    Table 
4300: 2a 70 54 61 62 3b 0a 20 20 20 20 69 66 28 20 73  *pTab;.    if( s
4310: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
4320: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
4330: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
4340: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69  pTab = sqlite3Fi
4350: 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67  ndTable(db, zRig
4360: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
4370: 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20  ( pTab ){.      
4380: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
4390: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
43a0: 20 20 70 49 64 78 20 3d 20 70 54 61 62 2d 3e 70    pIdx = pTab->p
43b0: 49 6e 64 65 78 3b 0a 20 20 20 20 20 20 69 66 28  Index;.      if(
43c0: 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20 20 20   pIdx ){.       
43d0: 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20 20   int i = 0; .   
43e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
43f0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29  SetNumCols(v, 3)
4400: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
4410: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
4420: 76 2c 20 30 2c 20 22 73 65 71 22 2c 20 50 33 5f  v, 0, "seq", P3_
4430: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
4440: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
4450: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 22 6e 61  olName(v, 1, "na
4460: 6d 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  me", P3_STATIC);
4470: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4480: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
4490: 2c 20 32 2c 20 22 75 6e 69 71 75 65 22 2c 20 50  , 2, "unique", P
44a0: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
44b0: 20 20 20 77 68 69 6c 65 28 70 49 64 78 29 7b 0a     while(pIdx){.
44c0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
44d0: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
44e0: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 30 29 3b  _Integer, i, 0);
44f0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
4500: 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f  e3VdbeOp3(v, OP_
4510: 53 74 72 69 6e 67 38 2c 20 30 2c 20 30 2c 20 70  String8, 0, 0, p
4520: 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  Idx->zName, 0);.
4530: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
4540: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
4550: 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e  _Integer, pIdx->
4560: 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65  onError!=OE_None
4570: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
4580: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
4590: 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c  (v, OP_Callback,
45a0: 20 33 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   3, 0);.        
45b0: 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20    ++i;.         
45c0: 20 70 49 64 78 20 3d 20 70 49 64 78 2d 3e 70 4e   pIdx = pIdx->pN
45d0: 65 78 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ext;.        }. 
45e0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
45f0: 65 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69  else..  if( sqli
4600: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
4610: 2c 20 22 64 61 74 61 62 61 73 65 5f 6c 69 73 74  , "database_list
4620: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 6e 74  ")==0 ){.    int
4630: 20 69 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69   i;.    if( sqli
4640: 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
4650: 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
4660: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 73 71 6c  gma_out;.    sql
4670: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
4680: 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 73 71  ls(v, 3);.    sq
4690: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
46a0: 61 6d 65 28 76 2c 20 30 2c 20 22 73 65 71 22 2c  ame(v, 0, "seq",
46b0: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P3_STATIC);.   
46c0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
46d0: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 22 6e 61  olName(v, 1, "na
46e0: 6d 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  me", P3_STATIC);
46f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4700: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
4710: 20 22 66 69 6c 65 22 2c 20 50 33 5f 53 54 41 54   "file", P3_STAT
4720: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  IC);.    for(i=0
4730: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
4740: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ){.      if( db-
4750: 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29  >aDb[i].pBt==0 )
4760: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
4770: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
4780: 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a  [i].zName!=0 );.
4790: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
47a0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
47b0: 65 67 65 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20  eger, i, 0);.   
47c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70     sqlite3VdbeOp
47d0: 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  3(v, OP_String8,
47e0: 20 30 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69   0, 0, db->aDb[i
47f0: 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ].zName, 0);.   
4800: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70     sqlite3VdbeOp
4810: 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  3(v, OP_String8,
4820: 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   0, 0,.         
4830: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
4840: 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44  tFilename(db->aD
4850: 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20  b[i].pBt), 0);. 
4860: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4870: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c  AddOp(v, OP_Call
4880: 62 61 63 6b 2c 20 33 2c 20 30 29 3b 0a 20 20 20  back, 3, 0);.   
4890: 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66   }.  }else..  if
48a0: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
48b0: 28 7a 4c 65 66 74 2c 20 22 63 6f 6c 6c 61 74 69  (zLeft, "collati
48c0: 6f 6e 5f 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a  on_list")==0 ){.
48d0: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20      int i = 0;. 
48e0: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a     HashElem *p;.
48f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
4900: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b  etNumCols(v, 2);
4910: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
4920: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
4930: 20 22 73 65 71 22 2c 20 50 33 5f 53 54 41 54 49   "seq", P3_STATI
4940: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
4950: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
4960: 20 31 2c 20 22 6e 61 6d 65 22 2c 20 50 33 5f 53   1, "name", P3_S
4970: 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
4980: 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  p=sqliteHashFirs
4990: 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29  t(&db->aCollSeq)
49a0: 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73  ; p; p=sqliteHas
49b0: 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20  hNext(p)){.     
49c0: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20   CollSeq *pColl 
49d0: 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c  = (CollSeq *)sql
49e0: 69 74 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a  iteHashData(p);.
49f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4a00: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
4a10: 65 67 65 72 2c 20 69 2b 2b 2c 20 30 29 3b 0a 20  eger, i++, 0);. 
4a20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4a30: 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op3(v, OP_String
4a40: 38 2c 20 30 2c 20 30 2c 20 70 43 6f 6c 6c 2d 3e  8, 0, 0, pColl->
4a50: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
4a60: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
4a70: 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b  p(v, OP_Callback
4a80: 2c 20 32 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  , 2, 0);.    }. 
4a90: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
4aa0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
4ab0: 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  EMA_PRAGMAS */..
4ac0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4ad0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
4ae0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
4af0: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 66 6f 72  ICmp(zLeft, "for
4b00: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 29 3d  eign_key_list")=
4b10: 3d 30 20 26 26 20 7a 52 69 67 68 74 20 29 7b 0a  =0 && zRight ){.
4b20: 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20      FKey *pFK;. 
4b30: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
4b40: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
4b50: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
4b60: 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
4b70: 6f 75 74 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  out;.    pTab = 
4b80: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
4b90: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
4ba0: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
4bb0: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
4bc0: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
4bd0: 73 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d  se);.      pFK =
4be0: 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20   pTab->pFKey;.  
4bf0: 20 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20      if( pFK ){. 
4c00: 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30         int i = 0
4c10: 3b 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ; .        sqlit
4c20: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
4c30: 28 76 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20  (v, 5);.        
4c40: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
4c50: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 22 69 64 22  lName(v, 0, "id"
4c60: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
4c70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4c80: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
4c90: 2c 20 22 73 65 71 22 2c 20 50 33 5f 53 54 41 54  , "seq", P3_STAT
4ca0: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
4cb0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
4cc0: 6d 65 28 76 2c 20 32 2c 20 22 74 61 62 6c 65 22  me(v, 2, "table"
4cd0: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
4ce0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4cf0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33  eSetColName(v, 3
4d00: 2c 20 22 66 72 6f 6d 22 2c 20 50 33 5f 53 54 41  , "from", P3_STA
4d10: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
4d20: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
4d30: 61 6d 65 28 76 2c 20 34 2c 20 22 74 6f 22 2c 20  ame(v, 4, "to", 
4d40: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
4d50: 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a      while(pFK){.
4d60: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b            int j;
4d70: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a  .          for(j
4d80: 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b  =0; j<pFK->nCol;
4d90: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
4da0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
4db0: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
4dc0: 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20 20 20 20  r, i, 0);.      
4dd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4de0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
4df0: 65 67 65 72 2c 20 6a 2c 20 30 29 3b 0a 20 20 20  eger, j, 0);.   
4e00: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
4e10: 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74  VdbeOp3(v, OP_St
4e20: 72 69 6e 67 38 2c 20 30 2c 20 30 2c 20 70 46 4b  ring8, 0, 0, pFK
4e30: 2d 3e 7a 54 6f 2c 20 30 29 3b 0a 20 20 20 20 20  ->zTo, 0);.     
4e40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
4e50: 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72 69  beOp3(v, OP_Stri
4e60: 6e 67 38 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20  ng8, 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 20 20 20 70 54 61 62 2d 3e 61 43          pTab->aC
4e90: 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e  ol[pFK->aCol[j].
4ea0: 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29  iFrom].zName, 0)
4eb0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
4ec0: 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76 2c 20  lite3VdbeOp3(v, 
4ed0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 30  OP_String8, 0, 0
4ee0: 2c 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a  , pFK->aCol[j].z
4ef0: 43 6f 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Col, 0);.       
4f00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4f10: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c  AddOp(v, OP_Call
4f20: 62 61 63 6b 2c 20 35 2c 20 30 29 3b 0a 20 20 20  back, 5, 0);.   
4f30: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
4f40: 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20     ++i;.        
4f50: 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65    pFK = pFK->pNe
4f60: 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  xtFrom;.        
4f70: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
4f80: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f    }else.#endif /
4f90: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
4fa0: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
4fb0: 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  EY) */..#ifndef 
4fc0: 4e 44 45 42 55 47 0a 20 20 69 66 28 20 73 71 6c  NDEBUG.  if( sql
4fd0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66  ite3StrICmp(zLef
4fe0: 74 2c 20 22 70 61 72 73 65 72 5f 74 72 61 63 65  t, "parser_trace
4ff0: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 65 78 74  ")==0 ){.    ext
5000: 65 72 6e 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ern void sqlite3
5010: 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45  ParserTrace(FILE
5020: 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 20 20 20 20  *, char *);.    
5030: 69 66 28 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a  if( getBoolean(z
5040: 52 69 67 68 74 29 20 29 7b 0a 20 20 20 20 20 20  Right) ){.      
5050: 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
5060: 63 65 28 73 74 64 6f 75 74 2c 20 22 70 61 72 73  ce(stdout, "pars
5070: 65 72 3a 20 22 29 3b 0a 20 20 20 20 7d 65 6c 73  er: ");.    }els
5080: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
5090: 50 61 72 73 65 72 54 72 61 63 65 28 30 2c 20 30  ParserTrace(0, 0
50a0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
50b0: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
50c0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
50d0: 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 69  EGRITY_CHECK.  i
50e0: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
50f0: 70 28 7a 4c 65 66 74 2c 20 22 69 6e 74 65 67 72  p(zLeft, "integr
5100: 69 74 79 5f 63 68 65 63 6b 22 29 3d 3d 30 20 29  ity_check")==0 )
5110: 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20  {.    int i, j, 
5120: 61 64 64 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f  addr;..    /* Co
5130: 64 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  de that initiali
5140: 7a 65 73 20 74 68 65 20 69 6e 74 65 67 72 69 74  zes the integrit
5150: 79 20 63 68 65 63 6b 20 70 72 6f 67 72 61 6d 2e  y check program.
5160: 20 20 53 65 74 20 74 68 65 0a 20 20 20 20 2a 2a    Set the.    **
5170: 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 30 0a 20   error count 0. 
5180: 20 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63     */.    static
5190: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
51a0: 74 20 69 6e 69 74 43 6f 64 65 5b 5d 20 3d 20 7b  t initCode[] = {
51b0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65  .      { OP_Inte
51c0: 67 65 72 2c 20 20 20 20 20 30 2c 20 30 2c 20 20  ger,     0, 0,  
51d0: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20        0},.      
51e0: 7b 20 4f 50 5f 4d 65 6d 53 74 6f 72 65 2c 20 20  { OP_MemStore,  
51f0: 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30    0, 1,        0
5200: 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 2f  },.    };..    /
5210: 2a 20 43 6f 64 65 20 74 68 61 74 20 61 70 70 65  * Code that appe
5220: 61 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ars at the end o
5230: 66 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20  f the integrity 
5240: 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72  check.  If no er
5250: 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61  ror.    ** messa
5260: 67 65 73 20 68 61 76 65 20 62 65 65 6e 20 67 65  ges have been ge
5270: 6e 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20  nerated, output 
5280: 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f  OK.  Otherwise o
5290: 75 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a  utput the.    **
52a0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20   error message. 
52b0: 20 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63     */.    static
52c0: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
52d0: 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a  t endCode[] = {.
52e0: 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 4c 6f        { OP_MemLo
52f0: 61 64 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20  ad,     0, 0,   
5300: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
5310: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
5320: 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   0, 0,        0}
5330: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 65 2c  ,.      { OP_Ne,
5340: 20 20 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20            0, 0, 
5350: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
5360: 20 32 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   2 */.      { OP
5370: 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c  _String8,     0,
5380: 20 30 2c 20 20 20 20 20 20 20 20 22 6f 6b 22 7d   0,        "ok"}
5390: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 61 6c  ,.      { OP_Cal
53a0: 6c 62 61 63 6b 2c 20 20 20 20 31 2c 20 30 2c 20  lback,    1, 0, 
53b0: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d         0},.    }
53c0: 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
53d0: 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20 70 72  lize the VDBE pr
53e0: 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 69 66 28  ogram */.    if(
53f0: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
5400: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
5410: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
5420: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
5430: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
5440: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
5450: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 22  tColName(v, 0, "
5460: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
5470: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
5480: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5490: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
54a0: 69 7a 65 28 69 6e 69 74 43 6f 64 65 29 2c 20 69  ize(initCode), i
54b0: 6e 69 74 43 6f 64 65 29 3b 0a 0a 20 20 20 20 2f  nitCode);..    /
54c0: 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
54d0: 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20  y check on each 
54e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
54f0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
5500: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
5510: 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78       HashElem *x
5520: 3b 0a 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20  ;.      int cnt 
5530: 3d 20 30 3b 0a 0a 20 20 20 20 20 20 69 66 28 20  = 0;..      if( 
5540: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26 26 20 69  OMIT_TEMPDB && i
5550: 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==1 ) continue;.
5560: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f  .      sqlite3Co
5570: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
5580: 50 61 72 73 65 2c 20 69 29 3b 0a 0a 20 20 20 20  Parse, i);..    
5590: 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67    /* Do an integ
55a0: 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20 74 68  rity check of th
55b0: 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20 20 2a  e B-Tree.      *
55c0: 2f 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71  /.      for(x=sq
55d0: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
55e0: 62 2d 3e 61 44 62 5b 69 5d 2e 74 62 6c 48 61 73  b->aDb[i].tblHas
55f0: 68 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48  h); x; x=sqliteH
5600: 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20  ashNext(x)){.   
5610: 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
5620: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
5630: 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e  a(x);.        In
5640: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20  dex *pIdx;.     
5650: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
5660: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
5670: 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 30  r, pTab->tnum, 0
5680: 29 3b 0a 20 20 20 20 20 20 20 20 63 6e 74 2b 2b  );.        cnt++
5690: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 49  ;.        for(pI
56a0: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
56b0: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
56c0: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20  ->pNext){.      
56d0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 43      if( sqlite3C
56e0: 68 65 63 6b 49 6e 64 65 78 43 6f 6c 6c 53 65 71  heckIndexCollSeq
56f0: 28 70 50 61 72 73 65 2c 20 70 49 64 78 29 20 29  (pParse, pIdx) )
5700: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
5710: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
5720: 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20  te3VdbeAddOp(v, 
5730: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78  OP_Integer, pIdx
5740: 2d 3e 74 6e 75 6d 2c 20 30 29 3b 0a 20 20 20 20  ->tnum, 0);.    
5750: 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
5760: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
5770: 20 20 20 20 20 61 73 73 65 72 74 28 20 63 6e 74       assert( cnt
5780: 3e 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  >0 );.      sqli
5790: 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20  te3VdbeAddOp(v, 
57a0: 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c 20  OP_IntegrityCk, 
57b0: 63 6e 74 2c 20 69 29 3b 0a 20 20 20 20 20 20 73  cnt, i);.      s
57c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
57d0: 76 2c 20 4f 50 5f 44 75 70 2c 20 30 2c 20 31 29  v, OP_Dup, 0, 1)
57e0: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
57f0: 71 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76 2c  qlite3VdbeOp3(v,
5800: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
5810: 30 2c 20 22 6f 6b 22 2c 20 50 33 5f 53 54 41 54  0, "ok", P3_STAT
5820: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
5830: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
5840: 50 5f 45 71 2c 20 30 2c 20 61 64 64 72 2b 36 29  P_Eq, 0, addr+6)
5850: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
5860: 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72  dbeOp3(v, OP_Str
5870: 69 6e 67 38 2c 20 30 2c 20 30 2c 0a 20 20 20 20  ing8, 0, 0,.    
5880: 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50 72 69       sqlite3MPri
5890: 6e 74 66 28 22 2a 2a 2a 20 69 6e 20 64 61 74 61  ntf("*** in data
58a0: 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20  base %s ***\n", 
58b0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
58c0: 29 2c 0a 20 20 20 20 20 20 20 20 20 50 33 5f 44  ),.         P3_D
58d0: 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 73  YNAMIC);.      s
58e0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
58f0: 76 2c 20 4f 50 5f 50 75 6c 6c 2c 20 31 2c 20 30  v, OP_Pull, 1, 0
5900: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
5910: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
5920: 43 6f 6e 63 61 74 2c 20 30 2c 20 31 29 3b 0a 20  Concat, 0, 1);. 
5930: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5940: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c  AddOp(v, OP_Call
5950: 62 61 63 6b 2c 20 31 2c 20 30 29 3b 0a 0a 20 20  back, 1, 0);..  
5960: 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
5970: 20 61 6c 6c 20 74 68 65 20 69 6e 64 69 63 65 73   all the indices
5980: 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64   are constructed
5990: 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20 20   correctly..    
59a0: 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
59b0: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
59c0: 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20  ma(pParse, i);. 
59d0: 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74       for(x=sqlit
59e0: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
59f0: 61 44 62 5b 69 5d 2e 74 62 6c 48 61 73 68 29 3b  aDb[i].tblHash);
5a00: 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68   x; x=sqliteHash
5a10: 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20  Next(x)){.      
5a20: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
5a30: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78  sqliteHashData(x
5a40: 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78  );.        Index
5a50: 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20   *pIdx;.        
5a60: 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 0a 20 20  int loopTop;..  
5a70: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e        if( pTab->
5a80: 70 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74  pIndex==0 ) cont
5a90: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 73 71  inue;.        sq
5aa0: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
5ab0: 64 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c  dIndices(pParse,
5ac0: 20 70 54 61 62 2c 20 31 2c 20 4f 50 5f 4f 70 65   pTab, 1, OP_Ope
5ad0: 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20 20 20  nRead);.        
5ae0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5af0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
5b00: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  0, 0);.        s
5b10: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
5b20: 76 2c 20 4f 50 5f 4d 65 6d 53 74 6f 72 65 2c 20  v, OP_MemStore, 
5b30: 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 6c  1, 1);.        l
5b40: 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33  oopTop = sqlite3
5b50: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
5b60: 52 65 77 69 6e 64 2c 20 31 2c 20 30 29 3b 0a 20  Rewind, 1, 0);. 
5b70: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5b80: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4d 65  beAddOp(v, OP_Me
5b90: 6d 49 6e 63 72 2c 20 31 2c 20 30 29 3b 0a 20 20  mIncr, 1, 0);.  
5ba0: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
5bb0: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
5bc0: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
5bd0: 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a  x->pNext, j++){.
5be0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d            int jm
5bf0: 70 32 3b 0a 20 20 20 20 20 20 20 20 20 20 73 74  p2;.          st
5c00: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
5c10: 70 4c 69 73 74 20 69 64 78 45 72 72 5b 5d 20 3d  pList idxErr[] =
5c20: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b   {.            {
5c30: 20 4f 50 5f 4d 65 6d 49 6e 63 72 2c 20 20 20 20   OP_MemIncr,    
5c40: 20 30 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20   0,  0,  0},.   
5c50: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74           { OP_St
5c60: 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 20 30  ring8,     0,  0
5c70: 2c 20 20 22 72 6f 77 69 64 20 22 7d 2c 0a 20 20  ,  "rowid "},.  
5c80: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52            { OP_R
5c90: 65 63 6e 6f 2c 20 20 20 20 20 20 20 31 2c 20 20  ecno,       1,  
5ca0: 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20  0,  0},.        
5cb0: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38      { OP_String8
5cc0: 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20 22 20  ,     0,  0,  " 
5cd0: 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64  missing from ind
5ce0: 65 78 20 22 7d 2c 0a 20 20 20 20 20 20 20 20 20  ex "},.         
5cf0: 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c     { OP_String8,
5d00: 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c       0,  0,  0},
5d10: 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20      /* 4 */.    
5d20: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e          { OP_Con
5d30: 63 61 74 2c 20 20 20 20 20 20 32 2c 20 20 30 2c  cat,      2,  0,
5d40: 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20    0},.          
5d50: 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c    { OP_Callback,
5d60: 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d 2c 0a      1,  0,  0},.
5d70: 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20            };.   
5d80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 65         sqlite3Ge
5d90: 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 76  nerateIndexKey(v
5da0: 2c 20 70 49 64 78 2c 20 31 29 3b 0a 20 20 20 20  , pIdx, 1);.    
5db0: 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c        jmp2 = sql
5dc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c  ite3VdbeAddOp(v,
5dd0: 20 4f 50 5f 46 6f 75 6e 64 2c 20 6a 2b 32 2c 20   OP_Found, j+2, 
5de0: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64  0);.          ad
5df0: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
5e00: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
5e10: 61 79 53 69 7a 65 28 69 64 78 45 72 72 29 2c 20  aySize(idxErr), 
5e20: 69 64 78 45 72 72 29 3b 0a 20 20 20 20 20 20 20  idxErr);.       
5e30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
5e40: 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2b 34  angeP3(v, addr+4
5e50: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50  , pIdx->zName, P
5e60: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
5e70: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5e80: 43 68 61 6e 67 65 50 32 28 76 2c 20 6a 6d 70 32  ChangeP2(v, jmp2
5e90: 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  , sqlite3VdbeCur
5ea0: 72 65 6e 74 41 64 64 72 28 76 29 29 3b 0a 20 20  rentAddr(v));.  
5eb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
5ec0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5ed0: 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 31 2c 20  (v, OP_Next, 1, 
5ee0: 6c 6f 6f 70 54 6f 70 2b 31 29 3b 0a 20 20 20 20  loopTop+1);.    
5ef0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
5f00: 68 61 6e 67 65 50 32 28 76 2c 20 6c 6f 6f 70 54  hangeP2(v, loopT
5f10: 6f 70 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43  op, sqlite3VdbeC
5f20: 75 72 72 65 6e 74 41 64 64 72 28 76 29 29 3b 0a  urrentAddr(v));.
5f30: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
5f40: 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
5f50: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
5f60: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
5f70: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 74 61 74  {.          stat
5f80: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
5f90: 69 73 74 20 63 6e 74 49 64 78 5b 5d 20 3d 20 7b  ist cntIdx[] = {
5fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  .             { 
5fb0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
5fc0: 20 30 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20   0,  0,  0},.   
5fd0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 4d            { OP_M
5fe0: 65 6d 53 74 6f 72 65 2c 20 20 20 20 20 32 2c 20  emStore,     2, 
5ff0: 20 31 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20   1,  0},.       
6000: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 77 69 6e        { OP_Rewin
6010: 64 2c 20 20 20 20 20 20 20 30 2c 20 20 30 2c 20  d,       0,  0, 
6020: 20 30 7d 2c 20 20 2f 2a 20 32 20 2a 2f 0a 20 20   0},  /* 2 */.  
6030: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
6040: 4d 65 6d 49 6e 63 72 2c 20 20 20 20 20 20 32 2c  MemIncr,      2,
6050: 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20    0,  0},.      
6060: 20 20 20 20 20 20 20 7b 20 4f 50 5f 4e 65 78 74         { OP_Next
6070: 2c 20 20 20 20 20 20 20 20 20 30 2c 20 20 30 2c  ,         0,  0,
6080: 20 20 30 7d 2c 20 20 2f 2a 20 34 20 2a 2f 0a 20    0},  /* 4 */. 
6090: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
60a0: 5f 4d 65 6d 4c 6f 61 64 2c 20 20 20 20 20 20 31  _MemLoad,      1
60b0: 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20  ,  0,  0},.     
60c0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d          { OP_Mem
60d0: 4c 6f 61 64 2c 20 20 20 20 20 20 32 2c 20 20 30  Load,      2,  0
60e0: 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  0},.         
60f0: 20 20 20 20 7b 20 4f 50 5f 45 71 2c 20 20 20 20      { OP_Eq,    
6100: 20 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30         0,  0,  0
6110: 7d 2c 20 20 2f 2a 20 37 20 2a 2f 0a 20 20 20 20  },  /* 7 */.    
6120: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65           { OP_Me
6130: 6d 49 6e 63 72 2c 20 20 20 20 20 20 30 2c 20 20  mIncr,      0,  
6140: 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20  0,  0},.        
6150: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
6160: 38 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20  8,      0,  0,  
6170: 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  "wrong # of entr
6180: 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22 7d 2c  ies in index "},
6190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  .             { 
61a0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20  OP_String8,     
61b0: 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 2f 2a   0,  0,  0},  /*
61c0: 20 31 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 20   10 */.         
61d0: 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c      { OP_Concat,
61e0: 20 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30         0,  0,  0
61f0: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  },.             
6200: 7b 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20  { OP_Callback,  
6210: 20 20 20 31 2c 20 20 30 2c 20 20 30 7d 2c 0a 20     1,  0,  0},. 
6220: 20 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20           };.    
6230: 20 20 20 20 20 20 69 66 28 20 70 49 64 78 2d 3e        if( pIdx->
6240: 74 6e 75 6d 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  tnum==0 ) contin
6250: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64  ue;.          ad
6260: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
6270: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
6280: 61 79 53 69 7a 65 28 63 6e 74 49 64 78 29 2c 20  aySize(cntIdx), 
6290: 63 6e 74 49 64 78 29 3b 0a 20 20 20 20 20 20 20  cntIdx);.       
62a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
62b0: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 32  angeP1(v, addr+2
62c0: 2c 20 6a 2b 32 29 3b 0a 20 20 20 20 20 20 20 20  , j+2);.        
62d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
62e0: 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c  ngeP2(v, addr+2,
62f0: 20 61 64 64 72 2b 35 29 3b 0a 20 20 20 20 20 20   addr+5);.      
6300: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
6310: 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
6320: 34 2c 20 6a 2b 32 29 3b 0a 20 20 20 20 20 20 20  4, j+2);.       
6330: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
6340: 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b 34  angeP2(v, addr+4
6350: 2c 20 61 64 64 72 2b 33 29 3b 0a 20 20 20 20 20  , addr+3);.     
6360: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
6370: 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72  ChangeP2(v, addr
6380: 2b 37 2c 20 61 64 64 72 2b 41 72 72 61 79 53 69  +7, addr+ArraySi
6390: 7a 65 28 63 6e 74 49 64 78 29 29 3b 0a 20 20 20  ze(cntIdx));.   
63a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
63b0: 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64  beChangeP3(v, ad
63c0: 64 72 2b 31 30 2c 20 70 49 64 78 2d 3e 7a 4e 61  dr+10, pIdx->zNa
63d0: 6d 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  me, P3_STATIC);.
63e0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
63f0: 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61 64 64  } .    }.    add
6400: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
6410: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
6420: 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20  ySize(endCode), 
6430: 65 6e 64 43 6f 64 65 29 3b 0a 20 20 20 20 73 71  endCode);.    sq
6440: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
6450: 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 61 64 64  2(v, addr+2, add
6460: 72 2b 41 72 72 61 79 53 69 7a 65 28 65 6e 64 43  r+ArraySize(endC
6470: 6f 64 65 29 29 3b 0a 20 20 7d 65 6c 73 65 0a 23  ode));.  }else.#
6480: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
6490: 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
64a0: 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  HECK */..#ifndef
64b0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
64c0: 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  16.  /*.  **   P
64d0: 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20  RAGMA encoding. 
64e0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63   **   PRAGMA enc
64f0: 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c  oding = "utf-8"|
6500: 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36  "utf-16"|"utf-16
6510: 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20  le"|"utf-16be". 
6520: 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 27 73   **.  ** In it's
6530: 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69   first form, thi
6540: 73 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73  s pragma returns
6550: 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
6560: 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64   the main.  ** d
6570: 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
6580: 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
6590: 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20  initialized, it 
65a0: 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e  is initialized n
65b0: 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ow..  **.  ** Th
65c0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66  e second form of
65d0: 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20   this pragma is 
65e0: 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d  a no-op if the m
65f0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
6600: 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61  e.  ** has not a
6610: 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74  lready been init
6620: 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73  ialized. In this
6630: 20 63 61 73 65 20 69 74 20 73 65 74 73 20 74 68   case it sets th
6640: 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65  e default.  ** e
6650: 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c  ncoding that wil
6660: 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  l be used for th
6670: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
6680: 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69  file if a new fi
6690: 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74  le.  ** is creat
66a0: 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69  ed. If an existi
66b0: 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  ng main database
66c0: 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c   file is opened,
66d0: 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64   then the.  ** d
66e0: 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f  efault text enco
66f0: 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69  ding for the exi
6700: 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 69  sting database i
6710: 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20  s used..  ** .  
6720: 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20  ** In all cases 
6730: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 63 72  new databases cr
6740: 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
6750: 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61  ATTACH command a
6760: 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20  re.  ** created 
6770: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20  to use the same 
6780: 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63  default text enc
6790: 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69  oding as the mai
67a0: 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20  n database. If. 
67b0: 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74   ** the main dat
67c0: 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65  abase has not be
67d0: 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61  en initialized a
67e0: 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68  nd/or created wh
67f0: 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69  en ATTACH.  ** i
6800: 73 20 65 78 65 63 75 74 65 64 2c 20 74 68 69 73  s executed, this
6810: 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20   is done before 
6820: 74 68 65 20 41 54 54 41 43 48 20 6f 70 65 72 61  the ATTACH opera
6830: 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion..  **.  ** 
6840: 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f  In the second fo
6850: 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20 73  rm this pragma s
6860: 65 74 73 20 74 68 65 20 74 65 78 74 20 65 6e 63  ets the text enc
6870: 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  oding to be used
6880: 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74   in.  ** new dat
6890: 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65 61  abase files crea
68a0: 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 64  ted using this d
68b0: 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
68c0: 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20  It is only.  ** 
68d0: 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65  useful if invoke
68e0: 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66  d immediately af
68f0: 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ter the main dat
6900: 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 69  abase i.  */.  i
6910: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
6920: 70 28 7a 4c 65 66 74 2c 20 22 65 6e 63 6f 64 69  p(zLeft, "encodi
6930: 6e 67 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73  ng")==0 ){.    s
6940: 74 61 74 69 63 20 73 74 72 75 63 74 20 45 6e 63  tatic struct Enc
6950: 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61  Name {.      cha
6960: 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20  r *zName;.      
6970: 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e  u8 enc;.    } en
6980: 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20  cnames[] = {.   
6990: 20 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20     { "UTF-8",   
69a0: 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20   SQLITE_UTF8    
69b0: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
69c0: 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54  UTF8",     SQLIT
69d0: 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c  E_UTF8        },
69e0: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
69f0: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  le", SQLITE_UTF1
6a00: 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  6LE     },.     
6a10: 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53   { "UTF16le",  S
6a20: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20  QLITE_UTF16LE   
6a30: 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
6a40: 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f  F-16be", SQLITE_
6a50: 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20  UTF16BE     },. 
6a60: 20 20 20 20 20 7b 20 22 55 54 46 31 36 62 65 22       { "UTF16be"
6a70: 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  ,  SQLITE_UTF16B
6a80: 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b  E     },.      {
6a90: 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20 2f   "UTF-16",   0 /
6aa0: 2a 20 46 69 6c 6c 65 64 20 69 6e 20 61 74 20 72  * Filled in at r
6ab0: 75 6e 2d 74 69 6d 65 20 2a 2f 20 7d 2c 0a 20 20  un-time */ },.  
6ac0: 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20      { "UTF16",  
6ad0: 20 20 30 20 2f 2a 20 46 69 6c 6c 65 64 20 69 6e    0 /* Filled in
6ae0: 20 61 74 20 72 75 6e 2d 74 69 6d 65 20 2a 2f 20   at run-time */ 
6af0: 7d 2c 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20  },.      { 0, 0 
6b00: 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 73 74 72  }.    };.    str
6b10: 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a 70 45 6e  uct EncName *pEn
6b20: 63 3b 0a 20 20 20 20 65 6e 63 6e 61 6d 65 73 5b  c;.    encnames[
6b30: 36 5d 2e 65 6e 63 20 3d 20 65 6e 63 6e 61 6d 65  6].enc = encname
6b40: 73 5b 37 5d 2e 65 6e 63 20 3d 20 53 51 4c 49 54  s[7].enc = SQLIT
6b50: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20  E_UTF16NATIVE;. 
6b60: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
6b70: 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20  {    /* "PRAGMA 
6b80: 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20  encoding" */.   
6b90: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
6ba0: 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
6bb0: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
6bc0: 75 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ut;.      sqlite
6bd0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
6be0: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
6bf0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
6c00: 6d 65 28 76 2c 20 30 2c 20 22 65 6e 63 6f 64 69  me(v, 0, "encodi
6c10: 6e 67 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  ng", P3_STATIC);
6c20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
6c30: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 74  beAddOp(v, OP_St
6c40: 72 69 6e 67 38 2c 20 30 2c 20 30 29 3b 0a 20 20  ring8, 0, 0);.  
6c50: 20 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e      for(pEnc=&en
6c60: 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d  cnames[0]; pEnc-
6c70: 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b  >zName; pEnc++){
6c80: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 45 6e  .        if( pEn
6c90: 63 2d 3e 65 6e 63 3d 3d 70 50 61 72 73 65 2d 3e  c->enc==pParse->
6ca0: 64 62 2d 3e 65 6e 63 20 29 7b 0a 20 20 20 20 20  db->enc ){.     
6cb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
6cc0: 43 68 61 6e 67 65 50 33 28 76 2c 20 2d 31 2c 20  ChangeP3(v, -1, 
6cd0: 70 45 6e 63 2d 3e 7a 4e 61 6d 65 2c 20 50 33 5f  pEnc->zName, P3_
6ce0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
6cf0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
6d00: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
6d10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
6d20: 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63  Op(v, OP_Callbac
6d30: 6b 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 7d 65  k, 1, 0);.    }e
6d40: 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20 20 20  lse{            
6d50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22              /* "
6d60: 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20  PRAGMA encoding 
6d70: 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20  = XXX" */.      
6d80: 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74  /* Only change t
6d90: 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69  he value of sqli
6da0: 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61  te.enc if the da
6db0: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73  tabase handle is
6dc0: 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e   not.      ** in
6dd0: 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68  itialized. If th
6de0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
6df0: 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20  exists, the new 
6e00: 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65  sqlite.enc value
6e10: 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62  .      ** will b
6e20: 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68  e overwritten wh
6e30: 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69 73  en the schema is
6e40: 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66   next loaded. If
6e50: 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20   it does not.   
6e60: 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78     ** already ex
6e70: 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65  ists, it will be
6e80: 20 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20   created to use 
6e90: 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67  the new encoding
6ea0: 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f   value..      */
6eb0: 0a 20 20 20 20 20 20 69 66 28 20 21 28 70 50 61  .      if( !(pPa
6ec0: 72 73 65 2d 3e 64 62 2d 3e 66 6c 61 67 73 26 53  rse->db->flags&S
6ed0: 51 4c 49 54 45 5f 49 6e 69 74 69 61 6c 69 7a 65  QLITE_Initialize
6ee0: 64 29 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f  d) ){.        fo
6ef0: 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73  r(pEnc=&encnames
6f00: 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65  [0]; pEnc->zName
6f10: 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20  ; pEnc++){.     
6f20: 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69       if( 0==sqli
6f30: 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
6f40: 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20  t, pEnc->zName) 
6f50: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
6f60: 50 61 72 73 65 2d 3e 64 62 2d 3e 65 6e 63 20 3d  Parse->db->enc =
6f70: 20 70 45 6e 63 2d 3e 65 6e 63 3b 0a 20 20 20 20   pEnc->enc;.    
6f80: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
6f90: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
6fa0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
6fb0: 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b   !pEnc->zName ){
6fc0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
6fd0: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
6fe0: 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20  e, "unsupported 
6ff0: 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a  encoding: %s", z
7000: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20  Right);.        
7010: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
7020: 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f    }else.#endif /
7030: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
7040: 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  F16 */..#ifndef 
7050: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
7060: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
7070: 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AS.  /*.  **   P
7080: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
7090: 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a  ]schema_version.
70a0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
70b0: 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f  atabase.]schema_
70c0: 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67  version = <integ
70d0: 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  er>.  **.  **   
70e0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
70f0: 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20  .]user_version. 
7100: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
7110: 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72  tabase.]user_ver
7120: 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e  sion = <integer>
7130: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70  .  **.  ** The p
7140: 72 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76  ragma's schema_v
7150: 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f  ersion and user_
7160: 76 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64  version are used
7170: 20 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20   to set or get. 
7180: 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
7190: 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
71a0: 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72  ion and user-ver
71b0: 73 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  sion, respective
71c0: 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68  ly. Both.  ** th
71d0: 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
71e0: 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65   and the user-ve
71f0: 72 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74  rsion are 32-bit
7200: 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
7210: 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  .  ** stored in 
7220: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
7230: 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  der..  **.  ** T
7240: 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
7250: 20 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79   is usually only
7260: 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74   manipulated int
7270: 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74  ernally by SQLit
7280: 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e  e. It.  ** is in
7290: 63 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c  cremented by SQL
72a0: 69 74 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ite whenever the
72b0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
72c0: 20 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79   is modified (by
72d0: 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f  .  ** creating o
72e0: 72 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62  r dropping a tab
72f0: 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68  le or index). Th
7300: 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
7310: 20 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a   is used by.  **
7320: 20 53 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d   SQLite each tim
7330: 65 20 61 20 71 75 65 72 79 20 69 73 20 65 78 65  e a query is exe
7340: 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20  cuted to ensure 
7350: 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61  that the interna
7360: 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20  l cache.  ** of 
7370: 74 68 65 20 73 63 68 65 6d 61 20 75 73 65 64 20  the schema used 
7380: 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74  when compiling t
7390: 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74  he SQL query mat
73a0: 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20  ches the schema 
73b0: 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61  of.  ** the data
73c0: 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69  base against whi
73d0: 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  ch the compiled 
73e0: 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c  query is actuall
73f0: 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a  y executed..  **
7400: 20 53 75 62 76 65 72 74 69 6e 67 20 74 68 69 73   Subverting this
7410: 20 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73   mechanism by us
7420: 69 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68 65  ing "PRAGMA sche
7430: 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d  ma_version" to m
7440: 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73  odify.  ** the s
7450: 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73  chema-version is
7460: 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e   potentially dan
7470: 67 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c  gerous and may l
7480: 65 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20  ead to program. 
7490: 20 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64   ** crashes or d
74a0: 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
74b0: 6f 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61 75  on. Use with cau
74c0: 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion!.  **.  ** 
74d0: 54 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  The user-version
74e0: 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74   is not used int
74f0: 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74  ernally by SQLit
7500: 65 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73 65  e. It may be use
7510: 64 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63  d by.  ** applic
7520: 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70  ations for any p
7530: 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 69  urpose..  */.  i
7540: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
7550: 70 28 7a 4c 65 66 74 2c 20 22 73 63 68 65 6d 61  p(zLeft, "schema
7560: 5f 76 65 72 73 69 6f 6e 22 29 3d 3d 30 20 7c 7c  _version")==0 ||
7570: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 74  .      sqlite3St
7580: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 75 73  rICmp(zLeft, "us
7590: 65 72 5f 76 65 72 73 69 6f 6e 22 29 3d 3d 30 20  er_version")==0 
75a0: 29 7b 0a 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f  ){..    int iCoo
75b0: 6b 69 65 3b 20 20 20 2f 2a 20 43 6f 6f 6b 69 65  kie;   /* Cookie
75c0: 20 69 6e 64 65 78 2e 20 30 20 66 6f 72 20 73 63   index. 0 for sc
75d0: 68 65 6d 61 2d 63 6f 6f 6b 69 65 2c 20 36 20 66  hema-cookie, 6 f
75e0: 6f 72 20 75 73 65 72 2d 63 6f 6f 6b 69 65 2e 20  or user-cookie. 
75f0: 2a 2f 0a 20 20 20 20 69 66 28 20 7a 4c 65 66 74  */.    if( zLeft
7600: 5b 30 5d 3d 3d 27 73 27 20 7c 7c 20 7a 4c 65 66  [0]=='s' || zLef
7610: 74 5b 30 5d 3d 3d 27 53 27 20 29 7b 0a 20 20 20  t[0]=='S' ){.   
7620: 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 30 3b 0a     iCookie = 0;.
7630: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7640: 20 69 43 6f 6f 6b 69 65 20 3d 20 35 3b 0a 20 20   iCookie = 5;.  
7650: 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 7a 52 69    }..    if( zRi
7660: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ght ){.      /* 
7670: 57 72 69 74 65 20 74 68 65 20 73 70 65 63 69 66  Write the specif
7680: 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65  ied cookie value
7690: 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
76a0: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
76b0: 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20  t setCookie[] = 
76c0: 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54  {.        { OP_T
76d0: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30  ransaction,    0
76e0: 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  1,  0},    /*
76f0: 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   0 */.        { 
7700: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
7710: 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20     0,  0,  0},  
7720: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
7730: 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65    { OP_SetCookie
7740: 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30  ,      0,  0,  0
7750: 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20  },    /* 2 */.  
7760: 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
7770: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
7780: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
7790: 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f 6f  ArraySize(setCoo
77a0: 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65 29  kie), setCookie)
77b0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
77c0: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
77d0: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
77e0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
77f0: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
7800: 61 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  atoi(zRight));. 
7810: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
7820: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
7830: 2b 32 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  +2, iDb);.      
7840: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
7850: 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 69  eP2(v, addr+2, i
7860: 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c  Cookie);.    }el
7870: 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61  se{.      /* Rea
7880: 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  d the specified 
7890: 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a  cookie value */.
78a0: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
78b0: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65  st VdbeOpList re
78c0: 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20  adCookie[] = {. 
78d0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64         { OP_Read
78e0: 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20  Cookie,      0, 
78f0: 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30   0,  0},    /* 0
7900: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50   */.        { OP
7910: 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20 20 20 20  _Callback,      
7920: 20 20 31 2c 20 20 30 2c 20 20 30 7d 0a 20 20 20    1,  0,  0}.   
7930: 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20     };.      int 
7940: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
7950: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
7960: 72 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f  rraySize(readCoo
7970: 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b 69 65  kie), readCookie
7980: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
7990: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
79a0: 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20  addr, iDb);.    
79b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
79c0: 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2c 20 69  ngeP2(v, addr, i
79d0: 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73  Cookie);.      s
79e0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
79f0: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
7a00: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  }.  }.#endif /* 
7a10: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
7a20: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
7a30: 41 53 20 2a 2f 0a 0a 23 69 66 20 64 65 66 69 6e  AS */..#if defin
7a40: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
7a50: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
7a60: 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20  TE_TEST).  /*.  
7a70: 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63 75  ** Report the cu
7a80: 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66  rrent state of f
7a90: 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c  ile logs for all
7aa0: 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a   databases.  */.
7ab0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
7ac0: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 6c 6f 63  ICmp(zLeft, "loc
7ad0: 6b 5f 73 74 61 74 75 73 22 29 3d 3d 30 20 29 7b  k_status")==0 ){
7ae0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
7af0: 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a  t char *const az
7b00: 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20  LockName[] = {. 
7b10: 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c       "unlocked",
7b20: 20 22 73 68 61 72 65 64 22 2c 20 22 72 65 73 65   "shared", "rese
7b30: 72 76 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22  rved", "pending"
7b40: 2c 20 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20  , "exclusive".  
7b50: 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    };.    int i;.
7b60: 20 20 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71      Vdbe *v = sq
7b70: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
7b80: 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  rse);.    sqlite
7b90: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
7ba0: 76 2c 20 32 29 3b 0a 20 20 20 20 73 71 6c 69 74  v, 2);.    sqlit
7bb0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
7bc0: 28 76 2c 20 30 2c 20 22 64 61 74 61 62 61 73 65  (v, 0, "database
7bd0: 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  ", P3_STATIC);. 
7be0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
7bf0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 22  tColName(v, 1, "
7c00: 73 74 61 74 75 73 22 2c 20 50 33 5f 53 54 41 54  status", P3_STAT
7c10: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  IC);.    for(i=0
7c20: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
7c30: 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a  ){.      Btree *
7c40: 70 42 74 3b 0a 20 20 20 20 20 20 50 61 67 65 72  pBt;.      Pager
7c50: 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20 20   *pPager;.      
7c60: 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  if( db->aDb[i].z
7c70: 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  Name==0 ) contin
7c80: 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
7c90: 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53  3VdbeOp3(v, OP_S
7ca0: 74 72 69 6e 67 2c 20 30 2c 20 30 2c 20 64 62 2d  tring, 0, 0, db-
7cb0: 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50  >aDb[i].zName, P
7cc0: 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  3_STATIC);.     
7cd0: 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69   pBt = db->aDb[i
7ce0: 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69 66 28  ].pBt;.      if(
7cf0: 20 70 42 74 3d 3d 30 20 7c 7c 20 28 70 50 61 67   pBt==0 || (pPag
7d00: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
7d10: 65 50 61 67 65 72 28 70 42 74 29 29 3d 3d 30 20  ePager(pBt))==0 
7d20: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
7d30: 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f  e3VdbeOp3(v, OP_
7d40: 53 74 72 69 6e 67 2c 20 30 2c 20 30 2c 20 22 63  String, 0, 0, "c
7d50: 6c 6f 73 65 64 22 2c 20 50 33 5f 53 54 41 54 49  losed", P3_STATI
7d60: 43 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  C);.      }else{
7d70: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6a 20 3d  .        int j =
7d80: 20 73 71 6c 69 74 65 33 70 61 67 65 72 5f 6c 6f   sqlite3pager_lo
7d90: 63 6b 73 74 61 74 65 28 70 50 61 67 65 72 29 3b  ckstate(pPager);
7da0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
7db0: 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74  VdbeOp3(v, OP_St
7dc0: 72 69 6e 67 2c 20 30 2c 20 30 2c 20 0a 20 20 20  ring, 0, 0, .   
7dd0: 20 20 20 20 20 20 20 20 20 28 6a 3e 3d 30 20 26           (j>=0 &
7de0: 26 20 6a 3c 3d 34 29 20 3f 20 61 7a 4c 6f 63 6b  & j<=4) ? azLock
7df0: 4e 61 6d 65 5b 6a 5d 20 3a 20 22 75 6e 6b 6e 6f  Name[j] : "unkno
7e00: 77 6e 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  wn", P3_STATIC);
7e10: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
7e20: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
7e30: 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20  v, OP_Callback, 
7e40: 32 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  2, 0);.    }.  }
7e50: 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 7b  else.#endif..  {
7e60: 7d 0a 0a 20 20 69 66 28 20 76 20 29 7b 0a 20 20  }..  if( v ){.  
7e70: 20 20 2f 2a 20 43 6f 64 65 20 61 6e 20 4f 50 5f    /* Code an OP_
7e80: 45 78 70 69 72 65 20 61 74 20 74 68 65 20 65 6e  Expire at the en
7e90: 64 20 6f 66 20 65 61 63 68 20 50 52 41 47 4d 41  d of each PRAGMA
7ea0: 20 70 72 6f 67 72 61 6d 20 74 6f 20 63 61 75 73   program to caus
7eb0: 65 0a 20 20 20 20 2a 2a 20 74 68 65 20 56 44 42  e.    ** the VDB
7ec0: 45 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74  E implementing t
7ed0: 68 65 20 70 72 61 67 6d 61 20 74 6f 20 65 78 70  he pragma to exp
7ee0: 69 72 65 2e 20 4d 6f 73 74 20 28 61 6c 6c 3f 29  ire. Most (all?)
7ef0: 20 70 72 61 67 6d 61 73 0a 20 20 20 20 2a 2a 20   pragmas.    ** 
7f00: 61 72 65 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66  are only valid f
7f10: 6f 72 20 61 20 73 69 6e 67 6c 65 20 65 78 65 63  or a single exec
7f20: 75 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20  ution..    */.  
7f30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
7f40: 4f 70 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 2c  Op(v, OP_Expire,
7f50: 20 31 2c 20 30 29 3b 0a 20 20 7d 0a 70 72 61 67   1, 0);.  }.prag
7f60: 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65  ma_out:.  sqlite
7f70: 46 72 65 65 28 7a 4c 65 66 74 29 3b 0a 20 20 73  Free(zLeft);.  s
7f80: 71 6c 69 74 65 46 72 65 65 28 7a 52 69 67 68 74  qliteFree(zRight
7f90: 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  );.}..#endif /* 
7fa0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
7fb0: 4d 41 20 2a 2f 0a                                MA */.