/ Hex Artifact Content
Login

Artifact 3f16c1274bc25afb630b61a3630ea19a2fd0b5dc:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 70 72  d..**.** $Id: pr
01c0: 61 67 6d 61 2e 63 2c 76 20 31 2e 31 33 34 20 32  agma.c,v 1.134 2
01d0: 30 30 37 2f 30 35 2f 30 34 20 31 38 3a 33 30 3a  007/05/04 18:30:
01e0: 34 31 20 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a  41 drh Exp $.*/.
01f0: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0200: 49 6e 74 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  Int.h".#include 
0210: 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  "os.h".#include 
0220: 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 20 49 67  <ctype.h>../* Ig
0230: 6e 6f 72 65 20 74 68 69 73 20 77 68 6f 6c 65 20  nore this whole 
0240: 66 69 6c 65 20 69 66 20 70 72 61 67 6d 61 73 20  file if pragmas 
0250: 61 72 65 20 64 69 73 61 62 6c 65 64 0a 2a 2f 0a  are disabled.*/.
0260: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
0270: 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 29  ITE_OMIT_PRAGMA)
0280: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
0290: 49 54 45 5f 4f 4d 49 54 5f 50 41 52 53 45 52 29  ITE_OMIT_PARSER)
02a0: 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
02b0: 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
02c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
02d0: 53 54 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 70  ST).# include "p
02e0: 61 67 65 72 2e 68 22 0a 23 20 69 6e 63 6c 75 64  ager.h".# includ
02f0: 65 20 22 62 74 72 65 65 2e 68 22 0a 23 65 6e 64  e "btree.h".#end
0300: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70  if../*.** Interp
0310: 72 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74  ret the given st
0320: 72 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79  ring as a safety
0330: 20 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20   level.  Return 
0340: 30 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20  0 for OFF,.** 1 
0350: 66 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c  for ON or NORMAL
0360: 20 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e   and 2 for FULL.
0370: 20 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61    Return 1 for a
0380: 6e 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75  n empty or .** u
0390: 6e 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69  nrecognized stri
03a0: 6e 67 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a  ng argument..**.
03b0: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  ** Note that the
03c0: 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64   values returned
03d0: 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74 68   are one less th
03e0: 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74 68  at the values th
03f0: 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20  at.** should be 
0400: 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c 69  passed into sqli
0410: 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65 74  te3BtreeSetSafet
0420: 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20 69  yLevel().  The i
0430: 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70  s done.** to sup
0440: 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c 20  port legacy SQL 
0450: 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65 74  code.  The safet
0460: 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f 20  y level used to 
0470: 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e  be boolean.** an
0480: 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73 20  d older scripts 
0490: 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e 75  may have used nu
04a0: 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46 20  mbers 0 for OFF 
04b0: 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f  and 1 for ON..*/
04c0: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 53  .static int getS
04d0: 61 66 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74  afetyLevel(const
04e0: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 20 20 20   char *z){.     
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 20 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35          /* 12345
0510: 36 37 38 39 20 31 32 33 34 35 36 37 38 39 20 2a  6789 123456789 *
0520: 2f 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  /.  static const
0530: 20 63 68 61 72 20 7a 54 65 78 74 5b 5d 20 3d 20   char zText[] = 
0540: 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73 74 72 75  "onoffalseyestru
0550: 65 66 75 6c 6c 22 3b 0a 20 20 73 74 61 74 69 63  efull";.  static
0560: 20 63 6f 6e 73 74 20 75 38 20 69 4f 66 66 73 65   const u8 iOffse
0570: 74 5b 5d 20 3d 20 7b 30 2c 20 31 2c 20 32 2c 20  t[] = {0, 1, 2, 
0580: 34 2c 20 39 2c 20 31 32 2c 20 31 36 7d 3b 0a 20  4, 9, 12, 16};. 
0590: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
05a0: 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20 7b 32 2c   iLength[] = {2,
05b0: 20 32 2c 20 33 2c 20 35 2c 20 33 2c 20 34 2c 20   2, 3, 5, 3, 4, 
05c0: 34 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  4};.  static con
05d0: 73 74 20 75 38 20 69 56 61 6c 75 65 5b 5d 20 3d  st u8 iValue[] =
05e0: 20 20 7b 31 2c 20 30 2c 20 30 2c 20 30 2c 20 31    {1, 0, 0, 0, 1
05f0: 2c 20 31 2c 20 32 7d 3b 0a 20 20 69 6e 74 20 69  , 1, 2};.  int i
0600: 2c 20 6e 3b 0a 20 20 69 66 28 20 69 73 64 69 67  , n;.  if( isdig
0610: 69 74 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65  it(*z) ){.    re
0620: 74 75 72 6e 20 61 74 6f 69 28 7a 29 3b 0a 20 20  turn atoi(z);.  
0630: 7d 0a 20 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a  }.  n = strlen(z
0640: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
0650: 73 69 7a 65 6f 66 28 69 4c 65 6e 67 74 68 29 3b  sizeof(iLength);
0660: 20 69 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69   i++){.    if( i
0670: 4c 65 6e 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20  Length[i]==n && 
0680: 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
0690: 26 7a 54 65 78 74 5b 69 4f 66 66 73 65 74 5b 69  &zText[iOffset[i
06a0: 5d 5d 2c 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20  ]],z,n)==0 ){.  
06b0: 20 20 20 20 72 65 74 75 72 6e 20 69 56 61 6c 75      return iValu
06c0: 65 5b 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  e[i];.    }.  }.
06d0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a 0a 2f    return 1;.}../
06e0: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
06f0: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
0700: 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
0710: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
0720: 74 20 67 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  t getBoolean(con
0730: 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 72  st char *z){.  r
0740: 65 74 75 72 6e 20 67 65 74 53 61 66 65 74 79 4c  eturn getSafetyL
0750: 65 76 65 6c 28 7a 29 26 31 3b 0a 7d 0a 0a 2f 2a  evel(z)&1;.}../*
0760: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
0770: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
0780: 73 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65  s a locking mode
0790: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69   value..*/.stati
07a0: 63 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67  c int getLocking
07b0: 4d 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20  Mode(const char 
07c0: 2a 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a  *z){.  if( z ){.
07d0: 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74      if( 0==sqlit
07e0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78  e3StrICmp(z, "ex
07f0: 63 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75  clusive") ) retu
0800: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
0810: 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a  MODE_EXCLUSIVE;.
0820: 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74      if( 0==sqlit
0830: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
0840: 72 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20  rmal") ) return 
0850: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
0860: 45 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20  E_NORMAL;.  }.  
0870: 72 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43  return PAGER_LOC
0880: 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a  KINGMODE_QUERY;.
0890: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
08a0: 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
08b0: 4d 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  M./*.** Interpre
08c0: 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69  t the given stri
08d0: 6e 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61  ng as an auto-va
08e0: 63 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e  cuum mode value.
08f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  .**.** The follo
0900: 77 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e  wing strings, "n
0910: 6f 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64  one", "full" and
0920: 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61   "incremental" a
0930: 72 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c  re .** acceptabl
0940: 65 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20  e, as are their 
0950: 6e 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65  numeric equivale
0960: 6e 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20  nts: 0, 1 and 2 
0970: 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
0980: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41  .static int getA
0990: 75 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20  utoVacuum(const 
09a0: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20  char *z){.  int 
09b0: 69 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69  i;.  if( 0==sqli
09c0: 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e  te3StrICmp(z, "n
09d0: 6f 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42  one") ) return B
09e0: 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f  TREE_AUTOVACUUM_
09f0: 4e 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73  NONE;.  if( 0==s
0a00: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c  qlite3StrICmp(z,
0a10: 20 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72   "full") ) retur
0a20: 6e 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55  n BTREE_AUTOVACU
0a30: 55 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30  UM_FULL;.  if( 0
0a40: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
0a50: 28 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c  (z, "incremental
0a60: 22 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45  ") ) return BTRE
0a70: 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43  E_AUTOVACUUM_INC
0a80: 52 3b 0a 20 20 69 20 3d 20 61 74 6f 69 28 7a 29  R;.  i = atoi(z)
0a90: 3b 0a 20 20 72 65 74 75 72 6e 20 28 28 69 3e 3d  ;.  return ((i>=
0aa0: 30 26 26 69 3c 3d 32 29 3f 69 3a 30 29 3b 0a 7d  0&&i<=2)?i:0);.}
0ab0: 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65  .#endif /* ifnde
0ac0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
0ad0: 54 4f 56 41 43 55 55 4d 20 2a 2f 0a 0a 23 69 66  TOVACUUM */..#if
0ae0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
0af0: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
0b00: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
0b10: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
0b20: 61 73 20 61 20 74 65 6d 70 20 64 62 20 6c 6f 63  as a temp db loc
0b30: 61 74 69 6f 6e 2e 20 52 65 74 75 72 6e 20 31 20  ation. Return 1 
0b40: 66 6f 72 20 66 69 6c 65 0a 2a 2a 20 62 61 63 6b  for file.** back
0b50: 65 64 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74  ed temporary dat
0b60: 61 62 61 73 65 73 2c 20 32 20 66 6f 72 20 74 68  abases, 2 for th
0b70: 65 20 52 65 64 2d 42 6c 61 63 6b 20 74 72 65 65  e Red-Black tree
0b80: 20 69 6e 20 6d 65 6d 6f 72 79 20 64 61 74 61 62   in memory datab
0b90: 61 73 65 0a 2a 2a 20 61 6e 64 20 30 20 74 6f 20  ase.** and 0 to 
0ba0: 75 73 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d  use the compile-
0bb0: 74 69 6d 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f  time default..*/
0bc0: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 54  .static int getT
0bd0: 65 6d 70 53 74 6f 72 65 28 63 6f 6e 73 74 20 63  empStore(const c
0be0: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28 20 7a  har *z){.  if( z
0bf0: 5b 30 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 30 5d  [0]>='0' && z[0]
0c00: 3c 3d 27 32 27 20 29 7b 0a 20 20 20 20 72 65 74  <='2' ){.    ret
0c10: 75 72 6e 20 7a 5b 30 5d 20 2d 20 27 30 27 3b 0a  urn z[0] - '0';.
0c20: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
0c30: 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66  te3StrICmp(z, "f
0c40: 69 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ile")==0 ){.    
0c50: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c 73  return 1;.  }els
0c60: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
0c70: 49 43 6d 70 28 7a 2c 20 22 6d 65 6d 6f 72 79 22  ICmp(z, "memory"
0c80: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
0c90: 72 6e 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rn 2;.  }else{. 
0ca0: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
0cb0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
0cc0: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
0cd0: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
0ce0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
0cf0: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e  PRAGMAS./*.** In
0d00: 76 61 6c 69 64 61 74 65 20 74 65 6d 70 20 73 74  validate temp st
0d10: 6f 72 61 67 65 2c 20 65 69 74 68 65 72 20 77 68  orage, either wh
0d20: 65 6e 20 74 68 65 20 74 65 6d 70 20 73 74 6f 72  en the temp stor
0d30: 61 67 65 20 69 73 20 63 68 61 6e 67 65 64 0a 2a  age is changed.*
0d40: 2a 20 66 72 6f 6d 20 64 65 66 61 75 6c 74 2c 20  * from default, 
0d50: 6f 72 20 77 68 65 6e 20 27 66 69 6c 65 27 20 61  or when 'file' a
0d60: 6e 64 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72  nd the temp_stor
0d70: 65 5f 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  e_directory has 
0d80: 63 68 61 6e 67 65 64 0a 2a 2f 0a 73 74 61 74 69  changed.*/.stati
0d90: 63 20 69 6e 74 20 69 6e 76 61 6c 69 64 61 74 65  c int invalidate
0da0: 54 65 6d 70 53 74 6f 72 61 67 65 28 50 61 72 73  TempStorage(Pars
0db0: 65 20 2a 70 50 61 72 73 65 29 7b 0a 20 20 73 71  e *pParse){.  sq
0dc0: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72  lite3 *db = pPar
0dd0: 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64 62  se->db;.  if( db
0de0: 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 21 3d 30 20  ->aDb[1].pBt!=0 
0df0: 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
0e00: 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
0e10: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
0e20: 4d 73 67 28 70 50 61 72 73 65 2c 20 22 74 65 6d  Msg(pParse, "tem
0e30: 70 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 63  porary storage c
0e40: 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64  annot be changed
0e50: 20 22 0a 20 20 20 20 20 20 20 20 22 66 72 6f 6d   ".        "from
0e60: 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61   within a transa
0e70: 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 72  ction");.      r
0e80: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
0e90: 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  OR;.    }.    sq
0ea0: 6c 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 28  lite3BtreeClose(
0eb0: 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 3b  db->aDb[1].pBt);
0ec0: 0a 20 20 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e  .    db->aDb[1].
0ed0: 70 42 74 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c  pBt = 0;.    sql
0ee0: 69 74 65 33 52 65 73 65 74 49 6e 74 65 72 6e 61  ite3ResetInterna
0ef0: 6c 53 63 68 65 6d 61 28 64 62 2c 20 30 29 3b 0a  lSchema(db, 0);.
0f00: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c    }.  return SQL
0f10: 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  ITE_OK;.}.#endif
0f20: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
0f30: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
0f40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
0f50: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
0f60: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 54 45 4d 50  *.** If the TEMP
0f70: 20 64 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   database is ope
0f80: 6e 2c 20 63 6c 6f 73 65 20 69 74 20 61 6e 64 20  n, close it and 
0f90: 6d 61 72 6b 20 74 68 65 20 64 61 74 61 62 61 73  mark the databas
0fa0: 65 20 73 63 68 65 6d 61 0a 2a 2a 20 61 73 20 6e  e schema.** as n
0fb0: 65 65 64 69 6e 67 20 72 65 6c 6f 61 64 69 6e 67  eeding reloading
0fc0: 2e 20 20 54 68 69 73 20 6d 75 73 74 20 62 65 20  .  This must be 
0fd0: 64 6f 6e 65 20 77 68 65 6e 20 75 73 69 6e 67 20  done when using 
0fe0: 74 68 65 20 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  the TEMP_STORE.*
0ff0: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
1000: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
1010: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
1020: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
1030: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
1040: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
1050: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
1060: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
1070: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
1080: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
1090: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
10a0: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
10b0: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
10c0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
10d0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
10e0: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
10f0: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
1100: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
1110: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
1120: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
1130: 20 74 73 3b 0a 20 20 72 65 74 75 72 6e 20 53 51   ts;.  return SQ
1140: 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69  LITE_OK;.}.#endi
1150: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45  f /* SQLITE_PAGE
1160: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 2f 2a  R_PRAGMAS */../*
1170: 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64  .** Generate cod
1180: 65 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69  e to return a si
1190: 6e 67 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ngle integer val
11a0: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  ue..*/.static vo
11b0: 69 64 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49  id returnSingleI
11c0: 6e 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nt(Parse *pParse
11d0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c  , const char *zL
11e0: 61 62 65 6c 2c 20 69 6e 74 20 76 61 6c 75 65 29  abel, int value)
11f0: 7b 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71  {.  Vdbe *v = sq
1200: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
1210: 72 73 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  rse);.  sqlite3V
1220: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49  dbeAddOp(v, OP_I
1230: 6e 74 65 67 65 72 2c 20 76 61 6c 75 65 2c 20 30  nteger, value, 0
1240: 29 3b 0a 20 20 69 66 28 20 70 50 61 72 73 65 2d  );.  if( pParse-
1250: 3e 65 78 70 6c 61 69 6e 3d 3d 30 20 29 7b 0a 20  >explain==0 ){. 
1260: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
1270: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
1280: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
1290: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
12a0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c  COLNAME_NAME, zL
12b0: 61 62 65 6c 2c 20 50 33 5f 53 54 41 54 49 43 29  abel, P3_STATIC)
12c0: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
12d0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43  dbeAddOp(v, OP_C
12e0: 61 6c 6c 62 61 63 6b 2c 20 31 2c 20 30 29 3b 0a  allback, 1, 0);.
12f0: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
1300: 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
1310: 4d 41 53 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20  MAS./*.** Check 
1320: 74 6f 20 73 65 65 20 69 66 20 7a 52 69 67 68 74  to see if zRight
1330: 20 61 6e 64 20 7a 4c 65 66 74 20 72 65 66 65 72   and zLeft refer
1340: 20 74 6f 20 61 20 70 72 61 67 6d 61 20 74 68 61   to a pragma tha
1350: 74 20 71 75 65 72 69 65 73 0a 2a 2a 20 6f 72 20  t queries.** or 
1360: 63 68 61 6e 67 65 73 20 6f 6e 65 20 6f 66 20 74  changes one of t
1370: 68 65 20 66 6c 61 67 73 20 69 6e 20 64 62 2d 3e  he flags in db->
1380: 66 6c 61 67 73 2e 20 20 52 65 74 75 72 6e 20 31  flags.  Return 1
1390: 20 69 66 20 73 6f 20 61 6e 64 20 30 20 69 66 20   if so and 0 if 
13a0: 6e 6f 74 2e 0a 2a 2a 20 41 6c 73 6f 2c 20 69 6d  not..** Also, im
13b0: 70 6c 65 6d 65 6e 74 20 74 68 65 20 70 72 61 67  plement the prag
13c0: 6d 61 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ma..*/.static in
13d0: 74 20 66 6c 61 67 50 72 61 67 6d 61 28 50 61 72  t flagPragma(Par
13e0: 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73  se *pParse, cons
13f0: 74 20 63 68 61 72 20 2a 7a 4c 65 66 74 2c 20 63  t char *zLeft, c
1400: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 69 67 68  onst char *zRigh
1410: 74 29 7b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  t){.  static con
1420: 73 74 20 73 74 72 75 63 74 20 73 50 72 61 67 6d  st struct sPragm
1430: 61 54 79 70 65 20 7b 0a 20 20 20 20 63 6f 6e 73  aType {.    cons
1440: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20  t char *zName;  
1450: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 70  /* Name of the p
1460: 72 61 67 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74  ragma */.    int
1470: 20 6d 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20   mask;          
1480: 20 2f 2a 20 4d 61 73 6b 20 66 6f 72 20 74 68 65   /* Mask for the
1490: 20 64 62 2d 3e 66 6c 61 67 73 20 76 61 6c 75 65   db->flags value
14a0: 20 2a 2f 0a 20 20 7d 20 61 50 72 61 67 6d 61 5b   */.  } aPragma[
14b0: 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 22 76 64 62  ] = {.    { "vdb
14c0: 65 5f 74 72 61 63 65 22 2c 20 20 20 20 20 20 20  e_trace",       
14d0: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 56          SQLITE_V
14e0: 64 62 65 54 72 61 63 65 20 20 20 20 20 7d 2c 0a  dbeTrace     },.
14f0: 20 20 20 20 7b 20 22 73 71 6c 5f 74 72 61 63 65      { "sql_trace
1500: 22 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ",              
1510: 20 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63    SQLITE_SqlTrac
1520: 65 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 7b 20  e      },.    { 
1530: 22 76 64 62 65 5f 6c 69 73 74 69 6e 67 22 2c 20  "vdbe_listing", 
1540: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
1550: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 20  TE_VdbeListing  
1560: 20 7d 2c 0a 20 20 20 20 7b 20 22 66 75 6c 6c 5f   },.    { "full_
1570: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 20 20  column_names",  
1580: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46 75 6c        SQLITE_Ful
1590: 6c 43 6f 6c 4e 61 6d 65 73 20 20 7d 2c 0a 20 20  lColNames  },.  
15a0: 20 20 7b 20 22 73 68 6f 72 74 5f 63 6f 6c 75 6d    { "short_colum
15b0: 6e 5f 6e 61 6d 65 73 22 2c 20 20 20 20 20 20 20  n_names",       
15c0: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
15d0: 61 6d 65 73 20 7d 2c 0a 20 20 20 20 7b 20 22 63  ames },.    { "c
15e0: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 20 20  ount_changes",  
15f0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
1600: 5f 43 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 7d  _CountRows     }
1610: 2c 0a 20 20 20 20 7b 20 22 65 6d 70 74 79 5f 72  ,.    { "empty_r
1620: 65 73 75 6c 74 5f 63 61 6c 6c 62 61 63 6b 73 22  esult_callbacks"
1630: 2c 20 20 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43  ,   SQLITE_NullC
1640: 61 6c 6c 62 61 63 6b 20 20 7d 2c 0a 20 20 20 20  allback  },.    
1650: 7b 20 22 6c 65 67 61 63 79 5f 66 69 6c 65 5f 66  { "legacy_file_f
1660: 6f 72 6d 61 74 22 2c 20 20 20 20 20 20 20 53 51  ormat",       SQ
1670: 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46  LITE_LegacyFileF
1680: 6d 74 20 7d 2c 0a 20 20 20 20 7b 20 22 66 75 6c  mt },.    { "ful
1690: 6c 66 73 79 6e 63 22 2c 20 20 20 20 20 20 20 20  lfsync",        
16a0: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46          SQLITE_F
16b0: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 7d 2c 0a  ullFSync     },.
16c0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
16d0: 4d 49 54 5f 43 48 45 43 4b 0a 20 20 20 20 7b 20  MIT_CHECK.    { 
16e0: 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f 63 6f  "ignore_check_co
16f0: 6e 73 74 72 61 69 6e 74 73 22 2c 20 53 51 4c 49  nstraints", SQLI
1700: 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20  TE_IgnoreChecks 
1710: 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 20 20 2f   },.#endif.    /
1720: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1730: 69 73 20 56 45 52 59 20 65 78 70 65 72 69 6d 65  is VERY experime
1740: 6e 74 61 6c 20 2a 2f 0a 20 20 20 20 7b 20 22 77  ntal */.    { "w
1750: 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 22 2c  ritable_schema",
1760: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
1770: 5f 57 72 69 74 65 53 63 68 65 6d 61 7c 53 51 4c  _WriteSchema|SQL
1780: 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65  ITE_RecoveryMode
1790: 20 7d 2c 0a 20 20 20 20 7b 20 22 6f 6d 69 74 5f   },.    { "omit_
17a0: 72 65 61 64 6c 6f 63 6b 22 2c 20 20 20 20 20 20  readlock",      
17b0: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4e 6f 52        SQLITE_NoR
17c0: 65 61 64 6c 6f 63 6b 20 20 20 20 7d 2c 0a 0a 20  eadlock    },.. 
17d0: 20 20 20 2f 2a 20 54 4f 44 4f 3a 20 4d 61 79 62     /* TODO: Mayb
17e0: 65 20 69 74 20 73 68 6f 75 6c 64 6e 27 74 20 62  e it shouldn't b
17f0: 65 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 63 68  e possible to ch
1800: 61 6e 67 65 20 74 68 65 20 52 65 61 64 55 6e 63  ange the ReadUnc
1810: 6f 6d 6d 69 74 74 65 64 0a 20 20 20 20 2a 2a 20  ommitted.    ** 
1820: 66 6c 61 67 20 69 66 20 74 68 65 72 65 20 61 72  flag if there ar
1830: 65 20 61 6e 79 20 61 63 74 69 76 65 20 73 74 61  e any active sta
1840: 74 65 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20 20 20  tements. */.    
1850: 7b 20 22 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74  { "read_uncommit
1860: 74 65 64 22 2c 20 20 20 20 20 20 20 20 20 53 51  ted",         SQ
1870: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
1880: 74 74 65 64 20 7d 2c 0a 20 20 7d 3b 0a 20 20 69  tted },.  };.  i
1890: 6e 74 20 69 3b 0a 20 20 63 6f 6e 73 74 20 73 74  nt i;.  const st
18a0: 72 75 63 74 20 73 50 72 61 67 6d 61 54 79 70 65  ruct sPragmaType
18b0: 20 2a 70 3b 0a 20 20 66 6f 72 28 69 3d 30 2c 20   *p;.  for(i=0, 
18c0: 70 3d 61 50 72 61 67 6d 61 3b 20 69 3c 73 69 7a  p=aPragma; i<siz
18d0: 65 6f 66 28 61 50 72 61 67 6d 61 29 2f 73 69 7a  eof(aPragma)/siz
18e0: 65 6f 66 28 61 50 72 61 67 6d 61 5b 30 5d 29 3b  eof(aPragma[0]);
18f0: 20 69 2b 2b 2c 20 70 2b 2b 29 7b 0a 20 20 20 20   i++, p++){.    
1900: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
1910: 6d 70 28 7a 4c 65 66 74 2c 20 70 2d 3e 7a 4e 61  mp(zLeft, p->zNa
1920: 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  me)==0 ){.      
1930: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50  sqlite3 *db = pP
1940: 61 72 73 65 2d 3e 64 62 3b 0a 20 20 20 20 20 20  arse->db;.      
1950: 56 64 62 65 20 2a 76 3b 0a 20 20 20 20 20 20 76  Vdbe *v;.      v
1960: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
1970: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
1980: 20 69 66 28 20 76 20 29 7b 0a 20 20 20 20 20 20   if( v ){.      
1990: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
19a0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ){.          ret
19b0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
19c0: 72 73 65 2c 20 70 2d 3e 7a 4e 61 6d 65 2c 20 28  rse, p->zName, (
19d0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 70 2d 3e 6d  db->flags & p->m
19e0: 61 73 6b 29 21 3d 30 20 29 3b 0a 20 20 20 20 20  ask)!=0 );.     
19f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a00: 20 20 20 20 69 66 28 20 67 65 74 42 6f 6f 6c 65      if( getBoole
1a10: 61 6e 28 7a 52 69 67 68 74 29 20 29 7b 0a 20 20  an(zRight) ){.  
1a20: 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c            db->fl
1a30: 61 67 73 20 7c 3d 20 70 2d 3e 6d 61 73 6b 3b 0a  ags |= p->mask;.
1a40: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
1a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d  .            db-
1a60: 3e 66 6c 61 67 73 20 26 3d 20 7e 70 2d 3e 6d 61  >flags &= ~p->ma
1a70: 73 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  sk;.          }.
1a80: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
1a90: 7d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 31  }.      return 1
1aa0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
1ab0: 74 75 72 6e 20 30 3b 0a 7d 0a 23 65 6e 64 69 66  turn 0;.}.#endif
1ac0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
1ad0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  FLAG_PRAGMAS */.
1ae0: 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61  ./*.** Process a
1af0: 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e   pragma statemen
1b00: 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d  t.  .**.** Pragm
1b10: 61 73 20 61 72 65 20 6f 66 20 74 68 69 73 20 66  as are of this f
1b20: 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  orm:.**.**      
1b30: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
1b40: 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a  .]id [= value].*
1b50: 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74 69 66  *.** The identif
1b60: 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ier might also b
1b70: 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54 68 65  e a string.  The
1b80: 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69   value is a stri
1b90: 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74  ng, and.** ident
1ba0: 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62  ifier, or a numb
1bb0: 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c 61  er.  If minusFla
1bc0: 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  g is true, then 
1bd0: 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  the value is.** 
1be0: 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20 77 61  a number that wa
1bf0: 73 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  s preceded by a 
1c00: 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a  minus sign..**.*
1c10: 2a 20 49 66 20 74 68 65 20 6c 65 66 74 20 73 69  * If the left si
1c20: 64 65 20 69 73 20 22 64 61 74 61 62 61 73 65 2e  de is "database.
1c30: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
1c40: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 61   the database na
1c50: 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20 69  me.** and pId2 i
1c60: 73 20 74 68 65 20 69 64 2e 20 20 49 66 20 74 68  s the id.  If th
1c70: 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 6a  e left side is j
1c80: 75 73 74 20 22 69 64 22 20 74 68 65 6e 20 70 49  ust "id" then pI
1c90: 64 31 20 69 73 20 74 68 65 0a 2a 2a 20 69 64 20  d1 is the.** id 
1ca0: 61 6e 64 20 70 49 64 32 20 69 73 20 61 6e 79 20  and pId2 is any 
1cb0: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f  empty string..*/
1cc0: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
1cd0: 67 6d 61 28 0a 20 20 50 61 72 73 65 20 2a 70 50  gma(.  Parse *pP
1ce0: 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a  arse, .  Token *
1cf0: 70 49 64 31 2c 20 20 20 20 20 20 20 20 2f 2a 20  pId1,        /* 
1d00: 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 5b 64  First part of [d
1d10: 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c  atabase.]id fiel
1d20: 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49  d */.  Token *pI
1d30: 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20 53 65  d2,        /* Se
1d40: 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b 64 61  cond part of [da
1d50: 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c 64  tabase.]id field
1d60: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 54  , or NULL */.  T
1d70: 6f 6b 65 6e 20 2a 70 56 61 6c 75 65 2c 20 20 20  oken *pValue,   
1d80: 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72 20     /* Token for 
1d90: 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c  <value>, or NULL
1da0: 20 2a 2f 0a 20 20 69 6e 74 20 6d 69 6e 75 73 46   */.  int minusF
1db0: 6c 61 67 20 20 20 20 20 20 20 2f 2a 20 54 72 75  lag       /* Tru
1dc0: 65 20 69 66 20 61 20 27 2d 27 20 73 69 67 6e 20  e if a '-' sign 
1dd0: 70 72 65 63 65 64 65 64 20 3c 76 61 6c 75 65 3e  preceded <value>
1de0: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a   */.){.  char *z
1df0: 4c 65 66 74 20 3d 20 30 3b 20 20 20 20 20 20 20  Left = 0;       
1e00: 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  /* Nul-terminate
1e10: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c  d UTF-8 string <
1e20: 69 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  id> */.  char *z
1e30: 52 69 67 68 74 20 3d 20 30 3b 20 20 20 20 20 20  Right = 0;      
1e40: 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  /* Nul-terminate
1e50: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c  d UTF-8 string <
1e60: 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20  value>, or NULL 
1e70: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
1e80: 2a 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 54  *zDb = 0;   /* T
1e90: 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
1ea0: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64   */.  Token *pId
1eb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ec0: 50 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64 3e 20  Pointer to <id> 
1ed0: 74 6f 6b 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  token */.  int i
1ee0: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
1ef0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 6e    /* Database in
1f00: 64 65 78 20 66 6f 72 20 3c 64 61 74 61 62 61 73  dex for <databas
1f10: 65 3e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  e> */.  sqlite3 
1f20: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
1f30: 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 56  ;.  Db *pDb;.  V
1f40: 64 62 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33  dbe *v = sqlite3
1f50: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
1f60: 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65  .  if( v==0 ) re
1f70: 74 75 72 6e 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65  turn;..  /* Inte
1f80: 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61 62  rpret the [datab
1f90: 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74 68  ase.] part of th
1fa0: 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  e pragma stateme
1fb0: 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20  nt. iDb is the. 
1fc0: 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65   ** index of the
1fd0: 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70   database this p
1fe0: 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61  ragma is being a
1ff0: 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e  pplied to in db.
2000: 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20  aDb[]. */.  iDb 
2010: 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  = sqlite3TwoPart
2020: 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64  Name(pParse, pId
2030: 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a  1, pId2, &pId);.
2040: 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65    if( iDb<0 ) re
2050: 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64  turn;.  pDb = &d
2060: 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20  b->aDb[iDb];..  
2070: 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20 64  /* If the temp d
2080: 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e  atabase has been
2090: 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65   explicitly name
20a0: 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
20b0: 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d   .  ** pragma, m
20c0: 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 6f  ake sure it is o
20d0: 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28  pen. .  */.  if(
20e0: 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74   iDb==1 && sqlit
20f0: 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
2100: 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20  se(pParse) ){.  
2110: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20    return;.  }.. 
2120: 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33   zLeft = sqlite3
2130: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 70 49  NameFromToken(pI
2140: 64 29 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74  d);.  if( !zLeft
2150: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
2160: 20 6d 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20   minusFlag ){.  
2170: 20 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74    zRight = sqlit
2180: 65 33 4d 50 72 69 6e 74 66 28 22 2d 25 54 22 2c  e3MPrintf("-%T",
2190: 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73   pValue);.  }els
21a0: 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20  e{.    zRight = 
21b0: 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
21c0: 6f 6b 65 6e 28 70 56 61 6c 75 65 29 3b 0a 20 20  oken(pValue);.  
21d0: 7d 0a 0a 20 20 7a 44 62 20 3d 20 28 28 69 44 62  }..  zDb = ((iDb
21e0: 3e 30 29 3f 70 44 62 2d 3e 7a 4e 61 6d 65 3a 30  >0)?pDb->zName:0
21f0: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2200: 41 75 74 68 43 68 65 63 6b 28 70 50 61 72 73 65  AuthCheck(pParse
2210: 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d 41 2c  , SQLITE_PRAGMA,
2220: 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74 2c 20   zLeft, zRight, 
2230: 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f  zDb) ){.    goto
2240: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
2250: 0a 20 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  . .#ifndef SQLIT
2260: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
2270: 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  GMAS.  /*.  **  
2280: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
2290: 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  .]default_cache_
22a0: 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  size.  **  PRAGM
22b0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65 66  A [database.]def
22c0: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3d  ault_cache_size=
22d0: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
22e0: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
22f0: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  ts the current p
2300: 65 72 73 69 73 74 65 6e 74 20 73 65 74 74 69 6e  ersistent settin
2310: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70  g for the.  ** p
2320: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20  age cache size. 
2330: 20 54 68 65 20 76 61 6c 75 65 20 72 65 74 75 72   The value retur
2340: 6e 65 64 20 69 73 20 74 68 65 20 6d 61 78 69 6d  ned is the maxim
2350: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a  um number of.  *
2360: 2a 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 70  * pages in the p
2370: 61 67 65 20 63 61 63 68 65 2e 20 20 54 68 65 20  age cache.  The 
2380: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73  second form sets
2390: 20 62 6f 74 68 20 74 68 65 20 63 75 72 72 65 6e   both the curren
23a0: 74 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68  t.  ** page cach
23b0: 65 20 73 69 7a 65 20 76 61 6c 75 65 20 61 6e 64  e size value and
23c0: 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20   the persistent 
23d0: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20  page cache size 
23e0: 76 61 6c 75 65 0a 20 20 2a 2a 20 73 74 6f 72 65  value.  ** store
23f0: 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
2400: 65 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a  e file..  **.  *
2410: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 61  * The default ca
2420: 63 68 65 20 73 69 7a 65 20 69 73 20 73 74 6f 72  che size is stor
2430: 65 64 20 69 6e 20 6d 65 74 61 2d 76 61 6c 75 65  ed in meta-value
2440: 20 32 20 6f 66 20 70 61 67 65 20 31 20 6f 66 20   2 of page 1 of 
2450: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
2460: 65 20 66 69 6c 65 2e 20 20 54 68 65 20 63 61 63  e file.  The cac
2470: 68 65 20 73 69 7a 65 20 69 73 20 61 63 74 75 61  he size is actua
2480: 6c 6c 79 20 74 68 65 20 61 62 73 6f 6c 75 74 65  lly the absolute
2490: 20 76 61 6c 75 65 20 6f 66 0a 20 20 2a 2a 20 74   value of.  ** t
24a0: 68 69 73 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  his memory locat
24b0: 69 6f 6e 2e 20 20 54 68 65 20 73 69 67 6e 20 6f  ion.  The sign o
24c0: 66 20 6d 65 74 61 2d 76 61 6c 75 65 20 32 20 64  f meta-value 2 d
24d0: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 0a 20 20  etermines the.  
24e0: 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73  ** synchronous s
24f0: 65 74 74 69 6e 67 2e 20 20 41 20 6e 65 67 61 74  etting.  A negat
2500: 69 76 65 20 76 61 6c 75 65 20 6d 65 61 6e 73 20  ive value means 
2510: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 69 73 20 6f  synchronous is o
2520: 66 66 0a 20 20 2a 2a 20 61 6e 64 20 61 20 70 6f  ff.  ** and a po
2530: 73 69 74 69 76 65 20 76 61 6c 75 65 20 6d 65 61  sitive value mea
2540: 6e 73 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 69  ns synchronous i
2550: 73 20 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  s on..  */.  if(
2560: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
2570: 7a 4c 65 66 74 2c 22 64 65 66 61 75 6c 74 5f 63  zLeft,"default_c
2580: 61 63 68 65 5f 73 69 7a 65 22 29 3d 3d 30 20 29  ache_size")==0 )
2590: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
25a0: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 67 65  st VdbeOpList ge
25b0: 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d 20 7b  tCacheSize[] = {
25c0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64  .      { OP_Read
25d0: 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 32 2c 20 20  Cookie,  0, 2,  
25e0: 20 20 20 20 20 20 30 7d 2c 20 20 2f 2a 20 30 20        0},  /* 0 
25f0: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 41 62  */.      { OP_Ab
2600: 73 56 61 6c 75 65 2c 20 20 20 20 30 2c 20 30 2c  sValue,    0, 0,
2610: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
2620: 20 20 7b 20 4f 50 5f 44 75 70 2c 20 20 20 20 20    { OP_Dup,     
2630: 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20      0, 0,       
2640: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
2650: 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20  Integer,     0, 
2660: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  0,        0},.  
2670: 20 20 20 20 7b 20 4f 50 5f 4e 65 2c 20 20 20 20      { OP_Ne,    
2680: 20 20 20 20 20 20 30 2c 20 36 2c 20 20 20 20 20        0, 6,     
2690: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
26a0: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30  P_Integer,     0
26b0: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
26c0: 20 2f 2a 20 35 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 5 */.      {
26d0: 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20   OP_Callback,   
26e0: 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   1, 0,        0}
26f0: 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74  ,.    };.    int
2700: 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28 20 73   addr;.    if( s
2710: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
2720: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
2730: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
2740: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
2750: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
2760: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
2770: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
2780: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
2790: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
27a0: 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20  , "cache_size", 
27b0: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
27c0: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
27d0: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
27e0: 20 41 72 72 61 79 53 69 7a 65 28 67 65 74 43 61   ArraySize(getCa
27f0: 63 68 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63  cheSize), getCac
2800: 68 65 53 69 7a 65 29 3b 0a 20 20 20 20 20 20 73  heSize);.      s
2810: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2820: 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29  P1(v, addr, iDb)
2830: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
2840: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
2850: 64 64 72 2b 35 2c 20 4d 41 58 5f 50 41 47 45 53  ddr+5, MAX_PAGES
2860: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
2870: 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 61      int size = a
2880: 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  toi(zRight);.   
2890: 20 20 20 69 66 28 20 73 69 7a 65 3c 30 20 29 20     if( size<0 ) 
28a0: 73 69 7a 65 20 3d 20 2d 73 69 7a 65 3b 0a 20 20  size = -size;.  
28b0: 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e      sqlite3Begin
28c0: 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70  WriteOperation(p
28d0: 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a  Parse, 0, iDb);.
28e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
28f0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
2900: 65 67 65 72 2c 20 73 69 7a 65 2c 20 30 29 3b 0a  eger, size, 0);.
2910: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
2920: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 52 65 61  eAddOp(v, OP_Rea
2930: 64 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 32 29  dCookie, iDb, 2)
2940: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
2950: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
2960: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30  v, OP_Integer, 0
2970: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
2980: 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20  te3VdbeAddOp(v, 
2990: 4f 50 5f 47 65 2c 20 30 2c 20 61 64 64 72 2b 33  OP_Ge, 0, addr+3
29a0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
29b0: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
29c0: 4e 65 67 61 74 69 76 65 2c 20 30 2c 20 30 29 3b  Negative, 0, 0);
29d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
29e0: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 53 65  beAddOp(v, OP_Se
29f0: 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 32 29  tCookie, iDb, 2)
2a00: 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63  ;.      pDb->pSc
2a10: 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65  hema->cache_size
2a20: 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73   = size;.      s
2a30: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
2a40: 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74  cheSize(pDb->pBt
2a50: 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  , pDb->pSchema->
2a60: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20  cache_size);.   
2a70: 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a   }.  }else..  /*
2a80: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
2a90: 61 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69  atabase.]page_si
2aa0: 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  ze.  **  PRAGMA 
2ab0: 5b 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65 5f  [database.]page_
2ac0: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
2ad0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
2ae0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
2af0: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
2b00: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
2b10: 65 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62  e page size in b
2b20: 79 74 65 73 2e 20 20 54 68 65 20 73 65 63 6f 6e  ytes.  The secon
2b30: 64 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65 0a  d form sets the.
2b40: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
2b50: 67 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  ge size value.  
2b60: 54 68 65 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e  The value can on
2b70: 6c 79 20 62 65 20 73 65 74 20 69 66 0a 20 20 2a  ly be set if.  *
2b80: 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  * the database h
2b90: 61 73 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20  as not yet been 
2ba0: 63 72 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20  created..  */.  
2bb0: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
2bc0: 6d 70 28 7a 4c 65 66 74 2c 22 70 61 67 65 5f 73  mp(zLeft,"page_s
2bd0: 69 7a 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ize")==0 ){.    
2be0: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62  Btree *pBt = pDb
2bf0: 2d 3e 70 42 74 3b 0a 20 20 20 20 69 66 28 20 21  ->pBt;.    if( !
2c00: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
2c10: 69 6e 74 20 73 69 7a 65 20 3d 20 70 42 74 20 3f  int size = pBt ?
2c20: 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
2c30: 50 61 67 65 53 69 7a 65 28 70 42 74 29 20 3a 20  PageSize(pBt) : 
2c40: 30 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  0;.      returnS
2c50: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
2c60: 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 20 73 69   "page_size", si
2c70: 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ze);.    }else{.
2c80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
2c90: 65 65 53 65 74 50 61 67 65 53 69 7a 65 28 70 42  eeSetPageSize(pB
2ca0: 74 2c 20 61 74 6f 69 28 7a 52 69 67 68 74 29 2c  t, atoi(zRight),
2cb0: 20 2d 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65   -1);.    }.  }e
2cc0: 6c 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  lse..  /*.  **  
2cd0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
2ce0: 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20  .]locking_mode. 
2cf0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
2d00: 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d  abase.]locking_m
2d10: 6f 64 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78  ode = (normal|ex
2d20: 63 6c 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20  clusive).  */.  
2d30: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
2d40: 6d 70 28 7a 4c 65 66 74 2c 22 6c 6f 63 6b 69 6e  mp(zLeft,"lockin
2d50: 67 5f 6d 6f 64 65 22 29 3d 3d 30 20 29 7b 0a 20  g_mode")==0 ){. 
2d60: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
2d70: 52 65 74 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a  Ret = "normal";.
2d80: 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20      int eMode = 
2d90: 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a  getLockingMode(z
2da0: 52 69 67 68 74 29 3b 0a 0a 20 20 20 20 69 66 28  Right);..    if(
2db0: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65   pId2->n==0 && e
2dc0: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
2dd0: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b  INGMODE_QUERY ){
2de0: 0a 20 20 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65  .      /* Simple
2df0: 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67   "PRAGMA locking
2e00: 5f 6d 6f 64 65 3b 22 20 73 74 61 74 65 6d 65 6e  _mode;" statemen
2e10: 74 2e 20 54 68 69 73 20 69 73 20 61 20 71 75 65  t. This is a que
2e20: 72 79 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20  ry for.      ** 
2e30: 74 68 65 20 63 75 72 72 65 6e 74 20 64 65 66 61  the current defa
2e40: 75 6c 74 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65  ult locking mode
2e50: 20 28 77 68 69 63 68 20 6d 61 79 20 62 65 20 64   (which may be d
2e60: 69 66 66 65 72 65 6e 74 20 74 6f 0a 20 20 20 20  ifferent to.    
2e70: 20 20 2a 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67    ** the locking
2e80: 2d 6d 6f 64 65 20 6f 66 20 74 68 65 20 6d 61 69  -mode of the mai
2e90: 6e 20 64 61 74 61 62 61 73 65 29 2e 0a 20 20 20  n database)..   
2ea0: 20 20 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64     */.      eMod
2eb0: 65 20 3d 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b  e = db->dfltLock
2ec0: 4d 6f 64 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Mode;.    }else{
2ed0: 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50  .      Pager *pP
2ee0: 61 67 65 72 3b 0a 20 20 20 20 20 20 69 66 28 20  ager;.      if( 
2ef0: 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20  pId2->n==0 ){.  
2f00: 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 6e        /* This in
2f10: 64 69 63 61 74 65 73 20 74 68 61 74 20 6e 6f 20  dicates that no 
2f20: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 77 61  database name wa
2f30: 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70  s specified as p
2f40: 61 72 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f  art.        ** o
2f50: 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d  f the PRAGMA com
2f60: 6d 61 6e 64 2e 20 49 6e 20 74 68 69 73 20 63 61  mand. In this ca
2f70: 73 65 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d  se the locking-m
2f80: 6f 64 65 20 6d 75 73 74 20 62 65 0a 20 20 20 20  ode must be.    
2f90: 20 20 20 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c      ** set on al
2fa0: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
2fb0: 61 73 65 73 2c 20 61 73 20 77 65 6c 6c 20 61 73  ases, as well as
2fc0: 20 74 68 65 20 6d 61 69 6e 20 64 62 20 66 69 6c   the main db fil
2fd0: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2a 0a 20 20  e..        **.  
2fe0: 20 20 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74        ** Also, t
2ff0: 68 65 20 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c  he sqlite3.dfltL
3000: 6f 63 6b 4d 6f 64 65 20 76 61 72 69 61 62 6c 65  ockMode variable
3010: 20 69 73 20 73 65 74 20 73 6f 20 74 68 61 74 0a   is set so that.
3020: 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 79 20 73          ** any s
3030: 75 62 73 65 71 75 65 6e 74 6c 79 20 61 74 74 61  ubsequently atta
3040: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61  ched databases a
3050: 6c 73 6f 20 75 73 65 20 74 68 65 20 73 70 65 63  lso use the spec
3060: 69 66 69 65 64 0a 20 20 20 20 20 20 20 20 2a 2a  ified.        **
3070: 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20   locking mode.. 
3080: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
3090: 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20    int ii;.      
30a0: 20 20 61 73 73 65 72 74 28 70 44 62 3d 3d 26 64    assert(pDb==&d
30b0: 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20  b->aDb[0]);.    
30c0: 20 20 20 20 66 6f 72 28 69 69 3d 32 3b 20 69 69      for(ii=2; ii
30d0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
30e0: 0a 20 20 20 20 20 20 20 20 20 20 70 50 61 67 65  .          pPage
30f0: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
3100: 50 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 69 69  Pager(db->aDb[ii
3110: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 20 20 20 20  ].pBt);.        
3120: 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f    sqlite3PagerLo
3130: 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72  ckingMode(pPager
3140: 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20  , eMode);.      
3150: 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
3160: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 65  dfltLockMode = e
3170: 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mode;.      }.  
3180: 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c      pPager = sql
3190: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
31a0: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20  Db->pBt);.      
31b0: 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50  eMode = sqlite3P
31c0: 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28  agerLockingMode(
31d0: 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a  pPager, eMode);.
31e0: 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72      }..    asser
31f0: 74 28 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  t(eMode==PAGER_L
3200: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41  OCKINGMODE_NORMA
3210: 4c 7c 7c 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  L||eMode==PAGER_
3220: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c  LOCKINGMODE_EXCL
3230: 55 53 49 56 45 29 3b 0a 20 20 20 20 69 66 28 20  USIVE);.    if( 
3240: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
3250: 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49  KINGMODE_EXCLUSI
3260: 56 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74  VE ){.      zRet
3270: 20 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a   = "exclusive";.
3280: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
3290: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
32a0: 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  v, 1);.    sqlit
32b0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
32c0: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
32d0: 41 4d 45 2c 20 22 6c 6f 63 6b 69 6e 67 5f 6d 6f  AME, "locking_mo
32e0: 64 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  de", P3_STATIC);
32f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
3300: 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op3(v, OP_String
3310: 38 2c 20 30 2c 20 30 2c 20 7a 52 65 74 2c 20 30  8, 0, 0, zRet, 0
3320: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
3330: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61  beAddOp(v, OP_Ca
3340: 6c 6c 62 61 63 6b 2c 20 31 2c 20 30 29 3b 0a 20  llback, 1, 0);. 
3350: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20 2f 2a   }else.#endif /*
3360: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
3370: 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 20  ER_PRAGMAS */.. 
3380: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
3390: 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75 74 6f   [database.]auto
33a0: 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52  _vacuum.  **  PR
33b0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
33c0: 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20  auto_vacuum=N.  
33d0: 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73  **.  ** Get or s
33e0: 65 74 20 74 68 65 20 28 62 6f 6f 6c 65 61 6e 29  et the (boolean)
33f0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
3400: 74 61 62 61 73 65 20 27 61 75 74 6f 2d 76 61 63  tabase 'auto-vac
3410: 75 75 6d 27 20 70 61 72 61 6d 65 74 65 72 2e 0a  uum' parameter..
3420: 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c    */.#ifndef SQL
3430: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
3440: 55 55 4d 0a 20 20 69 66 28 20 73 71 6c 69 74 65  UUM.  if( sqlite
3450: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22  3StrICmp(zLeft,"
3460: 61 75 74 6f 5f 76 61 63 75 75 6d 22 29 3d 3d 30  auto_vacuum")==0
3470: 20 29 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70   ){.    Btree *p
3480: 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  Bt = pDb->pBt;. 
3490: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
34a0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 61 75 74 6f  {.      int auto
34b0: 5f 76 61 63 75 75 6d 20 3d 20 0a 20 20 20 20 20  _vacuum = .     
34c0: 20 20 20 20 20 70 42 74 20 3f 20 73 71 6c 69 74       pBt ? sqlit
34d0: 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56 61  e3BtreeGetAutoVa
34e0: 63 75 75 6d 28 70 42 74 29 20 3a 20 53 51 4c 49  cuum(pBt) : SQLI
34f0: 54 45 5f 44 45 46 41 55 4c 54 5f 41 55 54 4f 56  TE_DEFAULT_AUTOV
3500: 41 43 55 55 4d 3b 0a 20 20 20 20 20 20 72 65 74  ACUUM;.      ret
3510: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
3520: 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63 75 75  rse, "auto_vacuu
3530: 6d 22 2c 20 61 75 74 6f 5f 76 61 63 75 75 6d 29  m", auto_vacuum)
3540: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
3550: 20 20 20 69 6e 74 20 65 41 75 74 6f 20 3d 20 67     int eAuto = g
3560: 65 74 41 75 74 6f 56 61 63 75 75 6d 28 7a 52 69  etAutoVacuum(zRi
3570: 67 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ght);.      if( 
3580: 65 41 75 74 6f 3e 3d 30 20 29 7b 0a 20 20 20 20  eAuto>=0 ){.    
3590: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
35a0: 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42  SetAutoVacuum(pB
35b0: 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20  t, eAuto);.     
35c0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
35d0: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20  .#endif..  /*.  
35e0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
35f0: 62 61 73 65 2e 5d 69 6e 63 72 65 6d 65 6e 74 61  base.]incrementa
3600: 6c 5f 76 61 63 75 75 6d 28 4e 29 0a 20 20 2a 2a  l_vacuum(N).  **
3610: 0a 20 20 2a 2a 20 44 6f 20 4e 20 73 74 65 70 73  .  ** Do N steps
3620: 20 6f 66 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20   of incremental 
3630: 76 61 63 75 75 6d 69 6e 67 20 6f 6e 20 61 20 64  vacuuming on a d
3640: 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 23 69  atabase..  */.#i
3650: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
3660: 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 69  T_AUTOVACUUM.  i
3670: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
3680: 70 28 7a 4c 65 66 74 2c 22 69 6e 63 72 65 6d 65  p(zLeft,"increme
3690: 6e 74 61 6c 5f 76 61 63 75 75 6d 22 29 3d 3d 30  ntal_vacuum")==0
36a0: 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69 6d   ){.    int iLim
36b0: 69 74 2c 20 61 64 64 72 3b 0a 20 20 20 20 69 66  it, addr;.    if
36c0: 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21  ( zRight==0 || !
36d0: 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
36e0: 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29  zRight, &iLimit)
36f0: 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b   || iLimit<=0 ){
3700: 0a 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20  .      iLimit = 
3710: 30 78 37 66 66 66 66 66 66 66 3b 0a 20 20 20 20  0x7fffffff;.    
3720: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42 65 67  }.    sqlite3Beg
3730: 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
3740: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29  (pParse, 0, iDb)
3750: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
3760: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4d 65 6d  eAddOp(v, OP_Mem
3770: 49 6e 74 2c 20 69 4c 69 6d 69 74 2c 20 30 29 3b  Int, iLimit, 0);
3780: 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69  .    addr = sqli
3790: 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20  te3VdbeAddOp(v, 
37a0: 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 2c 20 69  OP_IncrVacuum, i
37b0: 44 62 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69  Db, 0);.    sqli
37c0: 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20  te3VdbeAddOp(v, 
37d0: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 30 2c 20  OP_Callback, 0, 
37e0: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0);.    sqlite3V
37f0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4d  dbeAddOp(v, OP_M
3800: 65 6d 49 6e 63 72 2c 20 2d 31 2c 20 30 29 3b 0a  emIncr, -1, 0);.
3810: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
3820: 64 64 4f 70 28 76 2c 20 4f 50 5f 49 66 4d 65 6d  ddOp(v, OP_IfMem
3830: 50 6f 73 2c 20 30 2c 20 61 64 64 72 29 3b 0a 20  Pos, 0, addr);. 
3840: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
3850: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
3860: 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a  .  }else.#endif.
3870: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
3880: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
3890: 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  AS.  /*.  **  PR
38a0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
38b0: 63 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20  cache_size.  ** 
38c0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
38d0: 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a  e.]cache_size=N.
38e0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69    **.  ** The fi
38f0: 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73  rst form reports
3900: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 6f 63   the current loc
3910: 61 6c 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  al setting for t
3920: 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  he.  ** page cac
3930: 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20 6c 6f  he size.  The lo
3940: 63 61 6c 20 73 65 74 74 69 6e 67 20 63 61 6e 20  cal setting can 
3950: 62 65 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f  be different fro
3960: 6d 0a 20 20 2a 2a 20 74 68 65 20 70 65 72 73 69  m.  ** the persi
3970: 73 74 65 6e 74 20 63 61 63 68 65 20 73 69 7a 65  stent cache size
3980: 20 76 61 6c 75 65 20 74 68 61 74 20 69 73 20 73   value that is s
3990: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
39a0: 61 62 61 73 65 0a 20 20 2a 2a 20 66 69 6c 65 20  abase.  ** file 
39b0: 69 74 73 65 6c 66 2e 20 20 54 68 65 20 76 61 6c  itself.  The val
39c0: 75 65 20 72 65 74 75 72 6e 65 64 20 69 73 20 74  ue returned is t
39d0: 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  he maximum numbe
39e0: 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67 65 73 20  r of.  ** pages 
39f0: 69 6e 20 74 68 65 20 70 61 67 65 20 63 61 63 68  in the page cach
3a00: 65 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  e.  The second f
3a10: 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63  orm sets the loc
3a20: 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  al.  ** page cac
3a30: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  he size value.  
3a40: 49 74 20 64 6f 65 73 20 6e 6f 74 20 63 68 61 6e  It does not chan
3a50: 67 65 20 74 68 65 20 70 65 72 73 69 73 74 65 6e  ge the persisten
3a60: 74 0a 20 20 2a 2a 20 63 61 63 68 65 20 73 69 7a  t.  ** cache siz
3a70: 65 20 73 74 6f 72 65 64 20 6f 6e 20 74 68 65 20  e stored on the 
3a80: 64 69 73 6b 20 73 6f 20 74 68 65 20 63 61 63 68  disk so the cach
3a90: 65 20 73 69 7a 65 20 77 69 6c 6c 20 72 65 76 65  e size will reve
3aa0: 72 74 0a 20 20 2a 2a 20 74 6f 20 69 74 73 20 64  rt.  ** to its d
3ab0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 68 65  efault value whe
3ac0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  n the database i
3ad0: 73 20 63 6c 6f 73 65 64 20 61 6e 64 20 72 65 6f  s closed and reo
3ae0: 70 65 6e 65 64 2e 0a 20 20 2a 2a 20 4e 20 73 68  pened..  ** N sh
3af0: 6f 75 6c 64 20 62 65 20 61 20 70 6f 73 69 74 69  ould be a positi
3b00: 76 65 20 69 6e 74 65 67 65 72 2e 0a 20 20 2a 2f  ve integer..  */
3b10: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  .  if( sqlite3St
3b20: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 22 63 61 63  rICmp(zLeft,"cac
3b30: 68 65 5f 73 69 7a 65 22 29 3d 3d 30 20 29 7b 0a  he_size")==0 ){.
3b40: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
3b50: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
3b60: 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
3b70: 6f 75 74 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  out;.    if( !zR
3b80: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
3b90: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
3ba0: 61 72 73 65 2c 20 22 63 61 63 68 65 5f 73 69 7a  arse, "cache_siz
3bb0: 65 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  e", pDb->pSchema
3bc0: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
3bd0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
3be0: 69 6e 74 20 73 69 7a 65 20 3d 20 61 74 6f 69 28  int size = atoi(
3bf0: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 69  zRight);.      i
3c00: 66 28 20 73 69 7a 65 3c 30 20 29 20 73 69 7a 65  f( size<0 ) size
3c10: 20 3d 20 2d 73 69 7a 65 3b 0a 20 20 20 20 20 20   = -size;.      
3c20: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
3c30: 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b  che_size = size;
3c40: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74  .      sqlite3Bt
3c50: 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65 28  reeSetCacheSize(
3c60: 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70  pDb->pBt, pDb->p
3c70: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
3c80: 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  ze);.    }.  }el
3c90: 73 65 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  se..  /*.  **   
3ca0: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
3cb0: 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  e.  **   PRAGMA 
3cc0: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65  temp_store = "de
3cd0: 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c  fault"|"memory"|
3ce0: 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  "file".  **.  **
3cf0: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
3d00: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
3d10: 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65  f the temp_store
3d20: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
3d30: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
3d40: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
3d50: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
3d60: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
3d70: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a   the default.  *
3d80: 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  * value will be 
3d90: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
3da0: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
3db0: 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20  ase is opened.. 
3dc0: 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68   **.  ** Note th
3dd0: 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  at it is possibl
3de0: 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72  e for the librar
3df0: 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  y compile-time o
3e00: 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f  ptions to.  ** o
3e10: 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65 74  verride this set
3e20: 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ting.  */.  if( 
3e30: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
3e40: 4c 65 66 74 2c 20 22 74 65 6d 70 5f 73 74 6f 72  Left, "temp_stor
3e50: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66  e")==0 ){.    if
3e60: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
3e70: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
3e80: 6e 74 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70  nt(pParse, "temp
3e90: 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d  _store", db->tem
3ea0: 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65  p_store);.    }e
3eb0: 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e 67  lse{.      chang
3ec0: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
3ed0: 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  rse, zRight);.  
3ee0: 20 20 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f    }.  }else..  /
3ef0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
3f00: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
3f10: 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41 47  tory.  **   PRAG
3f20: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
3f30: 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64 69  rectory = ""|"di
3f40: 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20  rectory_name".  
3f50: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
3f60: 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20  r set the local 
3f70: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d  value of the tem
3f80: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
3f90: 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  y flag.  Changin
3fa0: 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65  g.  ** the value
3fb0: 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63   sets a specific
3fc0: 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62 65   directory to be
3fd0: 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
3fe0: 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a 20  ary files..  ** 
3ff0: 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c  Setting to a nul
4000: 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73  l string reverts
4010: 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20   to the default 
4020: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
4030: 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a 2a  ory search..  **
4040: 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64 69   If temporary di
4050: 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67  rectory is chang
4060: 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69 64  ed, then invalid
4070: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e 0a  ateTempStorage..
4080: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 69 66 28 20    **.  */.  if( 
4090: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
40a0: 4c 65 66 74 2c 20 22 74 65 6d 70 5f 73 74 6f 72  Left, "temp_stor
40b0: 65 5f 64 69 72 65 63 74 6f 72 79 22 29 3d 3d 30  e_directory")==0
40c0: 20 29 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   ){.    if( !zRi
40d0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ght ){.      if(
40e0: 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69   sqlite3_temp_di
40f0: 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20  rectory ){.     
4100: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
4110: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
4120: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
4130: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
4140: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
4150: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
4160: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
4170: 74 6f 72 79 22 2c 20 50 33 5f 53 54 41 54 49 43  tory", P3_STATIC
4180: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
4190: 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f  e3VdbeOp3(v, OP_
41a0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 30 2c 20 73  String8, 0, 0, s
41b0: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
41c0: 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20  ctory, 0);.     
41d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
41e0: 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61  dOp(v, OP_Callba
41f0: 63 6b 2c 20 31 2c 20 30 29 3b 0a 20 20 20 20 20  ck, 1, 0);.     
4200: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
4210: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
4220: 5d 20 26 26 20 21 73 71 6c 69 74 65 33 4f 73 49  ] && !sqlite3OsI
4230: 73 44 69 72 57 72 69 74 61 62 6c 65 28 7a 52 69  sDirWritable(zRi
4240: 67 68 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ght) ){.        
4250: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
4260: 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77  pParse, "not a w
4270: 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72  ritable director
4280: 79 22 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  y");.        got
4290: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
42a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
42b0: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20  TEMP_STORE==0.  
42c0: 20 20 20 20 20 7c 7c 20 28 54 45 4d 50 5f 53 54       || (TEMP_ST
42d0: 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d 3e 74 65  ORE==1 && db->te
42e0: 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a 20 20 20  mp_store<=1).   
42f0: 20 20 20 20 7c 7c 20 28 54 45 4d 50 5f 53 54 4f      || (TEMP_STO
4300: 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d  RE==2 && db->tem
4310: 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20  p_store==1).    
4320: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76    ){.        inv
4330: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
4340: 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ge(pParse);.    
4350: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
4360: 46 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d  Free(sqlite3_tem
4370: 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20  p_directory);.  
4380: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
4390: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ] ){.        sql
43a0: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
43b0: 6f 72 79 20 3d 20 7a 52 69 67 68 74 3b 0a 20 20  ory = zRight;.  
43c0: 20 20 20 20 20 20 7a 52 69 67 68 74 20 3d 20 30        zRight = 0
43d0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
43e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74         sqlite3_t
43f0: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  emp_directory = 
4400: 30 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  0;.      }.    }
4410: 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 2f 2a 0a 20  .  }else..  /*. 
4420: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
4430: 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e  tabase.]synchron
4440: 6f 75 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ous.  **   PRAGM
4450: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 79 6e  A [database.]syn
4460: 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c  chronous=OFF|ON|
4470: 4e 4f 52 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a  NORMAL|FULL.  **
4480: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
4490: 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61  set the local va
44a0: 6c 75 65 20 6f 66 20 74 68 65 20 73 79 6e 63 68  lue of the synch
44b0: 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20 43 68  ronous flag.  Ch
44c0: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
44d0: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73  local value does
44e0: 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65   not make change
44f0: 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69  s to the disk fi
4500: 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20  le and the.  ** 
4510: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69  default value wi
4520: 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64 20 74  ll be restored t
4530: 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65  he next time the
4540: 20 64 61 74 61 62 61 73 65 20 69 73 0a 20 20 2a   database is.  *
4550: 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20  * opened..  */. 
4560: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
4570: 43 6d 70 28 7a 4c 65 66 74 2c 22 73 79 6e 63 68  Cmp(zLeft,"synch
4580: 72 6f 6e 6f 75 73 22 29 3d 3d 30 20 29 7b 0a 20  ronous")==0 ){. 
4590: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
45a0: 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
45b0: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
45c0: 75 74 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  ut;.    if( !zRi
45d0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
45e0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
45f0: 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75  rse, "synchronou
4600: 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f  s", pDb->safety_
4610: 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65  level-1);.    }e
4620: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21  lse{.      if( !
4630: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
4640: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
4650: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
4660: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
4670: 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79  Safety level may
4680: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
4690: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
46a0: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65  tion");.      }e
46b0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 62  lse{.        pDb
46c0: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ->safety_level =
46d0: 20 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28   getSafetyLevel(
46e0: 7a 52 69 67 68 74 29 2b 31 3b 0a 20 20 20 20 20  zRight)+1;.     
46f0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65   }.    }.  }else
4700: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
4710: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
4720: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
4730: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41   SQLITE_OMIT_FLA
4740: 47 5f 50 52 41 47 4d 41 53 0a 20 20 69 66 28 20  G_PRAGMAS.  if( 
4750: 66 6c 61 67 50 72 61 67 6d 61 28 70 50 61 72 73  flagPragma(pPars
4760: 65 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74  e, zLeft, zRight
4770: 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  ) ){.    /* The 
4780: 66 6c 61 67 50 72 61 67 6d 61 28 29 20 73 75 62  flagPragma() sub
4790: 72 6f 75 74 69 6e 65 20 61 6c 73 6f 20 67 65 6e  routine also gen
47a0: 65 72 61 74 65 73 20 61 6e 79 20 6e 65 63 65 73  erates any neces
47b0: 73 61 72 79 20 63 6f 64 65 0a 20 20 20 20 2a 2a  sary code.    **
47c0: 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e   there is nothin
47d0: 67 20 6d 6f 72 65 20 74 6f 20 64 6f 20 68 65 72  g more to do her
47e0: 65 20 2a 2f 0a 20 20 7d 65 6c 73 65 0a 23 65 6e  e */.  }else.#en
47f0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
4800: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20  IT_FLAG_PRAGMAS 
4810: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
4820: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
4830: 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a  RAGMAS.  /*.  **
4840: 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f     PRAGMA table_
4850: 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20  info(<table>).  
4860: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61  **.  ** Return a
4870: 20 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20   single row for 
4880: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  each column of t
4890: 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20  he named table. 
48a0: 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20  The columns of. 
48b0: 20 2a 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64   ** the returned
48c0: 20 64 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20   data set are:. 
48d0: 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20   **.  ** cid:   
48e0: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28       Column id (
48f0: 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65  numbered from le
4900: 66 74 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61  ft to right, sta
4910: 72 74 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a  rting at 0).  **
4920: 20 6e 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c   name:       Col
4930: 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79  umn name.  ** ty
4940: 70 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  pe:       Column
4950: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
4960: 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a  e..  ** notnull:
4970: 20 20 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54      True if 'NOT
4980: 20 4e 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f   NULL' is part o
4990: 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61  f column declara
49a0: 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76  tion.  ** dflt_v
49b0: 61 6c 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c  alue: The defaul
49c0: 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  t value for the 
49d0: 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a  column, if any..
49e0: 20 20 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74    */.  if( sqlit
49f0: 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c  e3StrICmp(zLeft,
4a00: 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 29 3d 3d   "table_info")==
4a10: 30 20 26 26 20 7a 52 69 67 68 74 20 29 7b 0a 20  0 && zRight ){. 
4a20: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
4a30: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
4a40: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
4a50: 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
4a60: 6f 75 74 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  out;.    pTab = 
4a70: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
4a80: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
4a90: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
4aa0: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a  ){.      int i;.
4ab0: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43        Column *pC
4ac0: 6f 6c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ol;.      sqlite
4ad0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
4ae0: 76 2c 20 36 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 6);.      sql
4af0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
4b00: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
4b10: 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20 50 33  _NAME, "cid", P3
4b20: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
4b30: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
4b40: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
4b50: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
4b60: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
4b70: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
4b80: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
4b90: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74  COLNAME_NAME, "t
4ba0: 79 70 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29  ype", P3_STATIC)
4bb0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
4bc0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
4bd0: 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   3, COLNAME_NAME
4be0: 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 50 33 5f  , "notnull", P3_
4bf0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
4c00: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
4c10: 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41  Name(v, 4, COLNA
4c20: 4d 45 5f 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76  ME_NAME, "dflt_v
4c30: 61 6c 75 65 22 2c 20 50 33 5f 53 54 41 54 49 43  alue", P3_STATIC
4c40: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
4c50: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
4c60: 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 5, COLNAME_NAM
4c70: 45 2c 20 22 70 6b 22 2c 20 50 33 5f 53 54 41 54  E, "pk", P3_STAT
4c80: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
4c90: 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
4ca0: 61 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54 61  ames(pParse, pTa
4cb0: 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  b);.      for(i=
4cc0: 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61 43  0, pCol=pTab->aC
4cd0: 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c  ol; i<pTab->nCol
4ce0: 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a  ; i++, pCol++){.
4cf0: 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 54 6f          const To
4d00: 6b 65 6e 20 2a 70 44 66 6c 74 3b 0a 20 20 20 20  ken *pDflt;.    
4d10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
4d20: 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67  ddOp(v, OP_Integ
4d30: 65 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20 20 20  er, i, 0);.     
4d40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70     sqlite3VdbeOp
4d50: 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  3(v, OP_String8,
4d60: 20 30 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e 61   0, 0, pCol->zNa
4d70: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
4d80: 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76  sqlite3VdbeOp3(v
4d90: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
4da0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70   0,.           p
4db0: 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f  Col->zType ? pCo
4dc0: 6c 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c 20 30  l->zType : "", 0
4dd0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
4de0: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
4df0: 50 5f 49 6e 74 65 67 65 72 2c 20 70 43 6f 6c 2d  P_Integer, pCol-
4e00: 3e 6e 6f 74 4e 75 6c 6c 2c 20 30 29 3b 0a 20 20  >notNull, 0);.  
4e10: 20 20 20 20 20 20 69 66 28 20 70 43 6f 6c 2d 3e        if( pCol->
4e20: 70 44 66 6c 74 20 26 26 20 28 70 44 66 6c 74 20  pDflt && (pDflt 
4e30: 3d 20 26 70 43 6f 6c 2d 3e 70 44 66 6c 74 2d 3e  = &pCol->pDflt->
4e40: 73 70 61 6e 29 2d 3e 7a 20 29 7b 0a 20 20 20 20  span)->z ){.    
4e50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
4e60: 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e  eOp3(v, OP_Strin
4e70: 67 38 2c 20 30 2c 20 30 2c 20 28 63 68 61 72 2a  g8, 0, 0, (char*
4e80: 29 70 44 66 6c 74 2d 3e 7a 2c 20 70 44 66 6c 74  )pDflt->z, pDflt
4e90: 2d 3e 6e 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  ->n);.        }e
4ea0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73  lse{.          s
4eb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
4ec0: 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 30  v, OP_Null, 0, 0
4ed0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
4ee0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4ef0: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65  AddOp(v, OP_Inte
4f00: 67 65 72 2c 20 70 43 6f 6c 2d 3e 69 73 50 72 69  ger, pCol->isPri
4f10: 6d 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  mKey, 0);.      
4f20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
4f30: 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62 61 63  Op(v, OP_Callbac
4f40: 6b 2c 20 36 2c 20 30 29 3b 0a 20 20 20 20 20 20  k, 6, 0);.      
4f50: 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  }.    }.  }else.
4f60: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  .  if( sqlite3St
4f70: 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 69 6e  rICmp(zLeft, "in
4f80: 64 65 78 5f 69 6e 66 6f 22 29 3d 3d 30 20 26 26  dex_info")==0 &&
4f90: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49   zRight ){.    I
4fa0: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
4fb0: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
4fc0: 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
4fd0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
4fe0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
4ff0: 3b 0a 20 20 20 20 70 49 64 78 20 3d 20 73 71 6c  ;.    pIdx = sql
5000: 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62  ite3FindIndex(db
5010: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
5020: 20 20 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a      if( pIdx ){.
5030: 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20        int i;.   
5040: 20 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e     pTab = pIdx->
5050: 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71  pTable;.      sq
5060: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
5070: 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 20  ols(v, 3);.     
5080: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
5090: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
50a0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 6e  NAME_NAME, "seqn
50b0: 6f 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  o", P3_STATIC);.
50c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
50d0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
50e0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
50f0: 22 63 69 64 22 2c 20 50 33 5f 53 54 41 54 49 43  "cid", P3_STATIC
5100: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
5110: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
5120: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
5130: 45 2c 20 22 6e 61 6d 65 22 2c 20 50 33 5f 53 54  E, "name", P3_ST
5140: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 66 6f 72  ATIC);.      for
5150: 28 69 3d 30 3b 20 69 3c 70 49 64 78 2d 3e 6e 43  (i=0; i<pIdx->nC
5160: 6f 6c 75 6d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  olumn; i++){.   
5170: 20 20 20 20 20 69 6e 74 20 63 6e 75 6d 20 3d 20       int cnum = 
5180: 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69  pIdx->aiColumn[i
5190: 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ];.        sqlit
51a0: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
51b0: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 30 29  P_Integer, i, 0)
51c0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
51d0: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
51e0: 5f 49 6e 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20  _Integer, cnum, 
51f0: 30 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  0);.        asse
5200: 72 74 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 3e 63  rt( pTab->nCol>c
5210: 6e 75 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 73  num );.        s
5220: 71 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76 2c  qlite3VdbeOp3(v,
5230: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
5240: 30 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e  0, pTab->aCol[cn
5250: 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  um].zName, 0);. 
5260: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
5270: 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61  beAddOp(v, OP_Ca
5280: 6c 6c 62 61 63 6b 2c 20 33 2c 20 30 29 3b 0a 20  llback, 3, 0);. 
5290: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
52a0: 65 6c 73 65 0a 0a 20 20 69 66 28 20 73 71 6c 69  else..  if( sqli
52b0: 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74  te3StrICmp(zLeft
52c0: 2c 20 22 69 6e 64 65 78 5f 6c 69 73 74 22 29 3d  , "index_list")=
52d0: 3d 30 20 26 26 20 7a 52 69 67 68 74 20 29 7b 0a  =0 && zRight ){.
52e0: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
52f0: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
5300: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
5310: 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72  3ReadSchema(pPar
5320: 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d  se) ) goto pragm
5330: 61 5f 6f 75 74 3b 0a 20 20 20 20 70 54 61 62 20  a_out;.    pTab 
5340: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
5350: 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  le(db, zRight, z
5360: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61  Db);.    if( pTa
5370: 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73  b ){.      v = s
5380: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
5390: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70 49 64  arse);.      pId
53a0: 78 20 3d 20 70 54 61 62 2d 3e 70 49 6e 64 65 78  x = pTab->pIndex
53b0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78  ;.      if( pIdx
53c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   ){.        int 
53d0: 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20  i = 0; .        
53e0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
53f0: 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20  mCols(v, 3);.   
5400: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
5410: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
5420: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
5430: 73 65 71 22 2c 20 50 33 5f 53 54 41 54 49 43 29  seq", P3_STATIC)
5440: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
5450: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
5460: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
5470: 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 50 33 5f 53  ME, "name", P3_S
5480: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
5490: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
54a0: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
54b0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 75 6e 69 71 75  AME_NAME, "uniqu
54c0: 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  e", P3_STATIC);.
54d0: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 70 49          while(pI
54e0: 64 78 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  dx){.          s
54f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
5500: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
5510: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
5520: 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76  sqlite3VdbeOp3(v
5530: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
5540: 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c   0, pIdx->zName,
5550: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   0);.          s
5560: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
5570: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
5580: 49 64 78 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45  Idx->onError!=OE
5590: 5f 4e 6f 6e 65 2c 20 30 29 3b 0a 20 20 20 20 20  _None, 0);.     
55a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
55b0: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c  AddOp(v, OP_Call
55c0: 62 61 63 6b 2c 20 33 2c 20 30 29 3b 0a 20 20 20  back, 3, 0);.   
55d0: 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20         ++i;.    
55e0: 20 20 20 20 20 20 70 49 64 78 20 3d 20 70 49 64        pIdx = pId
55f0: 78 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20  x->pNext;.      
5600: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
5610: 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
5620: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
5630: 7a 4c 65 66 74 2c 20 22 64 61 74 61 62 61 73 65  zLeft, "database
5640: 5f 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20 20  _list")==0 ){.  
5650: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 66 28    int i;.    if(
5660: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
5670: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
5680: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
5690: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
56a0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20  NumCols(v, 3);. 
56b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
56c0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
56d0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65  OLNAME_NAME, "se
56e0: 71 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a  q", P3_STATIC);.
56f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
5700: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
5710: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
5720: 61 6d 65 22 2c 20 50 33 5f 53 54 41 54 49 43 29  ame", P3_STATIC)
5730: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
5740: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
5750: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
5760: 22 66 69 6c 65 22 2c 20 50 33 5f 53 54 41 54 49  "file", P3_STATI
5770: 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  C);.    for(i=0;
5780: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
5790: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
57a0: 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20  aDb[i].pBt==0 ) 
57b0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
57c0: 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b  assert( db->aDb[
57d0: 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20  i].zName!=0 );. 
57e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
57f0: 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65  AddOp(v, OP_Inte
5800: 67 65 72 2c 20 69 2c 20 30 29 3b 0a 20 20 20 20  ger, i, 0);.    
5810: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33    sqlite3VdbeOp3
5820: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
5830: 30 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  0, 0, db->aDb[i]
5840: 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  .zName, 0);.    
5850: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33    sqlite3VdbeOp3
5860: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
5870: 30 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  0, 0,.          
5880: 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
5890: 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62  Filename(db->aDb
58a0: 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20 20  [i].pBt), 0);.  
58b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
58c0: 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c 6c 62  ddOp(v, OP_Callb
58d0: 61 63 6b 2c 20 33 2c 20 30 29 3b 0a 20 20 20 20  ack, 3, 0);.    
58e0: 7d 0a 20 20 7d 65 6c 73 65 0a 0a 20 20 69 66 28  }.  }else..  if(
58f0: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
5900: 7a 4c 65 66 74 2c 20 22 63 6f 6c 6c 61 74 69 6f  zLeft, "collatio
5910: 6e 5f 6c 69 73 74 22 29 3d 3d 30 20 29 7b 0a 20  n_list")==0 ){. 
5920: 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20     int i = 0;.  
5930: 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20    HashElem *p;. 
5940: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
5950: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a  tNumCols(v, 2);.
5960: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
5970: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
5980: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
5990: 65 71 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b  eq", P3_STATIC);
59a0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
59b0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
59c0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
59d0: 6e 61 6d 65 22 2c 20 50 33 5f 53 54 41 54 49 43  name", P3_STATIC
59e0: 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73 71 6c  );.    for(p=sql
59f0: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
5a00: 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b 20  ->aCollSeq); p; 
5a10: 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  p=sqliteHashNext
5a20: 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c 6c  (p)){.      Coll
5a30: 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f  Seq *pColl = (Co
5a40: 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61  llSeq *)sqliteHa
5a50: 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20 20 20  shData(p);.     
5a60: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5a70: 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  p(v, OP_Integer,
5a80: 20 69 2b 2b 2c 20 30 29 3b 0a 20 20 20 20 20 20   i++, 0);.      
5a90: 73 71 6c 69 74 65 33 56 64 62 65 4f 70 33 28 76  sqlite3VdbeOp3(v
5aa0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
5ab0: 20 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65   0, pColl->zName
5ac0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
5ad0: 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20  te3VdbeAddOp(v, 
5ae0: 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 32 2c 20  OP_Callback, 2, 
5af0: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  0);.    }.  }els
5b00: 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  e.#endif /* SQLI
5b10: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
5b20: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
5b30: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
5b40: 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 69 66 28  OREIGN_KEY.  if(
5b50: 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
5b60: 7a 4c 65 66 74 2c 20 22 66 6f 72 65 69 67 6e 5f  zLeft, "foreign_
5b70: 6b 65 79 5f 6c 69 73 74 22 29 3d 3d 30 20 26 26  key_list")==0 &&
5b80: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46   zRight ){.    F
5b90: 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61  Key *pFK;.    Ta
5ba0: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 69  ble *pTab;.    i
5bb0: 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
5bc0: 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
5bd0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
5be0: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
5bf0: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
5c00: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
5c10: 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
5c20: 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47      v = sqlite3G
5c30: 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a  etVdbe(pParse);.
5c40: 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54 61 62        pFK = pTab
5c50: 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20 20 69  ->pFKey;.      i
5c60: 66 28 20 70 46 4b 20 29 7b 0a 20 20 20 20 20 20  f( pFK ){.      
5c70: 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20    int i = 0; .  
5c80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5c90: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 35  eSetNumCols(v, 5
5ca0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5cb0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
5cc0: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
5cd0: 41 4d 45 2c 20 22 69 64 22 2c 20 50 33 5f 53 54  AME, "id", P3_ST
5ce0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
5cf0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
5d00: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
5d10: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20  ME_NAME, "seq", 
5d20: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
5d30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
5d40: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
5d50: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74  COLNAME_NAME, "t
5d60: 61 62 6c 65 22 2c 20 50 33 5f 53 54 41 54 49 43  able", P3_STATIC
5d70: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
5d80: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
5d90: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
5da0: 41 4d 45 2c 20 22 66 72 6f 6d 22 2c 20 50 33 5f  AME, "from", P3_
5db0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
5dc0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
5dd0: 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c  olName(v, 4, COL
5de0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 6f 22 2c  NAME_NAME, "to",
5df0: 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P3_STATIC);.   
5e00: 20 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b       while(pFK){
5e10: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a  .          int j
5e20: 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  ;.          for(
5e30: 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c  j=0; j<pFK->nCol
5e40: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
5e50: 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d      char *zCol =
5e60: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43   pFK->aCol[j].zC
5e70: 6f 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ol;.            
5e80: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5e90: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
5ea0: 69 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  i, 0);.         
5eb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
5ec0: 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  dOp(v, OP_Intege
5ed0: 72 2c 20 6a 2c 20 30 29 3b 0a 20 20 20 20 20 20  r, j, 0);.      
5ee0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5ef0: 65 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e  eOp3(v, OP_Strin
5f00: 67 38 2c 20 30 2c 20 30 2c 20 70 46 4b 2d 3e 7a  g8, 0, 0, pFK->z
5f10: 54 6f 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  To, 0);.        
5f20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f      sqlite3VdbeO
5f30: 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p3(v, OP_String8
5f40: 2c 20 30 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 0, 0,.        
5f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f60: 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b       pTab->aCol[
5f70: 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72  pFK->aCol[j].iFr
5f80: 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  om].zName, 0);. 
5f90: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
5fa0: 65 33 56 64 62 65 4f 70 33 28 76 2c 20 7a 43 6f  e3VdbeOp3(v, zCo
5fb0: 6c 20 3f 20 4f 50 5f 53 74 72 69 6e 67 38 20 3a  l ? OP_String8 :
5fc0: 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 30 2c 20   OP_Null, 0, 0, 
5fd0: 7a 43 6f 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20  zCol, 0);.      
5fe0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5ff0: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43 61 6c  eAddOp(v, OP_Cal
6000: 6c 62 61 63 6b 2c 20 35 2c 20 30 29 3b 0a 20 20  lback, 5, 0);.  
6010: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
6020: 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20      ++i;.       
6030: 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e     pFK = pFK->pN
6040: 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20  extFrom;.       
6050: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
6060: 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 20  .  }else.#endif 
6070: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
6080: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
6090: 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  KEY) */..#ifndef
60a0: 20 4e 44 45 42 55 47 0a 20 20 69 66 28 20 73 71   NDEBUG.  if( sq
60b0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c 65  lite3StrICmp(zLe
60c0: 66 74 2c 20 22 70 61 72 73 65 72 5f 74 72 61 63  ft, "parser_trac
60d0: 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 65 78  e")==0 ){.    ex
60e0: 74 65 72 6e 20 76 6f 69 64 20 73 71 6c 69 74 65  tern void sqlite
60f0: 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49 4c  3ParserTrace(FIL
6100: 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 20 20 20  E*, char *);.   
6110: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
6120: 20 20 20 20 20 69 66 28 20 67 65 74 42 6f 6f 6c       if( getBool
6130: 65 61 6e 28 7a 52 69 67 68 74 29 20 29 7b 0a 20  ean(zRight) ){. 
6140: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
6150: 72 73 65 72 54 72 61 63 65 28 73 74 64 65 72 72  rserTrace(stderr
6160: 2c 20 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20  , "parser: ");. 
6170: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
6180: 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65      sqlite3Parse
6190: 72 54 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20  rTrace(0, 0);.  
61a0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
61b0: 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a  lse.#endif..  /*
61c0: 20 52 65 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c   Reinstall the L
61d0: 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e  IKE and GLOB fun
61e0: 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 76 61 72  ctions.  The var
61f0: 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a  iant of LIKE.  *
6200: 2a 20 75 73 65 64 20 77 69 6c 6c 20 62 65 20 63  * used will be c
6210: 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 6f 72  ase sensitive or
6220: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
6230: 6e 20 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a  n the RHS..  */.
6240: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
6250: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 63 61 73  ICmp(zLeft, "cas
6260: 65 5f 73 65 6e 73 69 74 69 76 65 5f 6c 69 6b 65  e_sensitive_like
6270: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  ")==0 ){.    if(
6280: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
6290: 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
62a0: 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62  LikeFunctions(db
62b0: 2c 20 67 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  , getBoolean(zRi
62c0: 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  ght));.    }.  }
62d0: 65 6c 73 65 0a 0a 23 69 66 6e 64 65 66 20 53 51  else..#ifndef SQ
62e0: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
62f0: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23  HECK_ERROR_MAX.#
6300: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
6310: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
6320: 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e  RROR_MAX 100.#en
6330: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
6340: 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
6350: 54 59 5f 43 48 45 43 4b 0a 20 20 69 66 28 20 73  TY_CHECK.  if( s
6360: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
6370: 65 66 74 2c 20 22 69 6e 74 65 67 72 69 74 79 5f  eft, "integrity_
6380: 63 68 65 63 6b 22 29 3d 3d 30 20 29 7b 0a 20 20  check")==0 ){.  
6390: 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72    int i, j, addr
63a0: 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 2f 2a  , mxErr;..    /*
63b0: 20 43 6f 64 65 20 74 68 61 74 20 61 70 70 65 61   Code that appea
63c0: 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  rs at the end of
63d0: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 63   the integrity c
63e0: 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72  heck.  If no err
63f0: 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61 67  or.    ** messag
6400: 65 73 20 68 61 76 65 20 62 65 65 6e 20 67 65 6e  es have been gen
6410: 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20 4f  erated, output O
6420: 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f 75  K.  Otherwise ou
6430: 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a 20  tput the.    ** 
6440: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20 20  error message.  
6450: 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20    */.    static 
6460: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
6470: 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20   endCode[] = {. 
6480: 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 4c 6f 61       { OP_MemLoa
6490: 64 2c 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20  d,     0, 0,    
64a0: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
64b0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
64c0: 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 0,        0},
64d0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 65 2c 20  .      { OP_Ne, 
64e0: 20 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20           0, 0,  
64f0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
6500: 32 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  2 */.      { OP_
6510: 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20  String8,     0, 
6520: 30 2c 20 20 20 20 20 20 20 20 22 6f 6b 22 7d 2c  0,        "ok"},
6530: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c  .      { OP_Call
6540: 62 61 63 6b 2c 20 20 20 20 31 2c 20 30 2c 20 20  back,    1, 0,  
6550: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b        0},.    };
6560: 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  ..    /* Initial
6570: 69 7a 65 20 74 68 65 20 56 44 42 45 20 70 72 6f  ize the VDBE pro
6580: 67 72 61 6d 20 2a 2f 0a 20 20 20 20 69 66 28 20  gram */.    if( 
6590: 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
65a0: 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f  a(pParse) ) goto
65b0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
65c0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
65d0: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
65e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
65f0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
6600: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 74  LNAME_NAME, "int
6610: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 20 50  egrity_check", P
6620: 33 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20  3_STATIC);..    
6630: 2f 2a 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d  /* Set the maxim
6640: 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a  um error count *
6650: 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51  /.    mxErr = SQ
6660: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
6670: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a  HECK_ERROR_MAX;.
6680: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
6690: 7b 0a 20 20 20 20 20 20 6d 78 45 72 72 20 3d 20  {.      mxErr = 
66a0: 61 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  atoi(zRight);.  
66b0: 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30      if( mxErr<=0
66c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72   ){.        mxEr
66d0: 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  r = SQLITE_INTEG
66e0: 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
66f0: 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _MAX;.      }.  
6700: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
6710: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4d  dbeAddOp(v, OP_M
6720: 65 6d 49 6e 74 2c 20 6d 78 45 72 72 2c 20 30 29  emInt, mxErr, 0)
6730: 3b 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20  ;..    /* Do an 
6740: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20  integrity check 
6750: 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61 73 65  on each database
6760: 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72   file */.    for
6770: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
6780: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61 73   i++){.      Has
6790: 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20  hElem *x;.      
67a0: 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20  Hash *pTbls;.   
67b0: 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a     int cnt = 0;.
67c0: 0a 20 20 20 20 20 20 69 66 28 20 4f 4d 49 54 5f  .      if( OMIT_
67d0: 54 45 4d 50 44 42 20 26 26 20 69 3d 3d 31 20 29  TEMPDB && i==1 )
67e0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20   continue;..    
67f0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
6800: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
6810: 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72  , i);.      addr
6820: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
6830: 64 4f 70 28 76 2c 20 4f 50 5f 49 66 4d 65 6d 50  dOp(v, OP_IfMemP
6840: 6f 73 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  os, 0, 0);.     
6850: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
6860: 70 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c  p(v, OP_Halt, 0,
6870: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
6880: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
6890: 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20  , addr);..      
68a0: 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69  /* Do an integri
68b0: 74 79 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20  ty check of the 
68c0: 42 2d 54 72 65 65 0a 20 20 20 20 20 20 2a 2f 0a  B-Tree.      */.
68d0: 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20 26 64        pTbls = &d
68e0: 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d  b->aDb[i].pSchem
68f0: 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20 20  a->tblHash;.    
6900: 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61    for(x=sqliteHa
6910: 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20  shFirst(pTbls); 
6920: 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e  x; x=sqliteHashN
6930: 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20  ext(x)){.       
6940: 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73   Table *pTab = s
6950: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29  qliteHashData(x)
6960: 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20  ;.        Index 
6970: 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 73  *pIdx;.        s
6980: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
6990: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
69a0: 54 61 62 2d 3e 74 6e 75 6d 2c 20 30 29 3b 0a 20  Tab->tnum, 0);. 
69b0: 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20         cnt++;.  
69c0: 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70        for(pIdx=p
69d0: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
69e0: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
69f0: 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ext){.          
6a00: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
6a10: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
6a20: 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 30 29 3b 0a  pIdx->tnum, 0);.
6a30: 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b            cnt++;
6a40: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
6a50: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 63 6e 74   }.      if( cnt
6a60: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
6a70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6a80: 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 49 6e 74  eAddOp(v, OP_Int
6a90: 65 67 72 69 74 79 43 6b 2c 20 30 2c 20 69 29 3b  egrityCk, 0, i);
6aa0: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
6ab0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76  lite3VdbeAddOp(v
6ac0: 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 2d 31 2c  , OP_IsNull, -1,
6ad0: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
6ae0: 65 33 56 64 62 65 4f 70 33 28 76 2c 20 4f 50 5f  e3VdbeOp3(v, OP_
6af0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 30 2c 0a 20  String8, 0, 0,. 
6b00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d          sqlite3M
6b10: 50 72 69 6e 74 66 28 22 2a 2a 2a 20 69 6e 20 64  Printf("*** in d
6b20: 61 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e  atabase %s ***\n
6b30: 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  ", db->aDb[i].zN
6b40: 61 6d 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50  ame),.         P
6b50: 33 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20  3_DYNAMIC);.    
6b60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
6b70: 4f 70 28 76 2c 20 4f 50 5f 50 75 6c 6c 2c 20 31  Op(v, OP_Pull, 1
6b80: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
6b90: 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20  te3VdbeAddOp(v, 
6ba0: 4f 50 5f 43 6f 6e 63 61 74 2c 20 30 2c 20 30 29  OP_Concat, 0, 0)
6bb0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6bc0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43  dbeAddOp(v, OP_C
6bd0: 61 6c 6c 62 61 63 6b 2c 20 31 2c 20 30 29 3b 0a  allback, 1, 0);.
6be0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6bf0: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
6c00: 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61  r);..      /* Ma
6c10: 6b 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20  ke sure all the 
6c20: 69 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73  indices are cons
6c30: 74 72 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c  tructed correctl
6c40: 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  y..      */.    
6c50: 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61    for(x=sqliteHa
6c60: 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20  shFirst(pTbls); 
6c70: 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e  x; x=sqliteHashN
6c80: 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20  ext(x)){.       
6c90: 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73   Table *pTab = s
6ca0: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29  qliteHashData(x)
6cb0: 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20  ;.        Index 
6cc0: 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69  *pIdx;.        i
6cd0: 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 0a 20 20 20  nt loopTop;..   
6ce0: 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70       if( pTab->p
6cf0: 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69  Index==0 ) conti
6d00: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 61 64 64  nue;.        add
6d10: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
6d20: 64 64 4f 70 28 76 2c 20 4f 50 5f 49 66 4d 65 6d  ddOp(v, OP_IfMem
6d30: 50 6f 73 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  Pos, 0, 0);.    
6d40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
6d50: 64 64 4f 70 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  ddOp(v, OP_Halt,
6d60: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   0, 0);.        
6d70: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
6d80: 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20  ere(v, addr);.  
6d90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
6da0: 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
6db0: 28 70 50 61 72 73 65 2c 20 70 54 61 62 2c 20 31  (pParse, pTab, 1
6dc0: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a  , OP_OpenRead);.
6dd0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
6de0: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 4d  dbeAddOp(v, OP_M
6df0: 65 6d 49 6e 74 2c 20 30 2c 20 31 29 3b 0a 20 20  emInt, 0, 1);.  
6e00: 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20        loopTop = 
6e10: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
6e20: 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 31  (v, OP_Rewind, 1
6e30: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
6e40: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76  lite3VdbeAddOp(v
6e50: 2c 20 4f 50 5f 4d 65 6d 49 6e 63 72 2c 20 31 2c  , OP_MemIncr, 1,
6e60: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72   1);.        for
6e70: 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d  (j=0, pIdx=pTab-
6e80: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
6e90: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
6ea0: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
6eb0: 20 69 6e 74 20 6a 6d 70 32 3b 0a 20 20 20 20 20   int jmp2;.     
6ec0: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
6ed0: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 69 64 78  t VdbeOpList idx
6ee0: 45 72 72 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  Err[] = {.      
6ef0: 20 20 20 20 20 20 7b 20 4f 50 5f 4d 65 6d 49 6e        { OP_MemIn
6f00: 63 72 2c 20 20 20 20 2d 31 2c 20 20 30 2c 20 20  cr,    -1,  0,  
6f10: 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  0},.            
6f20: 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20  { OP_String8,   
6f30: 20 20 30 2c 20 20 30 2c 20 20 22 72 6f 77 69 64    0,  0,  "rowid
6f40: 20 22 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20   "},.           
6f50: 20 7b 20 4f 50 5f 52 6f 77 69 64 2c 20 20 20 20   { OP_Rowid,    
6f60: 20 20 20 31 2c 20 20 30 2c 20 20 30 7d 2c 0a 20     1,  0,  0},. 
6f70: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
6f80: 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20  String8,     0, 
6f90: 20 30 2c 20 20 22 20 6d 69 73 73 69 6e 67 20 66   0,  " missing f
6fa0: 72 6f 6d 20 69 6e 64 65 78 20 22 7d 2c 0a 20 20  rom index "},.  
6fb0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53            { OP_S
6fc0: 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 20  tring8,     0,  
6fd0: 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20  0,  0},    /* 4 
6fe0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  */.            {
6ff0: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20   OP_Concat,     
7000: 20 32 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20   2,  0,  0},.   
7010: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 61           { OP_Ca
7020: 6c 6c 62 61 63 6b 2c 20 20 20 20 31 2c 20 20 30  llback,    1,  0
7030: 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  0},.         
7040: 20 7d 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71   };.          sq
7050: 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
7060: 65 78 4b 65 79 28 76 2c 20 70 49 64 78 2c 20 31  exKey(v, pIdx, 1
7070: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  );.          jmp
7080: 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  2 = sqlite3VdbeA
7090: 64 64 4f 70 28 76 2c 20 4f 50 5f 46 6f 75 6e 64  ddOp(v, OP_Found
70a0: 2c 20 6a 2b 32 2c 20 30 29 3b 0a 20 20 20 20 20  , j+2, 0);.     
70b0: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
70c0: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
70d0: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 69 64  (v, ArraySize(id
70e0: 78 45 72 72 29 2c 20 69 64 78 45 72 72 29 3b 0a  xErr), idxErr);.
70f0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
7100: 33 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c  3VdbeChangeP3(v,
7110: 20 61 64 64 72 2b 34 2c 20 70 49 64 78 2d 3e 7a   addr+4, pIdx->z
7120: 4e 61 6d 65 2c 20 50 33 5f 53 54 41 54 49 43 29  Name, P3_STATIC)
7130: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
7140: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
7150: 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20  v, jmp2);.      
7160: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
7170: 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20  te3VdbeAddOp(v, 
7180: 4f 50 5f 4e 65 78 74 2c 20 31 2c 20 6c 6f 6f 70  OP_Next, 1, loop
7190: 54 6f 70 2b 31 29 3b 0a 20 20 20 20 20 20 20 20  Top+1);.        
71a0: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
71b0: 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 29 3b  ere(v, loopTop);
71c0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
71d0: 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  , pIdx=pTab->pIn
71e0: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
71f0: 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b  pIdx->pNext, j++
7200: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 74 61  ){.          sta
7210: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
7220: 4c 69 73 74 20 63 6e 74 49 64 78 5b 5d 20 3d 20  List cntIdx[] = 
7230: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  {.             {
7240: 20 4f 50 5f 4d 65 6d 49 6e 74 2c 20 20 20 20 20   OP_MemInt,     
7250: 20 20 30 2c 20 20 32 2c 20 20 30 7d 2c 0a 20 20    0,  2,  0},.  
7260: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
7270: 52 65 77 69 6e 64 2c 20 20 20 20 20 20 20 30 2c  Rewind,       0,
7280: 20 20 30 2c 20 20 30 7d 2c 20 20 2f 2a 20 31 20    0,  0},  /* 1 
7290: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
72a0: 7b 20 4f 50 5f 4d 65 6d 49 6e 63 72 2c 20 20 20  { OP_MemIncr,   
72b0: 20 20 20 31 2c 20 20 32 2c 20 20 30 7d 2c 0a 20     1,  2,  0},. 
72c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
72d0: 5f 4e 65 78 74 2c 20 20 20 20 20 20 20 20 20 30  _Next,         0
72e0: 2c 20 20 30 2c 20 20 30 7d 2c 20 20 2f 2a 20 33  ,  0,  0},  /* 3
72f0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
7300: 20 7b 20 4f 50 5f 4d 65 6d 4c 6f 61 64 2c 20 20   { OP_MemLoad,  
7310: 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d 2c 0a      1,  0,  0},.
7320: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f               { O
7330: 50 5f 4d 65 6d 4c 6f 61 64 2c 20 20 20 20 20 20  P_MemLoad,      
7340: 32 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20  2,  0,  0},.    
7350: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 45 71           { OP_Eq
7360: 2c 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 20  ,           0,  
7370: 30 2c 20 20 30 7d 2c 20 20 2f 2a 20 36 20 2a 2f  0,  0},  /* 6 */
7380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  .             { 
7390: 4f 50 5f 4d 65 6d 49 6e 63 72 2c 20 20 20 20 20  OP_MemIncr,     
73a0: 2d 31 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20  -1,  0,  0},.   
73b0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53            { OP_S
73c0: 74 72 69 6e 67 38 2c 20 20 20 20 20 20 30 2c 20  tring8,      0, 
73d0: 20 30 2c 20 20 22 77 72 6f 6e 67 20 23 20 6f 66   0,  "wrong # of
73e0: 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
73f0: 78 20 22 7d 2c 0a 20 20 20 20 20 20 20 20 20 20  x "},.          
7400: 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c     { OP_String8,
7410: 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d        0,  0,  0}
7420: 2c 20 20 2f 2a 20 39 20 2a 2f 0a 20 20 20 20 20  ,  /* 9 */.     
7430: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e          { OP_Con
7440: 63 61 74 2c 20 20 20 20 20 20 20 30 2c 20 20 30  cat,       0,  0
7450: 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  0},.         
7460: 20 20 20 20 7b 20 4f 50 5f 43 61 6c 6c 62 61 63      { OP_Callbac
7470: 6b 2c 20 20 20 20 20 31 2c 20 20 30 2c 20 20 30  k,     1,  0,  0
7480: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 7d 3b 0a  },.          };.
7490: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
74a0: 64 78 2d 3e 74 6e 75 6d 3d 3d 30 20 29 20 63 6f  dx->tnum==0 ) co
74b0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
74c0: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
74d0: 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f  VdbeAddOp(v, OP_
74e0: 49 66 4d 65 6d 50 6f 73 2c 20 30 2c 20 30 29 3b  IfMemPos, 0, 0);
74f0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
7500: 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f  e3VdbeAddOp(v, O
7510: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
7520: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
7530: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
7540: 61 64 64 72 29 3b 0a 20 20 20 20 20 20 20 20 20  addr);.         
7550: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
7560: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
7570: 41 72 72 61 79 53 69 7a 65 28 63 6e 74 49 64 78  ArraySize(cntIdx
7580: 29 2c 20 63 6e 74 49 64 78 29 3b 0a 20 20 20 20  ), cntIdx);.    
7590: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
75a0: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
75b0: 72 2b 31 2c 20 6a 2b 32 29 3b 0a 20 20 20 20 20  r+1, j+2);.     
75c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
75d0: 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72  ChangeP2(v, addr
75e0: 2b 31 2c 20 61 64 64 72 2b 34 29 3b 0a 20 20 20  +1, addr+4);.   
75f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
7600: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
7610: 64 72 2b 33 2c 20 6a 2b 32 29 3b 0a 20 20 20 20  dr+3, j+2);.    
7620: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7630: 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64  eChangeP2(v, add
7640: 72 2b 33 2c 20 61 64 64 72 2b 32 29 3b 0a 20 20  r+3, addr+2);.  
7650: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
7660: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
7670: 64 64 72 2b 36 29 3b 0a 20 20 20 20 20 20 20 20  ddr+6);.        
7680: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
7690: 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2b 39 2c  ngeP3(v, addr+9,
76a0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 33   pIdx->zName, P3
76b0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
76c0: 20 20 7d 0a 20 20 20 20 20 20 7d 20 0a 20 20 20    }.      } .   
76d0: 20 7d 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71   }.    addr = sq
76e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
76f0: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
7700: 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64  endCode), endCod
7710: 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  e);.    sqlite3V
7720: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
7730: 64 64 72 2b 31 2c 20 6d 78 45 72 72 29 3b 0a 20  ddr+1, mxErr);. 
7740: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
7750: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 2b 32  mpHere(v, addr+2
7760: 29 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  );.  }else.#endi
7770: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
7780: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
7790: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
77a0: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
77b0: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
77c0: 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a 20  A encoding.  ** 
77d0: 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
77e0: 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75 74 66  g = "utf-8"|"utf
77f0: 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65 22 7c  -16"|"utf-16le"|
7800: 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a 2a 0a  "utf-16be".  **.
7810: 20 20 2a 2a 20 49 6e 20 69 74 27 73 20 66 69 72    ** In it's fir
7820: 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70 72  st form, this pr
7830: 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68 65  agma returns the
7840: 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65   encoding of the
7850: 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61 62   main.  ** datab
7860: 61 73 65 2e 20 49 66 20 74 68 65 20 64 61 74 61  ase. If the data
7870: 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69 74  base is not init
7880: 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20 69  ialized, it is i
7890: 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a  nitialized now..
78a0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 65    **.  ** The se
78b0: 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 69  cond form of thi
78c0: 73 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e 6f  s pragma is a no
78d0: 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e 20  -op if the main 
78e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20  database file.  
78f0: 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65 61  ** has not alrea
7900: 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  dy been initiali
7910: 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  zed. In this cas
7920: 65 20 69 74 20 73 65 74 73 20 74 68 65 20 64 65  e it sets the de
7930: 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f 64  fault.  ** encod
7940: 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ing that will be
7950: 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61   used for the ma
7960: 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
7970: 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a 20   if a new file. 
7980: 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e 20   ** is created. 
7990: 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6d  If an existing m
79a0: 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
79b0: 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68 65  e is opened, the
79c0: 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75  n the.  ** defau
79d0: 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  lt text encoding
79e0: 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e   for the existin
79f0: 67 20 64 61 74 61 62 61 73 65 20 69 73 20 75 73  g database is us
7a00: 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  ed..  ** .  ** I
7a10: 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77 20  n all cases new 
7a20: 64 61 74 61 62 61 73 65 73 20 63 72 65 61 74 65  databases create
7a30: 64 20 75 73 69 6e 67 20 74 68 65 20 41 54 54 41  d using the ATTA
7a40: 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a 20  CH command are. 
7a50: 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20 75   ** created to u
7a60: 73 65 20 74 68 65 20 73 61 6d 65 20 64 65 66 61  se the same defa
7a70: 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ult text encodin
7a80: 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 61  g as the main da
7a90: 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a 20  tabase. If.  ** 
7aa0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
7ab0: 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 69  e has not been i
7ac0: 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f 6f  nitialized and/o
7ad0: 72 20 63 72 65 61 74 65 64 20 77 68 65 6e 20 41  r created when A
7ae0: 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65 78  TTACH.  ** is ex
7af0: 65 63 75 74 65 64 2c 20 74 68 69 73 20 69 73 20  ecuted, this is 
7b00: 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65 20  done before the 
7b10: 41 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f 6e  ATTACH operation
7b20: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74  ..  **.  ** In t
7b30: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74  he second form t
7b40: 68 69 73 20 70 72 61 67 6d 61 20 73 65 74 73 20  his pragma sets 
7b50: 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  the text encodin
7b60: 67 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e 0a  g to be used in.
7b70: 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61 73    ** new databas
7b80: 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20  e files created 
7b90: 75 73 69 6e 67 20 74 68 69 73 20 64 61 74 61 62  using this datab
7ba0: 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20 69  ase handle. It i
7bb0: 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65 66  s only.  ** usef
7bc0: 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69 6d  ul if invoked im
7bd0: 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
7be0: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
7bf0: 65 20 69 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  e i.  */.  if( s
7c00: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 4c  qlite3StrICmp(zL
7c10: 65 66 74 2c 20 22 65 6e 63 6f 64 69 6e 67 22 29  eft, "encoding")
7c20: 3d 3d 30 20 29 7b 0a 20 20 20 20 73 74 61 74 69  ==0 ){.    stati
7c30: 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45  c const struct E
7c40: 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63  ncName {.      c
7c50: 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20  har *zName;.    
7c60: 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20    u8 enc;.    } 
7c70: 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20  encnames[] = {. 
7c80: 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c 20       { "UTF-8", 
7c90: 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20     SQLITE_UTF8  
7ca0: 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
7cb0: 20 22 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c   "UTF8",     SQL
7cc0: 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20  ITE_UTF8        
7cd0: 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  },.      { "UTF-
7ce0: 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  16le", SQLITE_UT
7cf0: 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20  F16LE     },.   
7d00: 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20     { "UTF16le", 
7d10: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
7d20: 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
7d30: 55 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54  UTF-16be", SQLIT
7d40: 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c  E_UTF16BE     },
7d50: 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62  .      { "UTF16b
7d60: 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31  e",  SQLITE_UTF1
7d70: 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  6BE     },.     
7d80: 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30   { "UTF-16",   0
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7da0: 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55    }, /* SQLITE_U
7db0: 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20  TF16NATIVE */.  
7dc0: 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20      { "UTF16",  
7dd0: 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
7de0: 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54       }, /* SQLIT
7df0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f  E_UTF16NATIVE */
7e00: 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a  .      { 0, 0 }.
7e10: 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74      };.    const
7e20: 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20   struct EncName 
7e30: 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21  *pEnc;.    if( !
7e40: 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20  zRight ){    /* 
7e50: 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  "PRAGMA encoding
7e60: 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73  " */.      if( s
7e70: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
7e80: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
7e90: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
7ea0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
7eb0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
7ec0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
7ed0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
7ee0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
7ef0: 65 6e 63 6f 64 69 6e 67 22 2c 20 50 33 5f 53 54  encoding", P3_ST
7f00: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
7f10: 69 74 65 33 56 64 62 65 41 64 64 4f 70 28 76 2c  ite3VdbeAddOp(v,
7f20: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
7f30: 30 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 45  0);.      for(pE
7f40: 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b  nc=&encnames[0];
7f50: 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45   pEnc->zName; pE
7f60: 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  nc++){.        i
7f70: 66 28 20 70 45 6e 63 2d 3e 65 6e 63 3d 3d 45 4e  f( pEnc->enc==EN
7f80: 43 28 70 50 61 72 73 65 2d 3e 64 62 29 20 29 7b  C(pParse->db) ){
7f90: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
7fa0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 33 28 76  e3VdbeChangeP3(v
7fb0: 2c 20 2d 31 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d  , -1, pEnc->zNam
7fc0: 65 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  e, P3_STATIC);. 
7fd0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
7fe0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
7ff0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
8000: 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50 5f 43  dbeAddOp(v, OP_C
8010: 61 6c 6c 62 61 63 6b 2c 20 31 2c 20 30 29 3b 0a  allback, 1, 0);.
8020: 20 20 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20      }else{      
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8040: 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63    /* "PRAGMA enc
8050: 6f 64 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a  oding = XXX" */.
8060: 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68        /* Only ch
8070: 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f  ange the value o
8080: 66 20 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20  f sqlite.enc if 
8090: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
80a0: 64 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20  dle is not.     
80b0: 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   ** initialized.
80c0: 20 49 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   If the main dat
80d0: 61 62 61 73 65 20 65 78 69 73 74 73 2c 20 74 68  abase exists, th
80e0: 65 20 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63  e new sqlite.enc
80f0: 20 76 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20   value.      ** 
8100: 77 69 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74  will be overwrit
8110: 74 65 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68  ten when the sch
8120: 65 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64  ema is next load
8130: 65 64 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e  ed. If it does n
8140: 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65  ot.      ** alre
8150: 61 64 79 20 65 78 69 73 74 73 2c 20 69 74 20 77  ady exists, it w
8160: 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20 74  ill be created t
8170: 6f 20 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e  o use the new en
8180: 63 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20  coding value..  
8190: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
81a0: 20 0a 20 20 20 20 20 20 20 20 21 28 44 62 48 61   .        !(DbHa
81b0: 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c  sProperty(db, 0,
81c0: 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
81d0: 29 29 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44  )) || .        D
81e0: 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
81f0: 20 30 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20   0, DB_Empty) . 
8200: 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
8210: 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d  for(pEnc=&encnam
8220: 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61  es[0]; pEnc->zNa
8230: 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20  me; pEnc++){.   
8240: 20 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71         if( 0==sq
8250: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69  lite3StrICmp(zRi
8260: 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65  ght, pEnc->zName
8270: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ) ){.           
8280: 20 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29   ENC(pParse->db)
8290: 20 3d 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70   = pEnc->enc ? p
82a0: 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54  Enc->enc : SQLIT
82b0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20  E_UTF16NATIVE;. 
82c0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
82d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
82e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
82f0: 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65  if( !pEnc->zName
8300: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
8310: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
8320: 61 72 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74  arse, "unsupport
8330: 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22  ed encoding: %s"
8340: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  , zRight);.     
8350: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
8360: 20 7d 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69   }.  }else.#endi
8370: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
8380: 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64  _UTF16 */..#ifnd
8390: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
83a0: 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52  CHEMA_VERSION_PR
83b0: 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  AGMAS.  /*.  ** 
83c0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
83d0: 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69  se.]schema_versi
83e0: 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  on.  **   PRAGMA
83f0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65   [database.]sche
8400: 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e  ma_version = <in
8410: 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
8420: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
8430: 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f  ase.]user_versio
8440: 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  n.  **   PRAGMA 
8450: 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72 5f  [database.]user_
8460: 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67  version = <integ
8470: 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  er>.  **.  ** Th
8480: 65 20 70 72 61 67 6d 61 27 73 20 73 63 68 65 6d  e pragma's schem
8490: 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73  a_version and us
84a0: 65 72 5f 76 65 72 73 69 6f 6e 20 61 72 65 20 75  er_version are u
84b0: 73 65 64 20 74 6f 20 73 65 74 20 6f 72 20 67 65  sed to set or ge
84c0: 74 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65  t.  ** the value
84d0: 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2d 76   of the schema-v
84e0: 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d  ersion and user-
84f0: 76 65 72 73 69 6f 6e 2c 20 72 65 73 70 65 63 74  version, respect
8500: 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a  ively. Both.  **
8510: 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
8520: 69 6f 6e 20 61 6e 64 20 74 68 65 20 75 73 65 72  ion and the user
8530: 2d 76 65 72 73 69 6f 6e 20 61 72 65 20 33 32 2d  -version are 32-
8540: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
8550: 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20  ers.  ** stored 
8560: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
8570: 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a  header..  **.  *
8580: 2a 20 54 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f  * The schema-coo
8590: 6b 69 65 20 69 73 20 75 73 75 61 6c 6c 79 20 6f  kie is usually o
85a0: 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65 64 20  nly manipulated 
85b0: 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
85c0: 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73  Lite. It.  ** is
85d0: 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
85e0: 53 51 4c 69 74 65 20 77 68 65 6e 65 76 65 72 20  SQLite whenever 
85f0: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
8600: 65 6d 61 20 69 73 20 6d 6f 64 69 66 69 65 64 20  ema is modified 
8610: 28 62 79 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e  (by.  ** creatin
8620: 67 20 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20  g or dropping a 
8630: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e  table or index).
8640: 20 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   The schema vers
8650: 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 0a 20  ion is used by. 
8660: 20 2a 2a 20 53 51 4c 69 74 65 20 65 61 63 68 20   ** SQLite each 
8670: 74 69 6d 65 20 61 20 71 75 65 72 79 20 69 73 20  time a query is 
8680: 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75  executed to ensu
8690: 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65  re that the inte
86a0: 72 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20  rnal cache.  ** 
86b0: 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 75 73  of the schema us
86c0: 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  ed when compilin
86d0: 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79 20  g the SQL query 
86e0: 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68 65  matches the sche
86f0: 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64  ma of.  ** the d
8700: 61 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20  atabase against 
8710: 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c  which the compil
8720: 65 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75  ed query is actu
8730: 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20  ally executed.. 
8740: 20 2a 2a 20 53 75 62 76 65 72 74 69 6e 67 20 74   ** Subverting t
8750: 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20 62 79  his mechanism by
8760: 20 75 73 69 6e 67 20 22 50 52 41 47 4d 41 20 73   using "PRAGMA s
8770: 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74  chema_version" t
8780: 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68  o modify.  ** th
8790: 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
87a0: 20 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20   is potentially 
87b0: 64 61 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d 61  dangerous and ma
87c0: 79 20 6c 65 61 64 20 74 6f 20 70 72 6f 67 72 61  y lead to progra
87d0: 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65 73 20 6f  m.  ** crashes o
87e0: 72 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  r database corru
87f0: 70 74 69 6f 6e 2e 20 55 73 65 20 77 69 74 68 20  ption. Use with 
8800: 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20  caution!.  **.  
8810: 2a 2a 20 54 68 65 20 75 73 65 72 2d 76 65 72 73  ** The user-vers
8820: 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ion is not used 
8830: 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
8840: 4c 69 74 65 2e 20 49 74 20 6d 61 79 20 62 65 20  Lite. It may be 
8850: 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 61 70 70  used by.  ** app
8860: 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e  lications for an
8870: 79 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a  y purpose..  */.
8880: 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
8890: 49 43 6d 70 28 7a 4c 65 66 74 2c 20 22 73 63 68  ICmp(zLeft, "sch
88a0: 65 6d 61 5f 76 65 72 73 69 6f 6e 22 29 3d 3d 30  ema_version")==0
88b0: 20 7c 7c 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ||.      sqlite
88c0: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
88d0: 22 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 29 3d  "user_version")=
88e0: 3d 30 20 29 7b 0a 0a 20 20 20 20 69 6e 74 20 69  =0 ){..    int i
88f0: 43 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 43 6f 6f  Cookie;   /* Coo
8900: 6b 69 65 20 69 6e 64 65 78 2e 20 30 20 66 6f 72  kie index. 0 for
8910: 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 2c 20   schema-cookie, 
8920: 36 20 66 6f 72 20 75 73 65 72 2d 63 6f 6f 6b 69  6 for user-cooki
8930: 65 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 7a 4c  e. */.    if( zL
8940: 65 66 74 5b 30 5d 3d 3d 27 73 27 20 7c 7c 20 7a  eft[0]=='s' || z
8950: 4c 65 66 74 5b 30 5d 3d 3d 27 53 27 20 29 7b 0a  Left[0]=='S' ){.
8960: 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20        iCookie = 
8970: 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
8980: 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 35 3b      iCookie = 5;
8990: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
89a0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
89b0: 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73 70 65  /* Write the spe
89c0: 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61  cified cookie va
89d0: 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61  lue */.      sta
89e0: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
89f0: 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d  List setCookie[]
8a00: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f   = {.        { O
8a10: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
8a20: 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20    0,  1,  0},   
8a30: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
8a40: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
8a50: 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d        0,  0,  0}
8a60: 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
8a70: 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f       { OP_SetCoo
8a80: 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c  kie,      0,  0,
8a90: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f    0},    /* 2 */
8aa0: 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
8ab0: 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74  int addr = sqlit
8ac0: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
8ad0: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74  v, ArraySize(set
8ae0: 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b  Cookie), setCook
8af0: 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ie);.      sqlit
8b00: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
8b10: 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
8b20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
8b30: 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
8b40: 31 2c 20 61 74 6f 69 28 7a 52 69 67 68 74 29 29  1, atoi(zRight))
8b50: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
8b60: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
8b70: 64 64 72 2b 32 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+2, iDb);.   
8b80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
8b90: 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b 32  angeP2(v, addr+2
8ba0: 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20  , iCookie);.    
8bb0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
8bc0: 52 65 61 64 20 74 68 65 20 73 70 65 63 69 66 69  Read the specifi
8bd0: 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20  ed cookie value 
8be0: 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
8bf0: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
8c00: 20 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20   readCookie[] = 
8c10: 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52  {.        { OP_R
8c20: 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20  eadCookie,      
8c30: 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  0,  0},    /
8c40: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 0 */.        {
8c50: 20 4f 50 5f 43 61 6c 6c 62 61 63 6b 2c 20 20 20   OP_Callback,   
8c60: 20 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d 0a       1,  0,  0}.
8c70: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69        };.      i
8c80: 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65  nt addr = sqlite
8c90: 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
8ca0: 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65 61 64  , ArraySize(read
8cb0: 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f  Cookie), readCoo
8cc0: 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  kie);.      sqli
8cd0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
8ce0: 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20  v, addr, iDb);. 
8cf0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8d00: 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72  ChangeP2(v, addr
8d10: 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20  , iCookie);.    
8d20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8d30: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
8d40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8d50: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
8d60: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a   COLNAME_NAME, z
8d70: 4c 65 66 74 2c 20 50 33 5f 54 52 41 4e 53 49 45  Left, P3_TRANSIE
8d80: 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  NT);.    }.  }el
8d90: 73 65 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  se.#endif /* SQL
8da0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
8db0: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 20  VERSION_PRAGMAS 
8dc0: 2a 2f 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  */..#if defined(
8dd0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
8de0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
8df0: 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20  TEST).  /*.  ** 
8e00: 52 65 70 6f 72 74 20 74 68 65 20 63 75 72 72 65  Report the curre
8e10: 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69 6c 65  nt state of file
8e20: 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64 61   logs for all da
8e30: 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20 69  tabases.  */.  i
8e40: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
8e50: 70 28 7a 4c 65 66 74 2c 20 22 6c 6f 63 6b 5f 73  p(zLeft, "lock_s
8e60: 74 61 74 75 73 22 29 3d 3d 30 20 29 7b 0a 20 20  tatus")==0 ){.  
8e70: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
8e80: 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63  har *const azLoc
8e90: 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  kName[] = {.    
8ea0: 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73    "unlocked", "s
8eb0: 68 61 72 65 64 22 2c 20 22 72 65 73 65 72 76 65  hared", "reserve
8ec0: 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22  d", "pending", "
8ed0: 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d  exclusive".    }
8ee0: 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
8ef0: 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c 69 74   Vdbe *v = sqlit
8f00: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
8f10: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
8f20: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
8f30: 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  2);.    sqlite3V
8f40: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
8f50: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
8f60: 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20 50 33  , "database", P3
8f70: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
8f80: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
8f90: 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
8fa0: 45 5f 4e 41 4d 45 2c 20 22 73 74 61 74 75 73 22  E_NAME, "status"
8fb0: 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P3_STATIC);.  
8fc0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
8fd0: 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
8fe0: 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
8ff0: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
9000: 72 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  r;.      if( db-
9010: 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30  >aDb[i].zName==0
9020: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
9030: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70     sqlite3VdbeOp
9040: 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  3(v, OP_String8,
9050: 20 30 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69   0, 0, db->aDb[i
9060: 5d 2e 7a 4e 61 6d 65 2c 20 50 33 5f 53 54 41 54  ].zName, P3_STAT
9070: 49 43 29 3b 0a 20 20 20 20 20 20 70 42 74 20 3d  IC);.      pBt =
9080: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b   db->aDb[i].pBt;
9090: 0a 20 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d  .      if( pBt==
90a0: 30 20 7c 7c 20 28 70 50 61 67 65 72 20 3d 20 73  0 || (pPager = s
90b0: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
90c0: 28 70 42 74 29 29 3d 3d 30 20 29 7b 0a 20 20 20  (pBt))==0 ){.   
90d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
90e0: 4f 70 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op3(v, OP_String
90f0: 38 2c 20 30 2c 20 30 2c 20 22 63 6c 6f 73 65 64  8, 0, 0, "closed
9100: 22 2c 20 50 33 5f 53 54 41 54 49 43 29 3b 0a 20  ", P3_STATIC);. 
9110: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
9120: 20 20 20 20 69 6e 74 20 6a 20 3d 20 73 71 6c 69      int j = sqli
9130: 74 65 33 50 61 67 65 72 4c 6f 63 6b 73 74 61 74  te3PagerLockstat
9140: 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  e(pPager);.     
9150: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4f 70     sqlite3VdbeOp
9160: 33 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  3(v, OP_String8,
9170: 20 30 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20   0, 0, .        
9180: 20 20 20 20 28 6a 3e 3d 30 20 26 26 20 6a 3c 3d      (j>=0 && j<=
9190: 34 29 20 3f 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b  4) ? azLockName[
91a0: 6a 5d 20 3a 20 22 75 6e 6b 6e 6f 77 6e 22 2c 20  j] : "unknown", 
91b0: 50 33 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P3_STATIC);.    
91c0: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
91d0: 33 56 64 62 65 41 64 64 4f 70 28 76 2c 20 4f 50  3VdbeAddOp(v, OP
91e0: 5f 43 61 6c 6c 62 61 63 6b 2c 20 32 2c 20 30 29  _Callback, 2, 0)
91f0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 0a  ;.    }.  }else.
9200: 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
9210: 51 4c 49 54 45 5f 53 53 45 0a 20 20 2f 2a 0a 20  QLITE_SSE.  /*. 
9220: 20 2a 2a 20 43 68 65 63 6b 20 74 6f 20 73 65 65   ** Check to see
9230: 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 5f 73   if the sqlite_s
9240: 74 61 74 65 6d 65 6e 74 73 20 74 61 62 6c 65 20  tatements table 
9250: 65 78 69 73 74 73 2e 20 20 43 72 65 61 74 65 20  exists.  Create 
9260: 69 74 0a 20 20 2a 2a 20 69 66 20 69 74 20 64 6f  it.  ** if it do
9270: 65 73 20 6e 6f 74 2e 0a 20 20 2a 2f 0a 20 20 69  es not..  */.  i
9280: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
9290: 70 28 7a 4c 65 66 74 2c 20 22 63 72 65 61 74 65  p(zLeft, "create
92a0: 5f 73 71 6c 69 74 65 5f 73 74 61 74 65 6d 65 6e  _sqlite_statemen
92b0: 74 5f 74 61 62 6c 65 22 29 3d 3d 30 20 29 7b 0a  t_table")==0 ){.
92c0: 20 20 20 20 65 78 74 65 72 6e 20 69 6e 74 20 73      extern int s
92d0: 71 6c 69 74 65 33 43 72 65 61 74 65 53 74 61 74  qlite3CreateStat
92e0: 65 6d 65 6e 74 73 54 61 62 6c 65 28 50 61 72 73  ementsTable(Pars
92f0: 65 2a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  e*);.    sqlite3
9300: 43 72 65 61 74 65 53 74 61 74 65 6d 65 6e 74 73  CreateStatements
9310: 54 61 62 6c 65 28 70 50 61 72 73 65 29 3b 0a 20  Table(pParse);. 
9320: 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 0a 23   }else.#endif..#
9330: 69 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  if SQLITE_HAS_CO
9340: 44 45 43 0a 20 20 69 66 28 20 73 71 6c 69 74 65  DEC.  if( sqlite
9350: 33 53 74 72 49 43 6d 70 28 7a 4c 65 66 74 2c 20  3StrICmp(zLeft, 
9360: 22 6b 65 79 22 29 3d 3d 30 20 29 7b 0a 20 20 20  "key")==0 ){.   
9370: 20 73 71 6c 69 74 65 33 5f 6b 65 79 28 64 62 2c   sqlite3_key(db,
9380: 20 7a 52 69 67 68 74 2c 20 73 74 72 6c 65 6e 28   zRight, strlen(
9390: 7a 52 69 67 68 74 29 29 3b 0a 20 20 7d 65 6c 73  zRight));.  }els
93a0: 65 0a 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c  e.#endif.#if SQL
93b0: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 20 7c 7c  ITE_HAS_CODEC ||
93c0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
93d0: 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20  ENABLE_CEROD).  
93e0: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
93f0: 6d 70 28 7a 4c 65 66 74 2c 20 22 61 63 74 69 76  mp(zLeft, "activ
9400: 61 74 65 5f 65 78 74 65 6e 73 69 6f 6e 73 22 29  ate_extensions")
9410: 3d 3d 30 20 29 7b 0a 23 69 66 20 53 51 4c 49 54  ==0 ){.#if SQLIT
9420: 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20  E_HAS_CODEC.    
9430: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49  if( sqlite3StrNI
9440: 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65  Cmp(zRight, "see
9450: 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 4)==0 ){.   
9460: 20 20 20 65 78 74 65 72 6e 20 76 6f 69 64 20 73     extern void s
9470: 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f  qlite3_activate_
9480: 73 65 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  see(const char*)
9490: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
94a0: 61 63 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52  activate_see(&zR
94b0: 69 67 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a  ight[4]);.    }.
94c0: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
94d0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f  LITE_ENABLE_CERO
94e0: 44 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  D.    if( sqlite
94f0: 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
9500: 2c 20 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d  , "cerod-", 6)==
9510: 30 20 29 7b 0a 20 20 20 20 20 20 65 78 74 65 72  0 ){.      exter
9520: 6e 20 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 61  n void sqlite3_a
9530: 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28 63 6f  ctivate_cerod(co
9540: 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 20 20  nst char*);.    
9550: 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61    sqlite3_activa
9560: 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68 74  te_cerod(&zRight
9570: 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  [6]);.    }.#end
9580: 69 66 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  if.  }.#endif.. 
9590: 20 7b 7d 0a 0a 20 20 69 66 28 20 76 20 29 7b 0a   {}..  if( v ){.
95a0: 20 20 20 20 2f 2a 20 43 6f 64 65 20 61 6e 20 4f      /* Code an O
95b0: 50 5f 45 78 70 69 72 65 20 61 74 20 74 68 65 20  P_Expire at the 
95c0: 65 6e 64 20 6f 66 20 65 61 63 68 20 50 52 41 47  end of each PRAG
95d0: 4d 41 20 70 72 6f 67 72 61 6d 20 74 6f 20 63 61  MA program to ca
95e0: 75 73 65 0a 20 20 20 20 2a 2a 20 74 68 65 20 56  use.    ** the V
95f0: 44 42 45 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67  DBE implementing
9600: 20 74 68 65 20 70 72 61 67 6d 61 20 74 6f 20 65   the pragma to e
9610: 78 70 69 72 65 2e 20 4d 6f 73 74 20 28 61 6c 6c  xpire. Most (all
9620: 3f 29 20 70 72 61 67 6d 61 73 0a 20 20 20 20 2a  ?) pragmas.    *
9630: 2a 20 61 72 65 20 6f 6e 6c 79 20 76 61 6c 69 64  * are only valid
9640: 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 65 78   for a single ex
9650: 65 63 75 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a  ecution..    */.
9660: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9670: 64 64 4f 70 28 76 2c 20 4f 50 5f 45 78 70 69 72  ddOp(v, OP_Expir
9680: 65 2c 20 31 2c 20 30 29 3b 0a 0a 20 20 20 20 2f  e, 1, 0);..    /
9690: 2a 0a 20 20 20 20 2a 2a 20 52 65 73 65 74 20 74  *.    ** Reset t
96a0: 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c 2c  he safety level,
96b0: 20 69 6e 20 63 61 73 65 20 74 68 65 20 66 75 6c   in case the ful
96c0: 6c 66 73 79 6e 63 20 66 6c 61 67 20 6f 72 20 73  lfsync flag or s
96d0: 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 20 20 2a  ynchronous.    *
96e0: 2a 20 73 65 74 74 69 6e 67 20 63 68 61 6e 67 65  * setting change
96f0: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65  d..    */.#ifnde
9700: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  f SQLITE_OMIT_PA
9710: 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 20 20  GER_PRAGMAS.    
9720: 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  if( db->autoComm
9730: 69 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  it ){.      sqli
9740: 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65 74  te3BtreeSetSafet
9750: 79 4c 65 76 65 6c 28 70 44 62 2d 3e 70 42 74 2c  yLevel(pDb->pBt,
9760: 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76   pDb->safety_lev
9770: 65 6c 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  el,.            
9780: 20 20 20 20 20 28 64 62 2d 3e 66 6c 61 67 73 26       (db->flags&
9790: 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63  SQLITE_FullFSync
97a0: 29 21 3d 30 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  )!=0);.    }.#en
97b0: 64 69 66 0a 20 20 7d 0a 70 72 61 67 6d 61 5f 6f  dif.  }.pragma_o
97c0: 75 74 3a 0a 20 20 73 71 6c 69 74 65 46 72 65 65  ut:.  sqliteFree
97d0: 28 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69 74  (zLeft);.  sqlit
97e0: 65 46 72 65 65 28 7a 52 69 67 68 74 29 3b 0a 7d  eFree(zRight);.}
97f0: 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
9800: 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 7c  TE_OMIT_PRAGMA |
9810: 7c 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  | SQLITE_OMIT_PA
9820: 52 53 45 52 20 2a 2f 0a                          RSER */.