/ Hex Artifact Content
Login

Artifact 1c00ed0dea8bc119d248e26e648d438e16e92010:


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 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20  e next block of 
02e0: 63 6f 64 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20  code, including 
02f0: 74 68 65 20 50 72 61 67 54 79 70 5f 58 58 58 58  the PragTyp_XXXX
0300: 20 6d 61 63 72 6f 20 64 65 66 69 6e 69 74 69 6f   macro definitio
0310: 6e 73 20 61 6e 64 0a 2a 2a 20 74 68 65 20 61 50  ns and.** the aP
0320: 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 6f 62 6a 65  ragmaName[] obje
0330: 63 74 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f  ct is composed o
0340: 66 20 67 65 6e 65 72 61 74 65 64 20 63 6f 64 65  f generated code
0350: 2e 20 44 4f 20 4e 4f 54 20 45 44 49 54 2e 0a 2a  . DO NOT EDIT..*
0360: 2a 0a 2a 2a 20 54 6f 20 61 64 64 20 6e 65 77 20  *.** To add new 
0370: 70 72 61 67 6d 61 73 2c 20 65 64 69 74 20 74 68  pragmas, edit th
0380: 65 20 63 6f 64 65 20 69 6e 20 2e 2e 2f 74 6f 6f  e code in ../too
0390: 6c 2f 6d 6b 70 72 61 67 6d 61 74 61 62 2e 74 63  l/mkpragmatab.tc
03a0: 6c 20 61 6e 64 20 72 65 72 75 6e 0a 2a 2a 20 74  l and rerun.** t
03b0: 68 61 74 20 73 63 72 69 70 74 2e 20 20 54 68 65  hat script.  The
03c0: 6e 20 63 6f 70 79 2f 70 61 73 74 65 20 74 68 65  n copy/paste the
03d0: 20 6f 75 74 70 75 74 20 69 6e 20 70 6c 61 63 65   output in place
03e0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
03f0: 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 72  g:.*/.#define Pr
0400: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
0410: 55 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UE              
0420: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50       0.#define P
0430: 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55  ragTyp_AUTO_VACU
0440: 55 4d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UM              
0450: 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20        1.#define 
0460: 50 72 61 67 54 79 70 5f 46 4c 41 47 20 20 20 20  PragTyp_FLAG    
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0480: 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65         2.#define
0490: 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49   PragTyp_BUSY_TI
04a0: 4d 45 4f 55 54 20 20 20 20 20 20 20 20 20 20 20  MEOUT           
04b0: 20 20 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e          3.#defin
04c0: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
04d0: 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 20  SIZE            
04e0: 20 20 20 20 20 20 20 20 20 34 0a 23 64 65 66 69           4.#defi
04f0: 6e 65 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f  ne PragTyp_CASE_
0500: 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 20 20  SENSITIVE_LIKE  
0510: 20 20 20 20 20 20 20 20 20 20 35 0a 23 64 65 66            5.#def
0520: 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c  ine PragTyp_COLL
0530: 41 54 49 4f 4e 5f 4c 49 53 54 20 20 20 20 20 20  ATION_LIST      
0540: 20 20 20 20 20 20 20 20 20 20 20 36 0a 23 64 65             6.#de
0550: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4d  fine PragTyp_COM
0560: 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 20 20 20 20  PILE_OPTIONS    
0570: 20 20 20 20 20 20 20 20 20 20 20 20 37 0a 23 64              7.#d
0580: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44 41  efine PragTyp_DA
0590: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
05a0: 52 59 20 20 20 20 20 20 20 20 20 20 20 38 0a 23  RY           8.#
05b0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44  define PragTyp_D
05c0: 41 54 41 42 41 53 45 5f 4c 49 53 54 20 20 20 20  ATABASE_LIST    
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 39 0a                9.
05e0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
05f0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
0600: 5a 45 20 20 20 20 20 20 20 20 20 20 20 20 31 30  ZE            10
0610: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0620: 5f 45 4e 43 4f 44 49 4e 47 20 20 20 20 20 20 20  _ENCODING       
0630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
0640: 31 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  1.#define PragTy
0650: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48  p_FOREIGN_KEY_CH
0660: 45 43 4b 20 20 20 20 20 20 20 20 20 20 20 20 20  ECK             
0670: 31 32 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  12.#define PragT
0680: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c  yp_FOREIGN_KEY_L
0690: 49 53 54 20 20 20 20 20 20 20 20 20 20 20 20 20  IST             
06a0: 20 31 33 0a 23 64 65 66 69 6e 65 20 50 72 61 67   13.#define Prag
06b0: 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f  Typ_INCREMENTAL_
06c0: 56 41 43 55 55 4d 20 20 20 20 20 20 20 20 20 20  VACUUM          
06d0: 20 20 31 34 0a 23 64 65 66 69 6e 65 20 50 72 61    14.#define Pra
06e0: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 20  gTyp_INDEX_INFO 
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0700: 20 20 20 31 35 0a 23 64 65 66 69 6e 65 20 50 72     15.#define Pr
0710: 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54  agTyp_INDEX_LIST
0720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0730: 20 20 20 20 31 36 0a 23 64 65 66 69 6e 65 20 50      16.#define P
0740: 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59  ragTyp_INTEGRITY
0750: 5f 43 48 45 43 4b 20 20 20 20 20 20 20 20 20 20  _CHECK          
0760: 20 20 20 20 20 31 37 0a 23 64 65 66 69 6e 65 20       17.#define 
0770: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
0780: 4d 4f 44 45 20 20 20 20 20 20 20 20 20 20 20 20  MODE            
0790: 20 20 20 20 20 20 31 38 0a 23 64 65 66 69 6e 65        18.#define
07a0: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
07b0: 5f 53 49 5a 45 5f 4c 49 4d 49 54 20 20 20 20 20  _SIZE_LIMIT     
07c0: 20 20 20 20 20 20 20 31 39 0a 23 64 65 66 69 6e         19.#defin
07d0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
07e0: 52 4f 58 59 5f 46 49 4c 45 20 20 20 20 20 20 20  ROXY_FILE       
07f0: 20 20 20 20 20 20 20 20 32 30 0a 23 64 65 66 69          20.#defi
0800: 6e 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49  ne PragTyp_LOCKI
0810: 4e 47 5f 4d 4f 44 45 20 20 20 20 20 20 20 20 20  NG_MODE         
0820: 20 20 20 20 20 20 20 20 20 32 31 0a 23 64 65 66           21.#def
0830: 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41 47 45  ine PragTyp_PAGE
0840: 5f 43 4f 55 4e 54 20 20 20 20 20 20 20 20 20 20  _COUNT          
0850: 20 20 20 20 20 20 20 20 20 20 32 32 0a 23 64 65            22.#de
0860: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4d 4d 41  fine PragTyp_MMA
0870: 50 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  P_SIZE          
0880: 20 20 20 20 20 20 20 20 20 20 20 32 33 0a 23 64             23.#d
0890: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41  efine PragTyp_PA
08a0: 47 45 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20  GE_SIZE         
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 32 34 0a 23              24.#
08c0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 53  define PragTyp_S
08d0: 45 43 55 52 45 5f 44 45 4c 45 54 45 20 20 20 20  ECURE_DELETE    
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 0a               25.
08f0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
0900: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 20 20 20  SHRINK_MEMORY   
0910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 36                26
0920: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0930: 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54  _SOFT_HEAP_LIMIT
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
0950: 37 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  7.#define PragTy
0960: 70 5f 53 54 41 54 53 20 20 20 20 20 20 20 20 20  p_STATS         
0970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0980: 32 38 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  28.#define PragT
0990: 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20  yp_SYNCHRONOUS  
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 32 39 0a 23 64 65 66 69 6e 65 20 50 72 61 67   29.#define Prag
09c0: 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 20 20  Typ_TABLE_INFO  
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 20 20 33 30 0a 23 64 65 66 69 6e 65 20 50 72 61    30.#define Pra
09f0: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 20  gTyp_TEMP_STORE 
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 20 20 20 33 31 0a 23 64 65 66 69 6e 65 20 50 72     31.#define Pr
0a20: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
0a30: 5f 44 49 52 45 43 54 4f 52 59 20 20 20 20 20 20  _DIRECTORY      
0a40: 20 20 20 20 33 32 0a 23 64 65 66 69 6e 65 20 50      32.#define P
0a50: 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43  ragTyp_WAL_AUTOC
0a60: 48 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20  HECKPOINT       
0a70: 20 20 20 20 20 33 33 0a 23 64 65 66 69 6e 65 20       33.#define 
0a80: 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43  PragTyp_WAL_CHEC
0a90: 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20 20 20  KPOINT          
0aa0: 20 20 20 20 20 20 33 34 0a 23 64 65 66 69 6e 65        34.#define
0ab0: 20 50 72 61 67 54 79 70 5f 41 43 54 49 56 41 54   PragTyp_ACTIVAT
0ac0: 45 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20 20 20  E_EXTENSIONS    
0ad0: 20 20 20 20 20 20 20 33 35 0a 23 64 65 66 69 6e         35.#defin
0ae0: 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45 59  e PragTyp_HEXKEY
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b00: 20 20 20 20 20 20 20 20 33 36 0a 23 64 65 66 69          36.#defi
0b10: 6e 65 20 50 72 61 67 54 79 70 5f 4b 45 59 20 20  ne PragTyp_KEY  
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b30: 20 20 20 20 20 20 20 20 20 33 37 0a 23 64 65 66           37.#def
0b40: 69 6e 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45  ine PragTyp_REKE
0b50: 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Y               
0b60: 20 20 20 20 20 20 20 20 20 20 33 38 0a 23 64 65            38.#de
0b70: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4c 4f 43  fine PragTyp_LOC
0b80: 4b 5f 53 54 41 54 55 53 20 20 20 20 20 20 20 20  K_STATUS        
0b90: 20 20 20 20 20 20 20 20 20 20 20 33 39 0a 23 64             39.#d
0ba0: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41  efine PragTyp_PA
0bb0: 52 53 45 52 5f 54 52 41 43 45 20 20 20 20 20 20  RSER_TRACE      
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 34 30 0a 23              40.#
0bd0: 64 65 66 69 6e 65 20 50 72 61 67 46 6c 61 67 5f  define PragFlag_
0be0: 4e 65 65 64 53 63 68 65 6d 61 20 20 20 20 20 20  NeedSchema      
0bf0: 20 20 20 20 20 30 78 30 31 0a 73 74 61 74 69 63       0x01.static
0c00: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50   const struct sP
0c10: 72 61 67 6d 61 4e 61 6d 65 73 20 7b 0a 20 20 63  ragmaNames {.  c
0c20: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
0c30: 20 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65   zName;  /* Name
0c40: 20 6f 66 20 70 72 61 67 6d 61 20 2a 2f 0a 20 20   of pragma */.  
0c50: 75 38 20 65 50 72 61 67 54 79 70 3b 20 20 20 20  u8 ePragTyp;    
0c60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 61            /* Pra
0c70: 67 54 79 70 5f 58 58 58 20 76 61 6c 75 65 20 2a  gTyp_XXX value *
0c80: 2f 0a 20 20 75 38 20 6d 50 72 61 67 46 6c 61 67  /.  u8 mPragFlag
0c90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
0ca0: 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 50 72   Zero or more Pr
0cb0: 61 67 46 6c 61 67 5f 58 58 58 20 76 61 6c 75 65  agFlag_XXX value
0cc0: 73 20 2a 2f 0a 20 20 75 33 32 20 69 41 72 67 3b  s */.  u32 iArg;
0cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ce0: 20 2f 2a 20 45 78 74 72 61 20 61 72 67 75 6d 65   /* Extra argume
0cf0: 6e 74 20 2a 2f 0a 7d 20 61 50 72 61 67 6d 61 4e  nt */.} aPragmaN
0d00: 61 6d 65 73 5b 5d 20 3d 20 7b 0a 23 69 66 20 64  ames[] = {.#if d
0d10: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
0d20: 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69  S_CODEC) || defi
0d30: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
0d40: 45 5f 43 45 52 4f 44 29 0a 20 20 7b 20 2f 2a 20  E_CEROD).  { /* 
0d50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 61  zName:     */ "a
0d60: 63 74 69 76 61 74 65 5f 65 78 74 65 6e 73 69 6f  ctivate_extensio
0d70: 6e 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ns",.    /* ePra
0d80: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0d90: 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e  p_ACTIVATE_EXTEN
0da0: 53 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20 65 50  SIONS,.    /* eP
0db0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
0dc0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
0dd0: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
0de0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
0df0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
0e00: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29  VERSION_PRAGMAS)
0e10: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
0e20: 20 20 20 2a 2f 20 22 61 70 70 6c 69 63 61 74 69     */ "applicati
0e30: 6f 6e 5f 69 64 22 2c 0a 20 20 20 20 2f 2a 20 65  on_id",.    /* e
0e40: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
0e50: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
0e60: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
0e70: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
0e80: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
0e90: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
0ea0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0eb0: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
0ec0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
0ed0: 20 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63 75     */ "auto_vacu
0ee0: 75 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  um",.    /* ePra
0ef0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0f00: 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a 20  p_AUTO_VACUUM,. 
0f10: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
0f20: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
0f30: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
0f40: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
0f50: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
0f60: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0f70: 49 54 5f 41 55 54 4f 4d 41 54 49 43 5f 49 4e 44  IT_AUTOMATIC_IND
0f80: 45 58 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  EX).  { /* zName
0f90: 3a 20 20 20 20 20 2a 2f 20 22 61 75 74 6f 6d 61  :     */ "automa
0fa0: 74 69 63 5f 69 6e 64 65 78 22 2c 0a 20 20 20 20  tic_index",.    
0fb0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
0fc0: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
0fd0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
0fe0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
0ff0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
1000: 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 7d 2c 0a  TE_AutoIndex },.
1010: 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e  #endif.  { /* zN
1020: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73  ame:     */ "bus
1030: 79 5f 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20  y_timeout",.    
1040: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
1050: 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49   PragTyp_BUSY_TI
1060: 4d 45 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50  MEOUT,.    /* eP
1070: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
1080: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1090: 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65   */ 0 },.#if !de
10a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
10b0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
10c0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
10d0: 20 20 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a     */ "cache_siz
10e0: 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  e",.    /* ePrag
10f0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1100: 5f 43 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20  _CACHE_SIZE,.   
1110: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1120: 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53  / PragFlag_NeedS
1130: 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41  chema,.    /* iA
1140: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
1150: 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a  .#endif.  { /* z
1160: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 61  Name:     */ "ca
1170: 63 68 65 5f 73 70 69 6c 6c 22 2c 0a 20 20 20 20  che_spill",.    
1180: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
1190: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
11a0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
11b0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
11c0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
11d0: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 7d 2c  TE_CacheSpill },
11e0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
11f0: 20 20 20 2a 2f 20 22 63 61 73 65 5f 73 65 6e 73     */ "case_sens
1200: 69 74 69 76 65 5f 6c 69 6b 65 22 2c 0a 20 20 20  itive_like",.   
1210: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1220: 2f 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f 53  / PragTyp_CASE_S
1230: 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 2c 0a 20  ENSITIVE_LIKE,. 
1240: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1250: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
1260: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
1270: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1280: 20 20 20 2a 2f 20 22 63 68 65 63 6b 70 6f 69 6e     */ "checkpoin
1290: 74 5f 66 75 6c 6c 66 73 79 6e 63 22 2c 0a 20 20  t_fullfsync",.  
12a0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
12b0: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
12c0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
12d0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
12e0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
12f0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
1300: 6e 63 20 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e  nc },.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ed(SQLITE_OMIT_S
1320: 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20  CHEMA_PRAGMAS). 
1330: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1340: 20 2a 2f 20 22 63 6f 6c 6c 61 74 69 6f 6e 5f 6c   */ "collation_l
1350: 69 73 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ist",.    /* ePr
1360: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1370: 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53  yp_COLLATION_LIS
1380: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
1390: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
13a0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
13b0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
13c0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
13d0: 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
13e0: 4f 4e 5f 44 49 41 47 53 29 0a 20 20 7b 20 2f 2a  ON_DIAGS).  { /*
13f0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1400: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22  compile_options"
1410: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1420: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43  p:  */ PragTyp_C
1430: 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 2c 0a  OMPILE_OPTIONS,.
1440: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1450: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
1460: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
1470: 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20  ,.#endif.  { /* 
1480: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
1490: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a 20  ount_changes",. 
14a0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
14b0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
14c0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
14d0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
14e0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
14f0: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
1500: 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  },.#if !defined(
1510: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
1520: 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 53 51  R_PRAGMAS) && SQ
1530: 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 7b 20  LITE_OS_WIN.  { 
1540: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1550: 20 22 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72   "data_store_dir
1560: 65 63 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20  ectory",.    /* 
1570: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1580: 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45  agTyp_DATA_STORE
1590: 5f 44 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20  _DIRECTORY,.    
15a0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
15b0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
15c0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
15d0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
15e0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  d(SQLITE_OMIT_SC
15f0: 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20  HEMA_PRAGMAS).  
1600: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1610: 2a 2f 20 22 64 61 74 61 62 61 73 65 5f 6c 69 73  */ "database_lis
1620: 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  t",.    /* ePrag
1630: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1640: 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54 2c 0a  _DATABASE_LIST,.
1650: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1660: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
1670: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
1680: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
1690: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
16a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
16b0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
16c0: 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  S) && !defined(S
16d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
16e0: 43 41 54 45 44 29 0a 20 20 7b 20 2f 2a 20 7a 4e  CATED).  { /* zN
16f0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 65 66  ame:     */ "def
1700: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 22  ault_cache_size"
1710: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1720: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44  p:  */ PragTyp_D
1730: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
1740: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
1750: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
1760: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
1770: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1780: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
1790: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
17a0: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
17b0: 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
17c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
17d0: 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  GER).  { /* zNam
17e0: 65 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65 72  e:     */ "defer
17f0: 5f 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a  _foreign_keys",.
1800: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1810: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1820: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1830: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1840: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1850: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
1860: 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a  },.#endif.  { /*
1870: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1880: 65 6d 70 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c  empty_result_cal
1890: 6c 62 61 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20  lbacks",.    /* 
18a0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
18b0: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
18c0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
18d0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
18e0: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
18f0: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a  NullCallback },.
1900: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1910: 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a  ITE_OMIT_UTF16).
1920: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1930: 20 20 2a 2f 20 22 65 6e 63 6f 64 69 6e 67 22 2c    */ "encoding",
1940: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1950: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 45 4e  :  */ PragTyp_EN
1960: 43 4f 44 49 4e 47 2c 0a 20 20 20 20 2f 2a 20 65  CODING,.    /* e
1970: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
1980: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
1990: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
19a0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
19b0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
19c0: 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
19d0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
19e0: 52 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a  RIGGER).  { /* z
19f0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f  Name:     */ "fo
1a00: 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 22  reign_key_check"
1a10: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1a20: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
1a30: 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b  OREIGN_KEY_CHECK
1a40: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1a50: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
1a60: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
1a70: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1a80: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1a90: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1aa0: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
1ab0: 59 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  Y).  { /* zName:
1ac0: 20 20 20 20 20 2a 2f 20 22 66 6f 72 65 69 67 6e       */ "foreign
1ad0: 5f 6b 65 79 5f 6c 69 73 74 22 2c 0a 20 20 20 20  _key_list",.    
1ae0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
1af0: 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e   PragTyp_FOREIGN
1b00: 5f 4b 45 59 5f 4c 49 53 54 2c 0a 20 20 20 20 2f  _KEY_LIST,.    /
1b10: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1b20: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1b30: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1b40: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1b50: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1b60: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
1b70: 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
1b80: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1b90: 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 7b  MIT_TRIGGER).  {
1ba0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1bb0: 2f 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22  / "foreign_keys"
1bc0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1bd0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
1be0: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
1bf0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
1c00: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1c10: 2f 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e  / SQLITE_Foreign
1c20: 4b 65 79 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  Keys },.#endif.#
1c30: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1c40: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
1c50: 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a  ERSION_PRAGMAS).
1c60: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1c70: 20 20 2a 2f 20 22 66 72 65 65 6c 69 73 74 5f 63    */ "freelist_c
1c80: 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ount",.    /* eP
1c90: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1ca0: 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45  Typ_HEADER_VALUE
1cb0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1cc0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1cd0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
1ce0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f   },.#endif.  { /
1cf0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
1d00: 22 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  "full_column_nam
1d10: 65 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  es",.    /* ePra
1d20: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1d30: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
1d40: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
1d50: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
1d60: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46 75 6c 6c    */ SQLITE_Full
1d70: 43 6f 6c 4e 61 6d 65 73 20 7d 2c 0a 20 20 7b 20  ColNames },.  { 
1d80: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1d90: 20 22 66 75 6c 6c 66 73 79 6e 63 22 2c 0a 20 20   "fullfsync",.  
1da0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1db0: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
1dc0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1dd0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
1de0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
1df0: 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 7d  LITE_FullFSync }
1e00: 2c 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ,.#if defined(SQ
1e10: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a  LITE_HAS_CODEC).
1e20: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1e30: 20 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a 20    */ "hexkey",. 
1e40: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1e50: 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 58 4b   */ PragTyp_HEXK
1e60: 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  EY,.    /* ePrag
1e70: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1e80: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1e90: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
1ea0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 68 65 78 72  me:     */ "hexr
1eb0: 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ekey",.    /* eP
1ec0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1ed0: 54 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20 20  Typ_HEXKEY,.    
1ee0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1ef0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1f00: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
1f10: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1f20: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48  d(SQLITE_OMIT_CH
1f30: 45 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ECK).  { /* zNam
1f40: 65 3a 20 20 20 20 20 2a 2f 20 22 69 67 6e 6f 72  e:     */ "ignor
1f50: 65 5f 63 68 65 63 6b 5f 63 6f 6e 73 74 72 61 69  e_check_constrai
1f60: 6e 74 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  nts",.    /* ePr
1f70: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1f80: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
1f90: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
1fa0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
1fb0: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 49 67 6e     */ SQLITE_Ign
1fc0: 6f 72 65 43 68 65 63 6b 73 20 7d 2c 0a 23 65 6e  oreChecks },.#en
1fd0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1fe0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54  (SQLITE_OMIT_AUT
1ff0: 4f 56 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20  OVACUUM).  { /* 
2000: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
2010: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
2020: 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  m",.    /* ePrag
2030: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2040: 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43  _INCREMENTAL_VAC
2050: 55 55 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  UUM,.    /* ePra
2060: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2070: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2080: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2090: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
20a0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
20b0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
20c0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
20d0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
20e0: 6e 64 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20  ndex_info",.    
20f0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2100: 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49   PragTyp_INDEX_I
2110: 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  NFO,.    /* ePra
2120: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2130: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2140: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2150: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2160: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
2170: 6e 64 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20  ndex_list",.    
2180: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2190: 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c   PragTyp_INDEX_L
21a0: 49 53 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  IST,.    /* ePra
21b0: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
21c0: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
21d0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
21e0: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
21f0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2200: 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2210: 54 59 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a  TY_CHECK).  { /*
2220: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2230: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
2240: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2250: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
2260: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a  NTEGRITY_CHECK,.
2270: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2280: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
2290: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
22a0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
22b0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
22c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
22d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
22e0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
22f0: 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c       */ "journal
2300: 5f 6d 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65  _mode",.    /* e
2310: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2320: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44  gTyp_JOURNAL_MOD
2330: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
2340: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2350: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2360: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2370: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2380: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75  ame:     */ "jou
2390: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22  rnal_size_limit"
23a0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
23b0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a  p:  */ PragTyp_J
23c0: 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49  OURNAL_SIZE_LIMI
23d0: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
23e0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
23f0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2400: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2410: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
2420: 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a  AS_CODEC).  { /*
2430: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2440: 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  key",.    /* ePr
2450: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
2460: 79 70 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65  yp_KEY,.    /* e
2470: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
2480: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2490: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
24a0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
24b0: 20 20 20 2a 2f 20 22 6c 65 67 61 63 79 5f 66 69     */ "legacy_fi
24c0: 6c 65 5f 66 6f 72 6d 61 74 22 2c 0a 20 20 20 20  le_format",.    
24d0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
24e0: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
24f0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2500: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2510: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
2520: 54 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74  TE_LegacyFileFmt
2530: 20 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e 65 64   },.#if !defined
2540: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
2550: 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 53  ER_PRAGMAS) && S
2560: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
2570: 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20 7b 20 2f  KING_STYLE.  { /
2580: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2590: 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65  "lock_proxy_file
25a0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
25b0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
25c0: 4c 4f 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 2c  LOCK_PROXY_FILE,
25d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
25e0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
25f0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2600: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  },.#endif.#if de
2610: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
2620: 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
2630: 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 7b 20  QLITE_TEST).  { 
2640: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2650: 20 22 6c 6f 63 6b 5f 73 74 61 74 75 73 22 2c 0a   "lock_status",.
2660: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2670: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43    */ PragTyp_LOC
2680: 4b 5f 53 54 41 54 55 53 2c 0a 20 20 20 20 2f 2a  K_STATUS,.    /*
2690: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
26a0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
26b0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
26c0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
26d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
26e0: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  R_PRAGMAS).  { /
26f0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2700: 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a  "locking_mode",.
2710: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2720: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43    */ PragTyp_LOC
2730: 4b 49 4e 47 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f  KING_MODE,.    /
2740: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
2750: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
2760: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b       */ 0 },.  {
2770: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2780: 2f 20 22 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e  / "max_page_coun
2790: 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  t",.    /* ePrag
27a0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
27b0: 5f 50 41 47 45 5f 43 4f 55 4e 54 2c 0a 20 20 20  _PAGE_COUNT,.   
27c0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
27d0: 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53  / PragFlag_NeedS
27e0: 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41  chema,.    /* iA
27f0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
2800: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2810: 20 20 20 2a 2f 20 22 6d 6d 61 70 5f 73 69 7a 65     */ "mmap_size
2820: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2830: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2840: 4d 4d 41 50 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  MMAP_SIZE,.    /
2850: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
2860: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
2870: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b       */ 0 },.  {
2880: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2890: 2f 20 22 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a  / "page_count",.
28a0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
28b0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47    */ PragTyp_PAG
28c0: 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20  E_COUNT,.    /* 
28d0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
28e0: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
28f0: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
2900: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b       */ 0 },.  {
2910: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2920: 2f 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 0a 20  / "page_size",. 
2930: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2940: 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47 45   */ PragTyp_PAGE
2950: 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _SIZE,.    /* eP
2960: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2970: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2980: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
2990: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
29a0: 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a  TE_DEBUG).  { /*
29b0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
29c0: 70 61 72 73 65 72 5f 74 72 61 63 65 22 2c 0a 20  parser_trace",. 
29d0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
29e0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 52 53   */ PragTyp_PARS
29f0: 45 52 5f 54 52 41 43 45 2c 0a 20 20 20 20 2f 2a  ER_TRACE,.    /*
2a00: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
2a10: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
2a20: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
2a30: 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  if.  { /* zName:
2a40: 20 20 20 20 20 2a 2f 20 22 71 75 65 72 79 5f 6f       */ "query_o
2a50: 6e 6c 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  nly",.    /* ePr
2a60: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
2a70: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
2a80: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
2a90: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2aa0: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 51 75 65     */ SQLITE_Que
2ab0: 72 79 4f 6e 6c 79 20 7d 2c 0a 23 69 66 20 21 64  ryOnly },.#if !d
2ac0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2ad0: 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
2ae0: 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  CK).  { /* zName
2af0: 3a 20 20 20 20 20 2a 2f 20 22 71 75 69 63 6b 5f  :     */ "quick_
2b00: 63 68 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65  check",.    /* e
2b10: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2b20: 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43  gTyp_INTEGRITY_C
2b30: 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50 72  HECK,.    /* ePr
2b40: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
2b50: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
2b60: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2b70: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
2b80: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2b90: 20 20 20 2a 2f 20 22 72 65 61 64 5f 75 6e 63 6f     */ "read_unco
2ba0: 6d 6d 69 74 74 65 64 22 2c 0a 20 20 20 20 2f 2a  mmitted",.    /*
2bb0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2bc0: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
2bd0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2be0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
2bf0: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
2c00: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64  _ReadUncommitted
2c10: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
2c20: 3a 20 20 20 20 20 2a 2f 20 22 72 65 63 75 72 73  :     */ "recurs
2c30: 69 76 65 5f 74 72 69 67 67 65 72 73 22 2c 0a 20  ive_triggers",. 
2c40: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2c50: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2c60: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2c70: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
2c80: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
2c90: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
2ca0: 73 20 7d 2c 0a 23 69 66 20 64 65 66 69 6e 65 64  s },.#if defined
2cb0: 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45  (SQLITE_HAS_CODE
2cc0: 43 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  C).  { /* zName:
2cd0: 20 20 20 20 20 2a 2f 20 22 72 65 6b 65 79 22 2c       */ "rekey",
2ce0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2cf0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 52 45  :  */ PragTyp_RE
2d00: 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  KEY,.    /* ePra
2d10: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
2d20: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2d30: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20  / 0 },.#endif.  
2d40: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2d50: 2a 2f 20 22 72 65 76 65 72 73 65 5f 75 6e 6f 72  */ "reverse_unor
2d60: 64 65 72 65 64 5f 73 65 6c 65 63 74 73 22 2c 0a  dered_selects",.
2d70: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2d80: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
2d90: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
2da0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2db0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2dc0: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
2dd0: 64 65 72 20 7d 2c 0a 23 69 66 20 21 64 65 66 69  der },.#if !defi
2de0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2df0: 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50  SCHEMA_VERSION_P
2e00: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
2e10: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 63  Name:     */ "sc
2e20: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 0a 20  hema_version",. 
2e30: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2e40: 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 41 44   */ PragTyp_HEAD
2e50: 45 52 5f 56 41 4c 55 45 2c 0a 20 20 20 20 2f 2a  ER_VALUE,.    /*
2e60: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
2e70: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
2e80: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
2e90: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
2ea0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
2eb0: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  R_PRAGMAS).  { /
2ec0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2ed0: 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22 2c  "secure_delete",
2ee0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2ef0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 45  :  */ PragTyp_SE
2f00: 43 55 52 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20  CURE_DELETE,.   
2f10: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2f20: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
2f30: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
2f40: 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61  endif.  { /* zNa
2f50: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 68 6f 72  me:     */ "shor
2f60: 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c  t_column_names",
2f70: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2f80: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
2f90: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
2fa0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2fb0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2fc0: 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c   SQLITE_ShortCol
2fd0: 4e 61 6d 65 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20  Names },.  { /* 
2fe0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73  zName:     */ "s
2ff0: 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 22 2c 0a 20  hrink_memory",. 
3000: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3010: 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 48 52 49   */ PragTyp_SHRI
3020: 4e 4b 5f 4d 45 4d 4f 52 59 2c 0a 20 20 20 20 2f  NK_MEMORY,.    /
3030: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
3040: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
3050: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b       */ 0 },.  {
3060: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3070: 2f 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  / "soft_heap_lim
3080: 69 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  it",.    /* ePra
3090: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
30a0: 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49  p_SOFT_HEAP_LIMI
30b0: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
30c0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
30d0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
30e0: 30 20 7d 2c 0a 23 69 66 20 64 65 66 69 6e 65 64  0 },.#if defined
30f0: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20  (SQLITE_DEBUG). 
3100: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
3110: 20 2a 2f 20 22 73 71 6c 5f 74 72 61 63 65 22 2c   */ "sql_trace",
3120: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3130: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
3140: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
3150: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3160: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3170: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
3180: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
3190: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
31a0: 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d  MIT_SCHEMA_PRAGM
31b0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
31c0: 3a 20 20 20 20 20 2a 2f 20 22 73 74 61 74 73 22  :     */ "stats"
31d0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
31e0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 53  p:  */ PragTyp_S
31f0: 54 41 54 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72  TATS,.    /* ePr
3200: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
3210: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
3220: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3230: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
3240: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
3250: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
3260: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
3270: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73  zName:     */ "s
3280: 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a 20 20 20  ynchronous",.   
3290: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
32a0: 2f 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52  / PragTyp_SYNCHR
32b0: 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a 20 65 50  ONOUS,.    /* eP
32c0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67  ragFlag: */ Prag
32d0: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c  Flag_NeedSchema,
32e0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
32f0: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
3300: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
3310: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
3320: 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  A_PRAGMAS).  { /
3330: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3340: 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c 0a 20 20  "table_info",.  
3350: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3360: 2a 2f 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45  */ PragTyp_TABLE
3370: 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20 65 50  _INFO,.    /* eP
3380: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67  ragFlag: */ Prag
3390: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c  Flag_NeedSchema,
33a0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
33b0: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
33c0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
33d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
33e0: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
33f0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3400: 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a 20 20 20  temp_store",.   
3410: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3420: 2f 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53  / PragTyp_TEMP_S
3430: 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  TORE,.    /* ePr
3440: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3450: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3460: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
3470: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 74 65  Name:     */ "te
3480: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
3490: 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ry",.    /* ePra
34a0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
34b0: 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52  p_TEMP_STORE_DIR
34c0: 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f 2a 20 65  ECTORY,.    /* e
34d0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
34e0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
34f0: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
3500: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
3510: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
3520: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
3530: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
3540: 20 20 20 20 2a 2f 20 22 75 73 65 72 5f 76 65 72      */ "user_ver
3550: 73 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65 50  sion",.    /* eP
3560: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3570: 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45  Typ_HEADER_VALUE
3580: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3590: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
35a0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
35b0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64   },.#endif.#if d
35c0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
35d0: 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  BUG).  { /* zNam
35e0: 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65 5f  e:     */ "vdbe_
35f0: 61 64 64 6f 70 74 72 61 63 65 22 2c 0a 20 20 20  addoptrace",.   
3600: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3610: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
3620: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3630: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3640: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
3650: 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72 61  ITE_VdbeAddopTra
3660: 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61  ce },.  { /* zNa
3670: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65  me:     */ "vdbe
3680: 5f 64 65 62 75 67 22 2c 0a 20 20 20 20 2f 2a 20  _debug",.    /* 
3690: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
36a0: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
36b0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
36c0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
36d0: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
36e0: 53 71 6c 54 72 61 63 65 7c 53 51 4c 49 54 45 5f  SqlTrace|SQLITE_
36f0: 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49  VdbeListing|SQLI
3700: 54 45 5f 56 64 62 65 54 72 61 63 65 20 7d 2c 0a  TE_VdbeTrace },.
3710: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3720: 20 20 2a 2f 20 22 76 64 62 65 5f 6c 69 73 74 69    */ "vdbe_listi
3730: 6e 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ng",.    /* ePra
3740: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3750: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
3760: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3770: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3780: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65    */ SQLITE_Vdbe
3790: 4c 69 73 74 69 6e 67 20 7d 2c 0a 20 20 7b 20 2f  Listing },.  { /
37a0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
37b0: 22 76 64 62 65 5f 74 72 61 63 65 22 2c 0a 20 20  "vdbe_trace",.  
37c0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
37d0: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
37e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
37f0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3800: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
3810: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 7d  LITE_VdbeTrace }
3820: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
3830: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3840: 54 5f 57 41 4c 29 0a 20 20 7b 20 2f 2a 20 7a 4e  T_WAL).  { /* zN
3850: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61 6c  ame:     */ "wal
3860: 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22  _autocheckpoint"
3870: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3880: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 57  p:  */ PragTyp_W
3890: 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e  AL_AUTOCHECKPOIN
38a0: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
38b0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
38c0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
38d0: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
38e0: 65 3a 20 20 20 20 20 2a 2f 20 22 77 61 6c 5f 63  e:     */ "wal_c
38f0: 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20 20 20 20  heckpoint",.    
3900: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
3910: 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45   PragTyp_WAL_CHE
3920: 43 4b 50 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a 20  CKPOINT,.    /* 
3930: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3940: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3950: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
3960: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3970: 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  dif.  { /* zName
3980: 3a 20 20 20 20 20 2a 2f 20 22 77 72 69 74 61 62  :     */ "writab
3990: 6c 65 5f 73 63 68 65 6d 61 22 2c 0a 20 20 20 20  le_schema",.    
39a0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
39b0: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
39c0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
39d0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
39e0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
39f0: 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 7c 53  TE_WriteSchema|S
3a00: 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d 6f  QLITE_RecoveryMo
3a10: 64 65 20 7d 2c 0a 7d 3b 0a 2f 2a 20 4e 75 6d 62  de },.};./* Numb
3a20: 65 72 20 6f 66 20 70 72 61 67 6d 61 73 3a 20 35  er of pragmas: 5
3a30: 36 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2c  6 on by default,
3a40: 20 36 38 20 74 6f 74 61 6c 2e 20 2a 2f 0a 2f 2a   68 total. */./*
3a50: 20 45 6e 64 20 6f 66 20 74 68 65 20 61 75 74 6f   End of the auto
3a60: 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  matically genera
3a70: 74 65 64 20 70 72 61 67 6d 61 20 74 61 62 6c 65  ted pragma table
3a80: 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
3a90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3aa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3ab0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3ac0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
3ad0: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
3ae0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
3af0: 20 61 73 20 61 20 73 61 66 65 74 79 20 6c 65 76   as a safety lev
3b00: 65 6c 2e 20 20 52 65 74 75 72 6e 20 30 20 66 6f  el.  Return 0 fo
3b10: 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72 20  r OFF,.** 1 for 
3b20: 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e 64  ON or NORMAL and
3b30: 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52 65   2 for FULL.  Re
3b40: 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65 6d  turn 1 for an em
3b50: 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65 63  pty or .** unrec
3b60: 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20 61  ognized string a
3b70: 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46 55  rgument.  The FU
3b80: 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20 64 69 73  LL option is dis
3b90: 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74 68  allowed.** if th
3ba0: 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61 6d  e omitFull param
3bb0: 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a 2a  eter it 1..**.**
3bc0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 76   Note that the v
3bd0: 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20 61  alues returned a
3be0: 72 65 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 74  re one less that
3bf0: 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61 74   the values that
3c00: 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 70 61  .** should be pa
3c10: 73 73 65 64 20 69 6e 74 6f 20 73 71 6c 69 74 65  ssed into sqlite
3c20: 33 42 74 72 65 65 53 65 74 53 61 66 65 74 79 4c  3BtreeSetSafetyL
3c30: 65 76 65 6c 28 29 2e 20 20 54 68 65 20 69 73 20  evel().  The is 
3c40: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70 6f  done.** to suppo
3c50: 72 74 20 6c 65 67 61 63 79 20 53 51 4c 20 63 6f  rt legacy SQL co
3c60: 64 65 2e 20 20 54 68 65 20 73 61 66 65 74 79 20  de.  The safety 
3c70: 6c 65 76 65 6c 20 75 73 65 64 20 74 6f 20 62 65  level used to be
3c80: 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64 20   boolean.** and 
3c90: 6f 6c 64 65 72 20 73 63 72 69 70 74 73 20 6d 61  older scripts ma
3ca0: 79 20 68 61 76 65 20 75 73 65 64 20 6e 75 6d 62  y have used numb
3cb0: 65 72 73 20 30 20 66 6f 72 20 4f 46 46 20 61 6e  ers 0 for OFF an
3cc0: 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73  d 1 for ON..*/.s
3cd0: 74 61 74 69 63 20 75 38 20 67 65 74 53 61 66 65  tatic u8 getSafe
3ce0: 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63 68  tyLevel(const ch
3cf0: 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74 46  ar *z, int omitF
3d00: 75 6c 6c 2c 20 69 6e 74 20 64 66 6c 74 29 7b 0a  ull, int dflt){.
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
3d30: 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35 36  123456789 123456
3d40: 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69 63 20  789 */.  static 
3d50: 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74  const char zText
3d60: 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79  [] = "onoffalsey
3d70: 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20 73  estruefull";.  s
3d80: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69  tatic const u8 i
3d90: 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20 31  Offset[] = {0, 1
3da0: 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20 31  , 2, 4, 9, 12, 1
3db0: 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  6};.  static con
3dc0: 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20  st u8 iLength[] 
3dd0: 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20 33  = {2, 2, 3, 5, 3
3de0: 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74 69  , 4, 4};.  stati
3df0: 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61 6c 75  c const u8 iValu
3e00: 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30 2c  e[] =  {1, 0, 0,
3e10: 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20 20   0, 1, 1, 2};.  
3e20: 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20  int i, n;.  if( 
3e30: 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a  sqlite3Isdigit(*
3e40: 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  z) ){.    return
3e50: 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69   (u8)sqlite3Atoi
3e60: 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73  (z);.  }.  n = s
3e70: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3e80: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
3e90: 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74  ArraySize(iLengt
3ea0: 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b 2b  h)-omitFull; i++
3eb0: 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65 6e 67  ){.    if( iLeng
3ec0: 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c 69  th[i]==n && sqli
3ed0: 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a 54 65  te3StrNICmp(&zTe
3ee0: 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c 7a  xt[iOffset[i]],z
3ef0: 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ,n)==0 ){.      
3f00: 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d  return iValue[i]
3f10: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
3f20: 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a  turn dflt;.}../*
3f30: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
3f40: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
3f50: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
3f60: 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33  e..*/.u8 sqlite3
3f70: 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
3f80: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64 66   char *z, int df
3f90: 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65  lt){.  return ge
3fa0: 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31  tSafetyLevel(z,1
3fb0: 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a  ,dflt)!=0;.}../*
3fc0: 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74 42   The sqlite3GetB
3fd0: 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f  oolean() functio
3fe0: 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74 68  n is used by oth
3ff0: 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74  er modules but t
4000: 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20  he.** remainder 
4010: 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73 20  of this file is 
4020: 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41 47  specific to PRAG
4030: 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20  MA processing.  
4040: 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72  So omit.** the r
4050: 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20  est of the file 
4060: 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f  if PRAGMAs are o
4070: 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20  mitted from the 
4080: 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64  build..*/.#if !d
4090: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
40a0: 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a  IT_PRAGMA)../*.*
40b0: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
40c0: 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20  given string as 
40d0: 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76  a locking mode v
40e0: 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
40f0: 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f  int getLockingMo
4100: 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  de(const char *z
4110: 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20  ){.  if( z ){.  
4120: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
4130: 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c  StrICmp(z, "excl
4140: 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72 6e  usive") ) return
4150: 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f   PAGER_LOCKINGMO
4160: 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20  DE_EXCLUSIVE;.  
4170: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
4180: 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d  StrICmp(z, "norm
4190: 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50 41  al") ) return PA
41a0: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
41b0: 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65  NORMAL;.  }.  re
41c0: 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49  turn PAGER_LOCKI
41d0: 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a  NGMODE_QUERY;.}.
41e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
41f0: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
4200: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
4210: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
4220: 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75   as an auto-vacu
4230: 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a  um mode value..*
4240: 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
4250: 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e  ng strings, "non
4260: 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22  e", "full" and "
4270: 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65  incremental" are
4280: 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c   .** acceptable,
4290: 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e 75   as are their nu
42a0: 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74  meric equivalent
42b0: 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65  s: 0, 1 and 2 re
42c0: 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73  spectively..*/.s
42d0: 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75 74  tatic int getAut
42e0: 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68  oVacuum(const ch
42f0: 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b  ar *z){.  int i;
4300: 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65  .  if( 0==sqlite
4310: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e  3StrICmp(z, "non
4320: 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54 52  e") ) return BTR
4330: 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f  EE_AUTOVACUUM_NO
4340: 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c  NE;.  if( 0==sql
4350: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
4360: 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20  full") ) return 
4370: 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d  BTREE_AUTOVACUUM
4380: 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d  _FULL;.  if( 0==
4390: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
43a0: 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29  , "incremental")
43b0: 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f   ) return BTREE_
43c0: 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b  AUTOVACUUM_INCR;
43d0: 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74  .  i = sqlite3At
43e0: 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20  oi(z);.  return 
43f0: 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32  (u8)((i>=0&&i<=2
4400: 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66  )?i:0);.}.#endif
4410: 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54   /* ifndef SQLIT
4420: 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
4430: 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  M */..#ifndef SQ
4440: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
4450: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e  PRAGMAS./*.** In
4460: 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65  terpret the give
4470: 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74 65  n string as a te
4480: 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20  mp db location. 
4490: 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c  Return 1 for fil
44a0: 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70  e.** backed temp
44b0: 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73 2c  orary databases,
44c0: 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42   2 for the Red-B
44d0: 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d  lack tree in mem
44e0: 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ory database.** 
44f0: 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68 65  and 0 to use the
4500: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65   compile-time de
4510: 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63  fault..*/.static
4520: 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72   int getTempStor
4530: 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  e(const char *z)
4540: 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30  {.  if( z[0]>='0
4550: 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29  ' && z[0]<='2' )
4560: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30  {.    return z[0
4570: 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65  ] - '0';.  }else
4580: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
4590: 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d  Cmp(z, "file")==
45a0: 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  0 ){.    return 
45b0: 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73  1;.  }else if( s
45c0: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c  qlite3StrICmp(z,
45d0: 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b   "memory")==0 ){
45e0: 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20  .    return 2;. 
45f0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75   }else{.    retu
4600: 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64  rn 0;.  }.}.#end
4610: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47  if /* SQLITE_PAG
4620: 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  ER_PRAGMAS */..#
4630: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4640: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
4650: 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74  ./*.** Invalidat
4660: 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20  e temp storage, 
4670: 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65 20  either when the 
4680: 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20  temp storage is 
4690: 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20  changed.** from 
46a0: 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e  default, or when
46b0: 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20   'file' and the 
46c0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
46d0: 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65 64  tory has changed
46e0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69  .*/.static int i
46f0: 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f  nvalidateTempSto
4700: 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72  rage(Parse *pPar
4710: 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  se){.  sqlite3 *
4720: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
4730: 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31  .  if( db->aDb[1
4740: 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20  ].pBt!=0 ){.    
4750: 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d  if( !db->autoCom
4760: 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74  mit || sqlite3Bt
4770: 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73  reeIsInReadTrans
4780: 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29  (db->aDb[1].pBt)
4790: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
47a0: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
47b0: 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f  , "temporary sto
47c0: 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  rage cannot be c
47d0: 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20  hanged ".       
47e0: 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20   "from within a 
47f0: 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20  transaction");. 
4800: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49       return SQLI
4810: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a  TE_ERROR;.    }.
4820: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
4830: 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d  Close(db->aDb[1]
4840: 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61  .pBt);.    db->a
4850: 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20  Db[1].pBt = 0;. 
4860: 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
4870: 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
4880: 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20  ction(db);.  }. 
4890: 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f   return SQLITE_O
48a0: 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  K;.}.#endif /* S
48b0: 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47  QLITE_PAGER_PRAG
48c0: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
48d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
48e0: 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20  R_PRAGMAS./*.** 
48f0: 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  If the TEMP data
4900: 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c  base is open, cl
4910: 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20  ose it and mark 
4920: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
4930: 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e  ema.** as needin
4940: 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68  g reloading.  Th
4950: 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20  is must be done 
4960: 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53  when using the S
4970: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
4980: 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54  .** or DEFAULT_T
4990: 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61  EMP_STORE pragma
49a0: 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  s..*/.static int
49b0: 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61   changeTempStora
49c0: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
49d0: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53  , const char *zS
49e0: 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69  torageType){.  i
49f0: 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53  nt ts = getTempS
4a00: 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70  tore(zStorageTyp
4a10: 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e);.  sqlite3 *d
4a20: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a  b = pParse->db;.
4a30: 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73    if( db->temp_s
4a40: 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72  tore==ts ) retur
4a50: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69  n SQLITE_OK;.  i
4a60: 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d  f( invalidateTem
4a70: 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73 65  pStorage( pParse
4a80: 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20   ) != SQLITE_OK 
4a90: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51  ){.    return SQ
4aa0: 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a  LITE_ERROR;.  }.
4ab0: 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65    db->temp_store
4ac0: 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74   = (u8)ts;.  ret
4ad0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d  urn SQLITE_OK;.}
4ae0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
4af0: 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  E_PAGER_PRAGMAS 
4b00: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61  */../*.** Genera
4b10: 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72  te code to retur
4b20: 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67  n a single integ
4b30: 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  er value..*/.sta
4b40: 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53  tic void returnS
4b50: 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20 2a  ingleInt(Parse *
4b60: 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68  pParse, const ch
4b70: 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34 20  ar *zLabel, i64 
4b80: 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20 2a  value){.  Vdbe *
4b90: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
4ba0: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69 6e  be(pParse);.  in
4bb0: 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65  t mem = ++pParse
4bc0: 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a 70  ->nMem;.  i64 *p
4bd0: 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  I64 = sqlite3DbM
4be0: 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65 2d  allocRaw(pParse-
4bf0: 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75  >db, sizeof(valu
4c00: 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34 20  e));.  if( pI64 
4c10: 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 49  ){.    memcpy(pI
4c20: 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a 65  64, &value, size
4c30: 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d 0a  of(value));.  }.
4c40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
4c50: 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c  Op4(v, OP_Int64,
4c60: 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68 61   0, mem, 0, (cha
4c70: 72 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54 36  r*)pI64, P4_INT6
4c80: 34 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  4);.  sqlite3Vdb
4c90: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
4ca0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
4cb0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
4cc0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a   COLNAME_NAME, z
4cd0: 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53 54  Label, SQLITE_ST
4ce0: 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33  ATIC);.  sqlite3
4cf0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
4d00: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c  _ResultRow, mem,
4d10: 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53   1);.}.../*.** S
4d20: 65 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65  et the safety_le
4d30: 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66 6c  vel and pager fl
4d40: 61 67 73 20 66 6f 72 20 70 61 67 65 72 20 69 44  ags for pager iD
4d50: 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30 0a  b.  Or if iDb<0.
4d60: 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76 61 6c  ** set these val
4d70: 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67 65  ues for all page
4d80: 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  rs..*/.#ifndef S
4d90: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
4da0: 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63 20  _PRAGMAS.static 
4db0: 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65 72  void setAllPager
4dc0: 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a 64  Flags(sqlite3 *d
4dd0: 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75  b){.  if( db->au
4de0: 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
4df0: 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61 44  Db *pDb = db->aD
4e00: 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 64  b;.    int n = d
4e10: 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73 65  b->nDb;.    asse
4e20: 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46  rt( SQLITE_FullF
4e30: 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c 4c  Sync==PAGER_FULL
4e40: 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73  FSYNC );.    ass
4e50: 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70 74  ert( SQLITE_Ckpt
4e60: 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52  FullFSync==PAGER
4e70: 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20  _CKPT_FULLFSYNC 
4e80: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 53  );.    assert( S
4e90: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
4ea0: 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50 49  ==PAGER_CACHESPI
4eb0: 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  LL );.    assert
4ec0: 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53 59  ( (PAGER_FULLFSY
4ed0: 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54 5f  NC | PAGER_CKPT_
4ee0: 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45  FULLFSYNC | PAGE
4ef0: 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20 20  R_CACHESPILL).  
4f00: 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20 50             ==  P
4f10: 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 20  AGER_FLAGS_MASK 
4f20: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
4f30: 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65  pDb->safety_leve
4f40: 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48 52  l & PAGER_SYNCHR
4f50: 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44 62  ONOUS_MASK)==pDb
4f60: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 29  ->safety_level )
4f70: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 6e 2d  ;.    while( (n-
4f80: 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20 20 20  -) > 0 ){.      
4f90: 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a  if( pDb->pBt ){.
4fa0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
4fb0: 74 72 65 65 53 65 74 50 61 67 65 72 46 6c 61 67  treeSetPagerFlag
4fc0: 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20 20  s(pDb->pBt,.    
4fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 62               pDb
4fe0: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 7c  ->safety_level |
4ff0: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50 41   (db->flags & PA
5000: 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29 20  GER_FLAGS_MASK) 
5010: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
5020: 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20   pDb++;.    }.  
5030: 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  }.}.#else.# defi
5040: 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c  ne setAllPagerFl
5050: 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f 70  ags(X)  /* no-op
5060: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a   */.#endif.../*.
5070: 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d 61  ** Return a huma
5080: 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65 20  n-readable name 
5090: 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e 74  for a constraint
50a0: 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74 69   resolution acti
50b0: 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  on..*/.#ifndef S
50c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
50d0: 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63 6f  GN_KEY.static co
50e0: 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f 6e  nst char *action
50f0: 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29 7b  Name(u8 action){
5100: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
5110: 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28 20  Name;.  switch( 
5120: 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63 61  action ){.    ca
5130: 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20 20  se OE_SetNull:  
5140: 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55 4c  zName = "SET NUL
5150: 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  L";        break
5160: 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65  ;.    case OE_Se
5170: 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d 20  tDflt:  zName = 
5180: 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20 20  "SET DEFAULT";  
5190: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
51a0: 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20 20  se OE_Cascade:  
51b0: 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44 45  zName = "CASCADE
51c0: 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  ";         break
51d0: 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52 65  ;.    case OE_Re
51e0: 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d 20  strict: zName = 
51f0: 22 52 45 53 54 52 49 43 54 22 3b 20 20 20 20 20  "RESTRICT";     
5200: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
5210: 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20  fault:          
5220: 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54 49  zName = "NO ACTI
5230: 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20 20  ON";  .         
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
5250: 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45 5f  ert( action==OE_
5260: 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a 20  None ); break;. 
5270: 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d   }.  return zNam
5280: 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  e;.}.#endif.../*
5290: 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65 4d  .** Parameter eM
52a0: 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65 20  ode must be one 
52b0: 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55  of the PAGER_JOU
52c0: 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f 6e  RNALMODE_XXX con
52d0: 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e 65  stants.** define
52e0: 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54 68  d in pager.h. Th
52f0: 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  is function retu
5300: 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61 74  rns the associat
5310: 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a 20  ed lowercase.** 
5320: 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61 6d  journal-mode nam
5330: 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72  e..*/.const char
5340: 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
5350: 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d 6f  Modename(int eMo
5360: 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63 68  de){.  static ch
5370: 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f 64  ar * const azMod
5380: 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  eName[] = {.    
5390: 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73 69  "delete", "persi
53a0: 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72 75  st", "off", "tru
53b0: 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79 22  ncate", "memory"
53c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
53d0: 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c 20  OMIT_WAL.     , 
53e0: 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20 7d  "wal".#endif.  }
53f0: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
5400: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45  R_JOURNALMODE_DE
5410: 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73 73  LETE==0 );.  ass
5420: 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ert( PAGER_JOURN
5430: 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d 3d  ALMODE_PERSIST==
5440: 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50  1 );.  assert( P
5450: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
5460: 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73 73  _OFF==2 );.  ass
5470: 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ert( PAGER_JOURN
5480: 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 3d  ALMODE_TRUNCATE=
5490: 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =3 );.  assert( 
54a0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
54b0: 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a 20  E_MEMORY==4 );. 
54c0: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
54d0: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d 3d  OURNALMODE_WAL==
54e0: 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 65  5 );.  assert( e
54f0: 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64 65  Mode>=0 && eMode
5500: 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f  <=ArraySize(azMo
5510: 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69 66  deName) );..  if
5520: 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53 69  ( eMode==ArraySi
5530: 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29  ze(azModeName) )
5540: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74   return 0;.  ret
5550: 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 65  urn azModeName[e
5560: 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20  Mode];.}../*.** 
5570: 50 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d 61  Process a pragma
5580: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a 2a   statement.  .**
5590: 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65 20  .** Pragmas are 
55a0: 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a 2a  of this form:.**
55b0: 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41 20  .**      PRAGMA 
55c0: 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b 3d  [database.]id [=
55d0: 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54 68   value].**.** Th
55e0: 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69 67  e identifier mig
55f0: 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74 72  ht also be a str
5600: 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ing.  The value 
5610: 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e 64  is a string, and
5620: 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c 20  .** identifier, 
5630: 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66  or a number.  If
5640: 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74 72   minusFlag is tr
5650: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c  ue, then the val
5660: 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62 65  ue is.** a numbe
5670: 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63 65  r that was prece
5680: 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20 73  ded by a minus s
5690: 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ign..**.** If th
56a0: 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 22  e left side is "
56b0: 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68 65  database.id" the
56c0: 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64 61  n pId1 is the da
56d0: 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20 61  tabase name.** a
56e0: 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20 69  nd pId2 is the i
56f0: 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74 20  d.  If the left 
5700: 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69 64  side is just "id
5710: 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74  " then pId1 is t
5720: 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49 64  he.** id and pId
5730: 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20 73  2 is any empty s
5740: 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20 73  tring..*/.void s
5750: 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20 20  qlite3Pragma(.  
5760: 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 0a  Parse *pParse, .
5770: 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20 20    Token *pId1,  
5780: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 70        /* First p
5790: 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65  art of [database
57a0: 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20  .]id field */.  
57b0: 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20  Token *pId2,    
57c0: 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61      /* Second pa
57d0: 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e  rt of [database.
57e0: 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55  ]id field, or NU
57f0: 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  LL */.  Token *p
5800: 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54  Value,      /* T
5810: 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e  oken for <value>
5820: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69  , or NULL */.  i
5830: 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20  nt minusFlag    
5840: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20     /* True if a 
5850: 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64 65  '-' sign precede
5860: 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a  d <value> */.){.
5870: 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20    char *zLeft = 
5880: 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d  0;       /* Nul-
5890: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
58a0: 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a   string <id> */.
58b0: 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d    char *zRight =
58c0: 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d   0;      /* Nul-
58d0: 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38  terminated UTF-8
58e0: 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c   string <value>,
58f0: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f   or NULL */.  co
5900: 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20  nst char *zDb = 
5910: 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61  0;   /* The data
5920: 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  base name */.  T
5930: 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20  oken *pId;      
5940: 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72        /* Pointer
5950: 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a   to <id> token *
5960: 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c  /.  char *aFcntl
5970: 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72  [4];       /* Ar
5980: 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45  gument to SQLITE
5990: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
59a0: 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20  .  int iDb;     
59b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
59c0: 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20  abase index for 
59d0: 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20  <database> */.  
59e0: 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69  int lwr, upr, mi
59f0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d;           /* 
5a00: 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f  Binary search bo
5a10: 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63  unds */.  int rc
5a20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
5a30: 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e         /* return
5a40: 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49   value form SQLI
5a50: 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20  TE_FCNTL_PRAGMA 
5a60: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  */.  sqlite3 *db
5a70: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20   = pParse->db;  
5a80: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
5a90: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a  e connection */.
5aa0: 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20    Db *pDb;      
5ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5ac0: 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20 64  * The specific d
5ad0: 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70 72  atabase being pr
5ae0: 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65  agmaed */.  Vdbe
5af0: 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74   *v = sqlite3Get
5b00: 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f  Vdbe(pParse);  /
5b10: 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74 65  * Prepared state
5b20: 6d 65 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20 76  ment */..  if( v
5b30: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
5b40: 73 71 6c 69 74 65 33 56 64 62 65 52 75 6e 4f 6e  sqlite3VdbeRunOn
5b50: 6c 79 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50 61  lyOnce(v);.  pPa
5b60: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 0a  rse->nMem = 2;..
5b70: 20 20 2f 2a 20 49 6e 74 65 72 70 72 65 74 20 74    /* Interpret t
5b80: 68 65 20 5b 64 61 74 61 62 61 73 65 2e 5d 20 70  he [database.] p
5b90: 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d  art of the pragm
5ba0: 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44 62  a statement. iDb
5bb0: 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64   is the.  ** ind
5bc0: 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
5bd0: 73 65 20 74 68 69 73 20 70 72 61 67 6d 61 20 69  se this pragma i
5be0: 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64 20  s being applied 
5bf0: 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e 20  to in db.aDb[]. 
5c00: 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69 74  */.  iDb = sqlit
5c10: 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70 50  e3TwoPartName(pP
5c20: 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64 32  arse, pId1, pId2
5c30: 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20 69  , &pId);.  if( i
5c40: 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a 20  Db<0 ) return;. 
5c50: 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b   pDb = &db->aDb[
5c60: 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  iDb];..  /* If t
5c70: 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65  he temp database
5c80: 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69 63   has been explic
5c90: 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70 61  itly named as pa
5ca0: 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20  rt of the .  ** 
5cb0: 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75 72  pragma, make sur
5cc0: 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a 20  e it is open. . 
5cd0: 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d 31   */.  if( iDb==1
5ce0: 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e 54   && sqlite3OpenT
5cf0: 65 6d 70 44 61 74 61 62 61 73 65 28 70 50 61 72  empDatabase(pPar
5d00: 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  se) ){.    retur
5d10: 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74 20  n;.  }..  zLeft 
5d20: 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f  = sqlite3NameFro
5d30: 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29 3b  mToken(db, pId);
5d40: 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29 20  .  if( !zLeft ) 
5d50: 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d 69  return;.  if( mi
5d60: 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20 7a  nusFlag ){.    z
5d70: 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4d  Right = sqlite3M
5d80: 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54 22  Printf(db, "-%T"
5d90: 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c  , pValue);.  }el
5da0: 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d  se{.    zRight =
5db0: 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d   sqlite3NameFrom
5dc0: 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75 65  Token(db, pValue
5dd0: 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  );.  }..  assert
5de0: 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62 20  ( pId2 );.  zDb 
5df0: 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70 44  = pId2->n>0 ? pD
5e00: 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20 20  b->zName : 0;.  
5e10: 69 66 28 20 73 71 6c 69 74 65 33 41 75 74 68 43  if( sqlite3AuthC
5e20: 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51 4c  heck(pParse, SQL
5e30: 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65 66  ITE_PRAGMA, zLef
5e40: 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 20  t, zRight, zDb) 
5e50: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67  ){.    goto prag
5e60: 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f  ma_out;.  }..  /
5e70: 2a 20 53 65 6e 64 20 61 6e 20 53 51 4c 49 54 45  * Send an SQLITE
5e80: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69  _FCNTL_PRAGMA fi
5e90: 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  le-control to th
5ea0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53  e underlying VFS
5eb0: 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e  .  ** connection
5ec0: 2e 20 20 49 66 20 69 74 20 72 65 74 75 72 6e 73  .  If it returns
5ed0: 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65 6e   SQLITE_OK, then
5ee0: 20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68 65   assume that the
5ef0: 20 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c 65   VFS.  ** handle
5f00: 64 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e 64  d the pragma and
5f10: 20 67 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d 6f   generate a no-o
5f20: 70 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  p prepared state
5f30: 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63  ment..  */.  aFc
5f40: 6e 74 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46  ntl[0] = 0;.  aF
5f50: 63 6e 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b  cntl[1] = zLeft;
5f60: 0a 20 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a  .  aFcntl[2] = z
5f70: 52 69 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b  Right;.  aFcntl[
5f80: 33 5d 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  3] = 0;.  db->bu
5f90: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
5fa0: 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 0;.  rc = sqli
5fb0: 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c  te3_file_control
5fc0: 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45  (db, zDb, SQLITE
5fd0: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28  _FCNTL_PRAGMA, (
5fe0: 76 6f 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20  void*)aFcntl);. 
5ff0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
6000: 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46  OK ){.    if( aF
6010: 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20  cntl[0] ){.     
6020: 20 69 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61   int mem = ++pPa
6030: 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 20  rse->nMem;.     
6040: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
6050: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
6060: 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46 63  , 0, mem, 0, aFc
6070: 6e 74 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20  ntl[0], 0);.    
6080: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
6090: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
60a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
60b0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
60c0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
60d0: 72 65 73 75 6c 74 22 2c 20 53 51 4c 49 54 45 5f  result", SQLITE_
60e0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
60f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
6100: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
6110: 2c 20 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20 20  , mem, 1);.     
6120: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46   sqlite3_free(aF
6130: 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a  cntl[0]);.    }.
6140: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
6150: 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72  out;.  }.  if( r
6160: 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55  c!=SQLITE_NOTFOU
6170: 4e 44 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46  ND ){.    if( aF
6180: 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20  cntl[0] ){.     
6190: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
61a0: 28 70 50 61 72 73 65 2c 20 22 25 73 22 2c 20 61  (pParse, "%s", a
61b0: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 20  Fcntl[0]);.     
61c0: 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46   sqlite3_free(aF
61d0: 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a  cntl[0]);.    }.
61e0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72      pParse->nErr
61f0: 2b 2b 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  ++;.    pParse->
6200: 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f 74  rc = rc;.    got
6210: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
6220: 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20 74  }..  /* Locate t
6230: 68 65 20 70 72 61 67 6d 61 20 69 6e 20 74 68 65  he pragma in the
6240: 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a 2f   lookup table */
6250: 0a 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70  .  lwr = 0;.  up
6260: 72 20 3d 20 41 72 72 61 79 53 69 7a 65 28 61 50  r = ArraySize(aP
6270: 72 61 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a 20  ragmaNames)-1;. 
6280: 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70 72   while( lwr<=upr
6290: 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28 6c   ){.    mid = (l
62a0: 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20 72  wr+upr)/2;.    r
62b0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72 69  c = sqlite3_stri
62c0: 63 6d 70 28 7a 4c 65 66 74 2c 20 61 50 72 61 67  cmp(zLeft, aPrag
62d0: 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61  maNames[mid].zNa
62e0: 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  me);.    if( rc=
62f0: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  =0 ) break;.    
6300: 69 66 28 20 72 63 3c 30 20 29 7b 0a 20 20 20 20  if( rc<0 ){.    
6310: 20 20 75 70 72 20 3d 20 6d 69 64 20 2d 20 31 3b    upr = mid - 1;
6320: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
6330: 20 20 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31 3b    lwr = mid + 1;
6340: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
6350: 20 6c 77 72 3e 75 70 72 20 29 20 67 6f 74 6f 20   lwr>upr ) goto 
6360: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20 2f  pragma_out;..  /
6370: 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20  * Make sure the 
6380: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
6390: 69 73 20 6c 6f 61 64 65 64 20 69 66 20 74 68 65  is loaded if the
63a0: 20 70 72 61 67 6d 61 20 72 65 71 75 69 72 65 73   pragma requires
63b0: 20 74 68 61 74 20 2a 2f 0a 20 20 69 66 28 20 28   that */.  if( (
63c0: 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64  aPragmaNames[mid
63d0: 5d 2e 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72  ].mPragFlag & Pr
63e0: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
63f0: 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  a)!=0 ){.    if(
6400: 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
6410: 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
6420: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
6430: 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  }..  /* Jump to 
6440: 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
6450: 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a  pragma handler *
6460: 2f 0a 20 20 73 77 69 74 63 68 28 20 61 50 72 61  /.  switch( aPra
6470: 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65 50  gmaNames[mid].eP
6480: 72 61 67 54 79 70 20 29 7b 0a 20 20 0a 23 69 66  ragTyp ){.  .#if
6490: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
64a0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
64b0: 4d 41 53 29 20 26 26 20 21 64 65 66 69 6e 65 64  MAS) && !defined
64c0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50  (SQLITE_OMIT_DEP
64d0: 52 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20 20  RECATED).  /*.  
64e0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
64f0: 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61  base.]default_ca
6500: 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50  che_size.  **  P
6510: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
6520: 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  ]default_cache_s
6530: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
6540: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
6550: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
6560: 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73 65  nt persistent se
6570: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
6580: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
6590: 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72  ze.  The value r
65a0: 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d  eturned is the m
65b0: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
65c0: 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74  .  ** pages in t
65d0: 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20 20  he page cache.  
65e0: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
65f0: 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63 75  sets both the cu
6600: 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20  rrent.  ** page 
6610: 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65  cache size value
6620: 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73 74   and the persist
6630: 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20 73  ent page cache s
6640: 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73  ize value.  ** s
6650: 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74  tored in the dat
6660: 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a  abase file..  **
6670: 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73  .  ** Older vers
6680: 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77  ions of SQLite w
6690: 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65 66  ould set the def
66a0: 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20  ault cache size 
66b0: 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69  to a.  ** negati
66c0: 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64  ve number to ind
66d0: 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75  icate synchronou
66e0: 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61  s=OFF.  These da
66f0: 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a  ys, synchronous.
6700: 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f    ** is always o
6710: 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65 67  n by default reg
6720: 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73  ardless of the s
6730: 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75  ign of the defau
6740: 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69  lt cache.  ** si
6750: 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75  ze.  But continu
6760: 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62  e to take the ab
6770: 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
6780: 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68  the default cach
6790: 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68  e.  ** size of h
67a0: 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74  istorical compat
67b0: 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20  ibility..  */.  
67c0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45 46  case PragTyp_DEF
67d0: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a  AULT_CACHE_SIZE:
67e0: 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
67f0: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 67  nst VdbeOpList g
6800: 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d 20  etCacheSize[] = 
6810: 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61  {.      { OP_Tra
6820: 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30 2c 20  nsaction, 0, 0, 
6830: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20         0},      
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6850: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
6860: 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65   { OP_ReadCookie
6870: 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20  ,  0, 1,        
6880: 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43 41  BTREE_DEFAULT_CA
6890: 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20 31  CHE_SIZE},  /* 1
68a0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49   */.      { OP_I
68b0: 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38  fPos,       1, 8
68c0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
68d0: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
68e0: 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20 20 20       0, 2,      
68f0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
6900: 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20 31 2c  _Subtract,    1,
6910: 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c 0a 20   2,        1},. 
6920: 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c       { OP_IfPos,
6930: 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20         1, 8,    
6940: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
6950: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
6960: 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 1,        0},
6970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6980: 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20 2a 2f           /* 6 */
6990: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f 70  .      { OP_Noop
69a0: 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20  ,        0, 0,  
69b0: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20        0},.      
69c0: 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
69d0: 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20 20 30    1, 1,        0
69e0: 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e  },.    };.    in
69f0: 74 20 61 64 64 72 3b 0a 20 20 20 20 73 71 6c 69  t addr;.    sqli
6a00: 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65  te3VdbeUsesBtree
6a10: 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 66  (v, iDb);.    if
6a20: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
6a30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
6a40: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
6a50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6a60: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
6a70: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
6a80: 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 53 51  "cache_size", SQ
6a90: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
6aa0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
6ab0: 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 61 64 64   += 2;.      add
6ac0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
6ad0: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
6ae0: 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53 69  ySize(getCacheSi
6af0: 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53 69 7a  ze), getCacheSiz
6b00: 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
6b10: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
6b20: 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20   addr, iDb);.   
6b30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
6b40: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31  angeP1(v, addr+1
6b50: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
6b60: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
6b70: 31 28 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c  1(v, addr+6, SQL
6b80: 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48  ITE_DEFAULT_CACH
6b90: 45 5f 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c  E_SIZE);.    }el
6ba0: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69  se{.      int si
6bb0: 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49  ze = sqlite3AbsI
6bc0: 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69  nt32(sqlite3Atoi
6bd0: 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20  (zRight));.     
6be0: 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
6bf0: 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72  teOperation(pPar
6c00: 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20  se, 0, iDb);.   
6c10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
6c20: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
6c30: 65 72 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20  er, size, 1);.  
6c40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
6c50: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43  ddOp3(v, OP_SetC
6c60: 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45  ookie, iDb, BTRE
6c70: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
6c80: 53 49 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20  SIZE, 1);.      
6c90: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
6ca0: 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
6cb0: 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
6cc0: 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
6cd0: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73  ->cache_size = s
6ce0: 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ize;.      sqlit
6cf0: 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53  e3BtreeSetCacheS
6d00: 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44  ize(pDb->pBt, pD
6d10: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
6d20: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20  e_size);.    }. 
6d30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
6d40: 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f  ndif /* !SQLITE_
6d50: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
6d60: 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d  AS && !SQLITE_OM
6d70: 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f  IT_DEPRECATED */
6d80: 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
6d90: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
6da0: 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20  _PRAGMAS).  /*. 
6db0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
6dc0: 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65  abase.]page_size
6dd0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
6de0: 61 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69  atabase.]page_si
6df0: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
6e00: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
6e10: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
6e20: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
6e30: 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  e.  ** database 
6e40: 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74  page size in byt
6e50: 65 73 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20  es.  The second 
6e60: 66 6f 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20  form sets the.  
6e70: 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65  ** database page
6e80: 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68   size value.  Th
6e90: 65 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79  e value can only
6ea0: 20 62 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20   be set if.  ** 
6eb0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 73  the database has
6ec0: 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72   not yet been cr
6ed0: 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  eated..  */.  ca
6ee0: 73 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f  se PragTyp_PAGE_
6ef0: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65  SIZE: {.    Btre
6f00: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
6f10: 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  t;.    assert( p
6f20: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
6f30: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
6f40: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57    int size = ALW
6f50: 41 59 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74  AYS(pBt) ? sqlit
6f60: 65 33 42 74 72 65 65 47 65 74 50 61 67 65 53 69  e3BtreeGetPageSi
6f70: 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20  ze(pBt) : 0;.   
6f80: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
6f90: 6e 74 28 70 50 61 72 73 65 2c 20 22 70 61 67 65  nt(pParse, "page
6fa0: 5f 73 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20  _size", size);. 
6fb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
6fc0: 2f 2a 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61  /* Malloc may fa
6fd0: 69 6c 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20  il when setting 
6fe0: 74 68 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61  the page-size, a
6ff0: 73 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  s there is an in
7000: 74 65 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20  ternal.      ** 
7010: 62 75 66 66 65 72 20 74 68 61 74 20 74 68 65 20  buffer that the 
7020: 70 61 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73  pager module res
7030: 69 7a 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74  izes using sqlit
7040: 65 33 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20  e3_realloc()..  
7050: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d      */.      db-
7060: 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20  >nextPagesize = 
7070: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
7080: 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53  ht);.      if( S
7090: 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c  QLITE_NOMEM==sql
70a0: 69 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65  ite3BtreeSetPage
70b0: 53 69 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65  Size(pBt, db->ne
70c0: 78 74 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29  xtPagesize,-1,0)
70d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e   ){.        db->
70e0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
70f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
7100: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
7110: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
7120: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63  A [database.]sec
7130: 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20  ure_delete.  ** 
7140: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
7150: 65 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65  e.]secure_delete
7160: 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a  =ON/OFF.  **.  *
7170: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
7180: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
7190: 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72  rent setting for
71a0: 20 74 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65   the.  ** secure
71b0: 5f 64 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54  _delete flag.  T
71c0: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63  he second form c
71d0: 68 61 6e 67 65 73 20 74 68 65 20 73 65 63 75 72  hanges the secur
71e0: 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c  e_delete.  ** fl
71f0: 61 67 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72  ag setting and r
7200: 65 70 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61  eports thenew va
7210: 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  lue..  */.  case
7220: 20 50 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f   PragTyp_SECURE_
7230: 44 45 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74  DELETE: {.    Bt
7240: 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e  ree *pBt = pDb->
7250: 70 42 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d  pBt;.    int b =
7260: 20 2d 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28   -1;.    assert(
7270: 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69   pBt!=0 );.    i
7280: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
7290: 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65     b = sqlite3Ge
72a0: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
72b0: 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69   0);.    }.    i
72c0: 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26  f( pId2->n==0 &&
72d0: 20 62 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69   b>=0 ){.      i
72e0: 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72  nt ii;.      for
72f0: 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
7300: 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
7310: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
7320: 63 75 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61  cureDelete(db->a
7330: 44 62 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a  Db[ii].pBt, b);.
7340: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
7350: 20 20 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72    b = sqlite3Btr
7360: 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28 70  eeSecureDelete(p
7370: 42 74 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75  Bt, b);.    retu
7380: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
7390: 73 65 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65  se, "secure_dele
73a0: 74 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65  te", b);.    bre
73b0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
73c0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
73d0: 62 61 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63  base.]max_page_c
73e0: 6f 75 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d  ount.  **  PRAGM
73f0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78  A [database.]max
7400: 5f 70 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20  _page_count=N.  
7410: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
7420: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
7430: 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69  he current setti
7440: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
7450: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
7460: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64  f pages in the d
7470: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
7480: 68 65 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20  he .  ** second 
7490: 66 6f 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f  form attempts to
74a0: 20 63 68 61 6e 67 65 20 74 68 69 73 20 73 65 74   change this set
74b0: 74 69 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a  ting.  Both.  **
74c0: 20 66 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68   forms return th
74d0: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
74e0: 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  g..  **.  ** The
74f0: 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20   absolute value 
7500: 6f 66 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54  of N is used.  T
7510: 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e  his is undocumen
7520: 74 65 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20  ted and might.  
7530: 2a 2a 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20  ** change.  The 
7540: 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20  only purpose is 
7550: 74 6f 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61  to provide an ea
7560: 73 79 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20  sy way to test. 
7570: 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41   ** the sqlite3A
7580: 62 73 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69  bsInt32() functi
7590: 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50  on..  **.  **  P
75a0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
75b0: 5d 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a  ]page_count.  **
75c0: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  .  ** Return the
75d0: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
75e0: 20 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 65   in the specifie
75f0: 64 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f  d database..  */
7600: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
7610: 50 41 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20  PAGE_COUNT: {.  
7620: 20 20 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20    int iReg;.    
7630: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
7640: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
7650: 69 44 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d  iDb);.    iReg =
7660: 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b   ++pParse->nMem;
7670: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
7680: 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d  Tolower(zLeft[0]
7690: 29 3d 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20  )=='p' ){.      
76a0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
76b0: 32 28 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e  2(v, OP_Pagecoun
76c0: 74 2c 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20  t, iDb, iReg);. 
76d0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
76e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
76f0: 33 28 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74  3(v, OP_MaxPgcnt
7700: 2c 20 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20  , iDb, iReg, .  
7710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7720: 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 62 73        sqlite3Abs
7730: 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f  Int32(sqlite3Ato
7740: 69 28 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20  i(zRight)));.   
7750: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
7760: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
7770: 65 73 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20  esultRow, iReg, 
7780: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
7790: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
77a0: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
77b0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
77c0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
77d0: 45 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45  E, zLeft, SQLITE
77e0: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
77f0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
7800: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
7810: 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e  database.]lockin
7820: 67 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41  g_mode.  **  PRA
7830: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c  GMA [database.]l
7840: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e  ocking_mode = (n
7850: 6f 72 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29  ormal|exclusive)
7860: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
7870: 67 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44  gTyp_LOCKING_MOD
7880: 45 3a 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63  E: {.    const c
7890: 68 61 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72  har *zRet = "nor
78a0: 6d 61 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d  mal";.    int eM
78b0: 6f 64 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67  ode = getLocking
78c0: 4d 6f 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20  Mode(zRight);.. 
78d0: 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d     if( pId2->n==
78e0: 30 20 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45  0 && eMode==PAGE
78f0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55  R_LOCKINGMODE_QU
7900: 45 52 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ERY ){.      /* 
7910: 53 69 6d 70 6c 65 20 22 50 52 41 47 4d 41 20 6c  Simple "PRAGMA l
7920: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74  ocking_mode;" st
7930: 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73  atement. This is
7940: 20 61 20 71 75 65 72 79 20 66 6f 72 0a 20 20 20   a query for.   
7950: 20 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e     ** the curren
7960: 74 20 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e  t default lockin
7970: 67 20 6d 6f 64 65 20 28 77 68 69 63 68 20 6d 61  g mode (which ma
7980: 79 20 62 65 20 64 69 66 66 65 72 65 6e 74 20 74  y be different t
7990: 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c  o.      ** the l
79a0: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74  ocking-mode of t
79b0: 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
79c0: 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
79d0: 20 20 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66    eMode = db->df
79e0: 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20  ltLockMode;.    
79f0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67  }else{.      Pag
7a00: 65 72 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20  er *pPager;.    
7a10: 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30    if( pId2->n==0
7a20: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54   ){.        /* T
7a30: 68 69 73 20 69 6e 64 69 63 61 74 65 73 20 74 68  his indicates th
7a40: 61 74 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e  at no database n
7a50: 61 6d 65 20 77 61 73 20 73 70 65 63 69 66 69 65  ame was specifie
7a60: 64 20 61 73 20 70 61 72 74 0a 20 20 20 20 20 20  d as part.      
7a70: 20 20 2a 2a 20 6f 66 20 74 68 65 20 50 52 41 47    ** of the PRAG
7a80: 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74  MA command. In t
7a90: 68 69 73 20 63 61 73 65 20 74 68 65 20 6c 6f 63  his case the loc
7aa0: 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62  king-mode must b
7ab0: 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 74  e.        ** set
7ac0: 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64   on all attached
7ad0: 20 64 61 74 61 62 61 73 65 73 2c 20 61 73 20 77   databases, as w
7ae0: 65 6c 6c 20 61 73 20 74 68 65 20 6d 61 69 6e 20  ell as the main 
7af0: 64 62 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 20  db file..       
7b00: 20 2a 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 41   **.        ** A
7b10: 6c 73 6f 2c 20 74 68 65 20 73 71 6c 69 74 65 33  lso, the sqlite3
7b20: 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61  .dfltLockMode va
7b30: 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 73 6f  riable is set so
7b40: 20 74 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a   that.        **
7b50: 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74 6c   any subsequentl
7b60: 79 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  y attached datab
7b70: 61 73 65 73 20 61 6c 73 6f 20 75 73 65 20 74 68  ases also use th
7b80: 65 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20  e specified.    
7b90: 20 20 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d      ** locking m
7ba0: 6f 64 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a  ode..        */.
7bb0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a          int ii;.
7bc0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 70          assert(p
7bd0: 44 62 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29  Db==&db->aDb[0])
7be0: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69  ;.        for(ii
7bf0: 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =2; ii<db->nDb; 
7c00: 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
7c10: 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65   pPager = sqlite
7c20: 33 42 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e  3BtreePager(db->
7c30: 61 44 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20  aDb[ii].pBt);.  
7c40: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
7c50: 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28  agerLockingMode(
7c60: 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a  pPager, eMode);.
7c70: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
7c80: 20 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f    db->dfltLockMo
7c90: 64 65 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a  de = (u8)eMode;.
7ca0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 50        }.      pP
7cb0: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
7cc0: 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42  reePager(pDb->pB
7cd0: 74 29 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65 20  t);.      eMode 
7ce0: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f  = sqlite3PagerLo
7cf0: 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72  ckingMode(pPager
7d00: 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a  , eMode);.    }.
7d10: 0a 20 20 20 20 61 73 73 65 72 74 28 20 65 4d 6f  .    assert( eMo
7d20: 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e  de==PAGER_LOCKIN
7d30: 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20  GMODE_NORMAL.   
7d40: 20 20 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64           || eMod
7d50: 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  e==PAGER_LOCKING
7d60: 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29  MODE_EXCLUSIVE )
7d70: 3b 0a 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d  ;.    if( eMode=
7d80: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
7d90: 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 7b 0a  DE_EXCLUSIVE ){.
7da0: 20 20 20 20 20 20 7a 52 65 74 20 3d 20 22 65 78        zRet = "ex
7db0: 63 6c 75 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a  clusive";.    }.
7dc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
7dd0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
7de0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7df0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
7e00: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
7e10: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53  locking_mode", S
7e20: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
7e30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
7e40: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
7e50: 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65  g8, 0, 1, 0, zRe
7e60: 74 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74  t, 0);.    sqlit
7e70: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
7e80: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
7e90: 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a   1);.    break;.
7ea0: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
7eb0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
7ec0: 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20  .]journal_mode. 
7ed0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
7ee0: 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d  abase.]journal_m
7ef0: 6f 64 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20  ode =.  **      
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 28 64 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c  (delete|persist|
7f20: 6f 66 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d  off|truncate|mem
7f30: 6f 72 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a  ory|wal|off).  *
7f40: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
7f50: 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b  _JOURNAL_MODE: {
7f60: 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20  .    int eMode; 
7f70: 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
7f80: 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e   the PAGER_JOURN
7f90: 41 4c 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f  ALMODE_XXX symbo
7fa0: 6c 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69  ls */.    int ii
7fb0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
7fc0: 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a  oop counter */..
7fd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
7fe0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
7ff0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8000: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
8010: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
8020: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53  journal_mode", S
8030: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a  QLITE_STATIC);..
8040: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
8050: 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66  0 ){.      /* If
8060: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d   there is no "=M
8070: 4f 44 45 22 20 70 61 72 74 20 6f 66 20 74 68 65  ODE" part of the
8080: 20 70 72 61 67 6d 61 2c 20 64 6f 20 61 20 71 75   pragma, do a qu
8090: 65 72 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20  ery for the.    
80a0: 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64    ** current mod
80b0: 65 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65  e */.      eMode
80c0: 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c   = PAGER_JOURNAL
80d0: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20  MODE_QUERY;.    
80e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e  }else{.      con
80f0: 73 74 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a  st char *zMode;.
8100: 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71        int n = sq
8110: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52  lite3Strlen30(zR
8120: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 66 6f 72  ight);.      for
8130: 28 65 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65  (eMode=0; (zMode
8140: 20 3d 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61   = sqlite3Journa
8150: 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29  lModename(eMode)
8160: 29 21 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a  )!=0; eMode++){.
8170: 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69          if( sqli
8180: 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67  te3StrNICmp(zRig
8190: 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30  ht, zMode, n)==0
81a0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
81b0: 7d 0a 20 20 20 20 20 20 69 66 28 20 21 7a 4d 6f  }.      if( !zMo
81c0: 64 65 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  de ){.        /*
81d0: 20 49 66 20 74 68 65 20 22 3d 4d 4f 44 45 22 20   If the "=MODE" 
81e0: 70 61 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61  part does not ma
81f0: 74 63 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f  tch any known jo
8200: 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20  urnal mode,.    
8210: 20 20 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61      ** then do a
8220: 20 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 20 20   query */.      
8230: 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f    eMode = PAGER_
8240: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
8250: 59 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  Y;.      }.    }
8260: 0a 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d  .    if( eMode==
8270: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
8280: 45 5f 51 55 45 52 59 20 26 26 20 70 49 64 32 2d  E_QUERY && pId2-
8290: 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  >n==0 ){.      /
82a0: 2a 20 43 6f 6e 76 65 72 74 20 22 50 52 41 47 4d  * Convert "PRAGM
82b0: 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20  A journal_mode" 
82c0: 69 6e 74 6f 20 22 50 52 41 47 4d 41 20 6d 61 69  into "PRAGMA mai
82d0: 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20  n.journal_mode" 
82e0: 2a 2f 0a 20 20 20 20 20 20 69 44 62 20 3d 20 30  */.      iDb = 0
82f0: 3b 0a 20 20 20 20 20 20 70 49 64 32 2d 3e 6e 20  ;.      pId2->n 
8300: 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66  = 1;.    }.    f
8310: 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b  or(ii=db->nDb-1;
8320: 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20   ii>=0; ii--){. 
8330: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
8340: 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d  [ii].pBt && (ii=
8350: 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d  =iDb || pId2->n=
8360: 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73  =0) ){.        s
8370: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
8380: 72 65 65 28 76 2c 20 69 69 29 3b 0a 20 20 20 20  ree(v, ii);.    
8390: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
83a0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75 72  ddOp3(v, OP_Jour
83b0: 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c 20  nalMode, ii, 1, 
83c0: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d 0a  eMode);.      }.
83d0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
83e0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
83f0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
8400: 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  1);.    break;. 
8410: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
8420: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
8430: 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  ]journal_size_li
8440: 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  mit.  **  PRAGMA
8450: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72   [database.]jour
8460: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e  nal_size_limit=N
8470: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f  .  **.  ** Get o
8480: 72 20 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c  r set the size l
8490: 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b  imit on rollback
84a0: 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a   journal files..
84b0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
84c0: 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45  Typ_JOURNAL_SIZE
84d0: 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61  _LIMIT: {.    Pa
84e0: 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71  ger *pPager = sq
84f0: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
8500: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69  pDb->pBt);.    i
8510: 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a  64 iLimit = -2;.
8520: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
8530: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 41  {.      sqlite3A
8540: 74 6f 69 36 34 28 7a 52 69 67 68 74 2c 20 26 69  toi64(zRight, &i
8550: 4c 69 6d 69 74 2c 20 73 71 6c 69 74 65 33 53 74  Limit, sqlite3St
8560: 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 2c 20  rlen30(zRight), 
8570: 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
8580: 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d      if( iLimit<-
8590: 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b  1 ) iLimit = -1;
85a0: 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69  .    }.    iLimi
85b0: 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  t = sqlite3Pager
85c0: 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74  JournalSizeLimit
85d0: 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29  (pPager, iLimit)
85e0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  ;.    returnSing
85f0: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6a  leInt(pParse, "j
8600: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
8610: 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20  t", iLimit);.   
8620: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e   break;.  }..#en
8630: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
8640: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
8650: 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20   */..  /*.  **  
8660: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
8670: 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20  .]auto_vacuum.  
8680: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
8690: 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75  base.]auto_vacuu
86a0: 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65  m=N.  **.  ** Ge
86b0: 74 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c  t or set the val
86c0: 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ue of the databa
86d0: 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27  se 'auto-vacuum'
86e0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a   parameter..  **
86f0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 6f 6e   The value is on
8700: 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20  e of:  0 NONE 1 
8710: 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54  FULL 2 INCREMENT
8720: 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  AL.  */.#ifndef 
8730: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
8740: 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72  VACUUM.  case Pr
8750: 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55 55  agTyp_AUTO_VACUU
8760: 4d 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  M: {.    Btree *
8770: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
8780: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
8790: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  =0 );.    if( !z
87a0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
87b0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
87c0: 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63  Parse, "auto_vac
87d0: 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42 74 72  uum", sqlite3Btr
87e0: 65 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d 28  eeGetAutoVacuum(
87f0: 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65  pBt));.    }else
8800: 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75 74  {.      int eAut
8810: 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75 75  o = getAutoVacuu
8820: 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  m(zRight);.     
8830: 20 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e 3d   assert( eAuto>=
8840: 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b  0 && eAuto<=2 );
8850: 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 41  .      db->nextA
8860: 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41 75  utovac = (u8)eAu
8870: 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61 6c  to;.      /* Cal
8880: 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28  l SetAutoVacuum(
8890: 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61 6c  ) to set initial
88a0: 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ize the internal
88b0: 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20 20   auto and.      
88c0: 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66  ** incr-vacuum f
88d0: 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20 72 65  lags. This is re
88e0: 71 75 69 72 65 64 20 69 6e 20 63 61 73 65 20 74  quired in case t
88f0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20  his connection. 
8900: 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73 20       ** creates 
8910: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
8920: 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  e. It is importa
8930: 6e 74 20 74 68 61 74 20 69 74 20 69 73 20 63 72  nt that it is cr
8940: 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  eated.      ** a
8950: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
8960: 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20 20 20   capable db..   
8970: 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d     */.      rc =
8980: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
8990: 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c 20  AutoVacuum(pBt, 
89a0: 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 69 66  eAuto);.      if
89b0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
89c0: 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c 20  && (eAuto==1 || 
89d0: 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20 20  eAuto==2) ){.   
89e0: 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73 65 74       /* When set
89f0: 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f 76 61  ting the auto_va
8a00: 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69 74  cuum mode to eit
8a10: 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a 20  her "full" or . 
8a20: 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72 65         ** "incre
8a30: 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20 74  mental", write t
8a40: 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74 61  he value of meta
8a50: 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61 62  [6] in the datab
8a60: 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66  ase.        ** f
8a70: 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74  ile. Before writ
8a80: 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20  ing to meta[6], 
8a90: 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b  check that meta[
8aa0: 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20  3] indicates.   
8ab0: 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 69       ** that thi
8ac0: 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20 61  s really is an a
8ad0: 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62  uto-vacuum capab
8ae0: 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  le database..   
8af0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
8b00: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
8b10: 65 4f 70 4c 69 73 74 20 73 65 74 4d 65 74 61 36  eOpList setMeta6
8b20: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20  [] = {.         
8b30: 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
8b40: 6e 2c 20 20 20 20 30 2c 20 20 20 20 20 20 20 20  n,    0,        
8b50: 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   1,             
8b60: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20      0},    /* 0 
8b70: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f  */.          { O
8b80: 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20  P_ReadCookie,   
8b90: 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20    0,         1, 
8ba0: 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4c 41          BTREE_LA
8bb0: 52 47 45 53 54 5f 52 4f 4f 54 5f 50 41 47 45 7d  RGEST_ROOT_PAGE}
8bc0: 2c 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  ,.          { OP
8bd0: 5f 49 66 2c 20 20 20 20 20 20 20 20 20 20 20 20  _If,            
8be0: 20 31 2c 20 20 20 20 20 20 20 20 20 30 2c 20 20   1,         0,  
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
8c00: 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20  },    /* 2 */.  
8c10: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c          { OP_Hal
8c20: 74 2c 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  t,           SQL
8c30: 49 54 45 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74  ITE_OK, OE_Abort
8c40: 2c 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20  ,          0},  
8c50: 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20    /* 3 */.      
8c60: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
8c70: 2c 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20  ,        0,     
8c80: 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 20      1,          
8c90: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
8ca0: 20 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   4 */.          
8cb0: 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20  { OP_SetCookie, 
8cc0: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
8cd0: 42 54 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55  BTREE_INCR_VACUU
8ce0: 4d 2c 20 31 7d 2c 20 20 20 20 2f 2a 20 35 20 2a  M, 1},    /* 5 *
8cf0: 2f 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20  /.        };.   
8d00: 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 3b 0a       int iAddr;.
8d10: 20 20 20 20 20 20 20 20 69 41 64 64 72 20 3d 20          iAddr = 
8d20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8d30: 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
8d40: 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74  e(setMeta6), set
8d50: 4d 65 74 61 36 29 3b 0a 20 20 20 20 20 20 20 20  Meta6);.        
8d60: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
8d70: 65 50 31 28 76 2c 20 69 41 64 64 72 2c 20 69 44  eP1(v, iAddr, iD
8d80: 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  b);.        sqli
8d90: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
8da0: 76 2c 20 69 41 64 64 72 2b 31 2c 20 69 44 62 29  v, iAddr+1, iDb)
8db0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
8dc0: 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c  3VdbeChangeP2(v,
8dd0: 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64 72 2b   iAddr+2, iAddr+
8de0: 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  4);.        sqli
8df0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
8e00: 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75 74  v, iAddr+4, eAut
8e10: 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  o-1);.        sq
8e20: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
8e30: 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69 44  1(v, iAddr+5, iD
8e40: 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  b);.        sqli
8e50: 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65  te3VdbeUsesBtree
8e60: 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  (v, iDb);.      
8e70: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
8e80: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  k;.  }.#endif.. 
8e90: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
8ea0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 6e 63 72   [database.]incr
8eb0: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e  emental_vacuum(N
8ec0: 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e  ).  **.  ** Do N
8ed0: 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65 6d   steps of increm
8ee0: 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67 20  ental vacuuming 
8ef0: 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a 20  on a database.. 
8f00: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
8f10: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
8f20: 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UM.  case PragTy
8f30: 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41  p_INCREMENTAL_VA
8f40: 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20  CUUM: {.    int 
8f50: 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20  iLimit, addr;.  
8f60: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
8f70: 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e  || !sqlite3GetIn
8f80: 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c 69  t32(zRight, &iLi
8f90: 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d  mit) || iLimit<=
8fa0: 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69  0 ){.      iLimi
8fb0: 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b 0a  t = 0x7fffffff;.
8fc0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
8fd0: 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
8fe0: 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20  tion(pParse, 0, 
8ff0: 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  iDb);.    sqlite
9000: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9010: 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69  P_Integer, iLimi
9020: 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72 20  t, 1);.    addr 
9030: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
9040: 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61  Op1(v, OP_IncrVa
9050: 63 75 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20 20  cuum, iDb);.    
9060: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9070: 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  1(v, OP_ResultRo
9080: 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  w, 1);.    sqlit
9090: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
90a0: 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
90b0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
90c0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
90d0: 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b 0a  fPos, 1, addr);.
90e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
90f0: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
9100: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
9110: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
9120: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
9130: 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a  ER_PRAGMAS.  /*.
9140: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
9150: 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69  tabase.]cache_si
9160: 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  ze.  **  PRAGMA 
9170: 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65  [database.]cache
9180: 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  _size=N.  **.  *
9190: 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d  * The first form
91a0: 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72   reports the cur
91b0: 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69  rent local setti
91c0: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
91d0: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e  page cache size.
91e0: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
91f0: 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a   sets the local.
9200: 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20    ** page cache 
9210: 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20  size value.  If 
9220: 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20 74 68  N is positive th
9230: 65 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a 20  en that is the. 
9240: 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61   ** number of pa
9250: 67 65 73 20 69 6e 20 74 68 65 20 63 61 63 68 65  ges in the cache
9260: 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74  .  If N is negat
9270: 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ive, then the.  
9280: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
9290: 65 73 20 69 73 20 61 64 6a 75 73 74 65 64 20 73  es is adjusted s
92a0: 6f 20 74 68 61 74 20 74 68 65 20 63 61 63 68 65  o that the cache
92b0: 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74   uses -N kibibyt
92c0: 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72  es.  ** of memor
92d0: 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  y..  */.  case P
92e0: 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a  ragTyp_CACHE_SIZ
92f0: 45 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28  E: {.    assert(
9300: 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
9310: 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
9320: 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21   0) );.    if( !
9330: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
9340: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
9350: 70 50 61 72 73 65 2c 20 22 63 61 63 68 65 5f 73  pParse, "cache_s
9360: 69 7a 65 22 2c 20 70 44 62 2d 3e 70 53 63 68 65  ize", pDb->pSche
9370: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b  ma->cache_size);
9380: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
9390: 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c    int size = sql
93a0: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
93b0: 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63  ;.      pDb->pSc
93c0: 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65  hema->cache_size
93d0: 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73   = size;.      s
93e0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
93f0: 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74  cheSize(pDb->pBt
9400: 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  , pDb->pSchema->
9410: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20  cache_size);.   
9420: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
9430: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
9440: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
9450: 6d 6d 61 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a  mmap_size(N).  *
9460: 2a 0a 20 20 2a 2a 20 55 73 65 64 20 74 6f 20 73  *.  ** Used to s
9470: 65 74 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20  et mapping size 
9480: 6c 69 6d 69 74 2e 20 54 68 65 20 6d 61 70 70 69  limit. The mappi
9490: 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 20 69 73  ng size limit is
94a0: 0a 20 20 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69  .  ** used to li
94b0: 6d 69 74 20 74 68 65 20 61 67 67 72 65 67 61 74  mit the aggregat
94c0: 65 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65  e size of all me
94d0: 6d 6f 72 79 20 6d 61 70 70 65 64 20 72 65 67 69  mory mapped regi
94e0: 6f 6e 73 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20  ons of the.  ** 
94f0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 49  database file. I
9500: 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  f this parameter
9510: 20 69 73 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c   is set to zero,
9520: 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70   then memory map
9530: 70 69 6e 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74  ping.  ** is not
9540: 20 75 73 65 64 20 61 74 20 61 6c 6c 2e 20 20 49   used at all.  I
9550: 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c  f N is negative,
9560: 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c   then the defaul
9570: 74 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a  t memory map.  *
9580: 2a 20 6c 69 6d 69 74 20 64 65 74 65 72 6d 69 6e  * limit determin
9590: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 6f  ed by sqlite3_co
95a0: 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46  nfig(SQLITE_CONF
95b0: 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73  IG_MMAP_SIZE) is
95c0: 20 73 65 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70   set..  ** The p
95d0: 61 72 61 6d 65 74 65 72 20 4e 20 69 73 20 6d 65  arameter N is me
95e0: 61 73 75 72 65 64 20 69 6e 20 62 79 74 65 73 2e  asured in bytes.
95f0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20  .  **.  ** This 
9600: 76 61 6c 75 65 20 69 73 20 61 64 76 69 73 6f 72  value is advisor
9610: 79 2e 20 20 54 68 65 20 75 6e 64 65 72 6c 79 69  y.  The underlyi
9620: 6e 67 20 56 46 53 20 69 73 20 66 72 65 65 20 74  ng VFS is free t
9630: 6f 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a  o memory map.  *
9640: 2a 20 61 73 20 6c 69 74 74 6c 65 20 6f 72 20 61  * as little or a
9650: 73 20 6d 75 63 68 20 61 73 20 69 74 20 77 61 6e  s much as it wan
9660: 74 73 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20  ts.  Except, if 
9670: 4e 20 69 73 20 73 65 74 20 74 6f 20 30 20 74 68  N is set to 0 th
9680: 65 6e 20 74 68 65 0a 20 20 2a 2a 20 75 70 70 65  en the.  ** uppe
9690: 72 20 6c 61 79 65 72 73 20 77 69 6c 6c 20 6e 65  r layers will ne
96a0: 76 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78  ver invoke the x
96b0: 46 65 74 63 68 20 69 6e 74 65 72 66 61 63 65 73  Fetch interfaces
96c0: 20 74 6f 20 74 68 65 20 56 46 53 2e 0a 20 20 2a   to the VFS..  *
96d0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
96e0: 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20  _MMAP_SIZE: {.  
96f0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20    sqlite3_int64 
9700: 73 7a 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  sz;.#if SQLITE_M
9710: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20  AX_MMAP_SIZE>0. 
9720: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
9730: 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
9740: 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
9750: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
9760: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b  ){.      int ii;
9770: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 74  .      sqlite3At
9780: 6f 69 36 34 28 7a 52 69 67 68 74 2c 20 26 73 7a  oi64(zRight, &sz
9790: 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  , sqlite3Strlen3
97a0: 30 28 7a 52 69 67 68 74 29 2c 20 53 51 4c 49 54  0(zRight), SQLIT
97b0: 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20 20 69  E_UTF8);.      i
97c0: 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73  f( sz<0 ) sz = s
97d0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
97e0: 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20  ig.szMmap;.     
97f0: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
9800: 29 20 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73  ) db->szMmap = s
9810: 7a 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d  z;.      for(ii=
9820: 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30  db->nDb-1; ii>=0
9830: 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20  ; ii--){.       
9840: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d   if( db->aDb[ii]
9850: 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62  .pBt && (ii==iDb
9860: 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20   || pId2->n==0) 
9870: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
9880: 69 74 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70  ite3BtreeSetMmap
9890: 4c 69 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69  Limit(db->aDb[ii
98a0: 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20  ].pBt, sz);.    
98b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
98c0: 20 20 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b    }.    sz = -1;
98d0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
98e0: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
98f0: 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46  b, zDb, SQLITE_F
9900: 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20  CNTL_MMAP_SIZE, 
9910: 26 73 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20  &sz);.#else.    
9920: 73 7a 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  sz = 0;.    rc =
9930: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64   SQLITE_OK;.#end
9940: 69 66 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  if.    if( rc==S
9950: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
9960: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
9970: 74 28 70 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f  t(pParse, "mmap_
9980: 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20  size", sz);.    
9990: 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51  }else if( rc!=SQ
99a0: 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b  LITE_NOTFOUND ){
99b0: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
99c0: 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61  Err++;.      pPa
99d0: 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20  rse->rc = rc;.  
99e0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
99f0: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
9a00: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
9a10: 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  e.  **   PRAGMA 
9a20: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65  temp_store = "de
9a30: 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c  fault"|"memory"|
9a40: 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  "file".  **.  **
9a50: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
9a60: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
9a70: 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65  f the temp_store
9a80: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
9a90: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
9aa0: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
9ab0: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
9ac0: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
9ad0: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a   the default.  *
9ae0: 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  * value will be 
9af0: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
9b00: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
9b10: 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20  ase is opened.. 
9b20: 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68   **.  ** Note th
9b30: 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  at it is possibl
9b40: 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72  e for the librar
9b50: 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  y compile-time o
9b60: 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f  ptions to.  ** o
9b70: 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65 74  verride this set
9b80: 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ting.  */.  case
9b90: 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54   PragTyp_TEMP_ST
9ba0: 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ORE: {.    if( !
9bb0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
9bc0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
9bd0: 70 50 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74  pParse, "temp_st
9be0: 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73  ore", db->temp_s
9bf0: 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  tore);.    }else
9c00: 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54 65  {.      changeTe
9c10: 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65  mpStorage(pParse
9c20: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d  , zRight);.    }
9c30: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
9c40: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
9c50: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
9c60: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
9c70: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
9c80: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
9c90: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
9ca0: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
9cb0: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
9cc0: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
9cd0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
9ce0: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
9cf0: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
9d00: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
9d10: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
9d20: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 65  o be used for te
9d30: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20  mporary files.. 
9d40: 20 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61   ** Setting to a
9d50: 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76   null string rev
9d60: 65 72 74 73 20 74 6f 20 74 68 65 20 64 65 66 61  erts to the defa
9d70: 75 6c 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69  ult temporary di
9d80: 72 65 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a  rectory search..
9d90: 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72    ** If temporar
9da0: 79 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63  y directory is c
9db0: 68 61 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76  hanged, then inv
9dc0: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
9dd0: 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20  ge..  **.  */.  
9de0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
9df0: 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52  P_STORE_DIRECTOR
9e00: 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  Y: {.    if( !zR
9e10: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
9e20: 28 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64  ( sqlite3_temp_d
9e30: 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20  irectory ){.    
9e40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
9e50: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
9e60: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9e70: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
9e80: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
9e90: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
9ea0: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
9eb0: 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53  ctory", SQLITE_S
9ec0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
9ed0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9ee0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
9ef0: 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65   0, 1, 0, sqlite
9f00: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
9f10: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
9f20: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
9f30: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
9f40: 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 1);.      }.
9f50: 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64      }else{.#ifnd
9f60: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
9f70: 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  SD.      if( zRi
9f80: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
9f90: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
9fa0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
9fb0: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
9fc0: 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45  , zRight, SQLITE
9fd0: 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54  _ACCESS_READWRIT
9fe0: 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  E, &res);.      
9ff0: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
a000: 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b  _OK || res==0 ){
a010: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
a020: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
a030: 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62  e, "not a writab
a040: 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a  le directory");.
a050: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70            goto p
a060: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
a070: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
a080: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45     if( SQLITE_TE
a090: 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20  MP_STORE==0.    
a0a0: 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45     || (SQLITE_TE
a0b0: 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64  MP_STORE==1 && d
a0c0: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31  b->temp_store<=1
a0d0: 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  ).       || (SQL
a0e0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
a0f0: 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  2 && db->temp_st
a100: 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b  ore==1).      ){
a110: 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64  .        invalid
a120: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70  ateTempStorage(p
a130: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a  Parse);.      }.
a140: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
a150: 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  ee(sqlite3_temp_
a160: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
a170: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
a180: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
a190: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
a1a0: 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  y = sqlite3_mpri
a1b0: 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74  ntf("%s", zRight
a1c0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
a1d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
a1e0: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d  temp_directory =
a1f0: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   0;.      }.#end
a200: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
a210: 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20  T_WSD */.    }. 
a220: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
a230: 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
a240: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
a250: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
a260: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
a270: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
a280: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
a290: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
a2a0: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
a2b0: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
a2c0: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
a2d0: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
a2e0: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
a2f0: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
a300: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
a310: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
a320: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
a330: 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61  tabase files tha
a340: 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63  t.  ** were spec
a350: 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65 6c  ified with a rel
a360: 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20  ative pathname. 
a370: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
a380: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
a390: 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65  s.  ** to the de
a3a0: 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20 64  fault database d
a3b0: 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20  irectory, which 
a3c0: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
a3d0: 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69 74  es specified wit
a3e0: 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76  h.  ** a relativ
a3f0: 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62  e path will prob
a400: 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e  ably be based on
a410: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69 72   the current dir
a420: 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20  ectory for the. 
a430: 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61   ** process.  Da
a440: 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65 63  tabase file spec
a450: 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61 62  ified with an ab
a460: 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65 20  solute path are 
a470: 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a  not impacted.  *
a480: 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69 6e  * by this settin
a490: 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  g, regardless of
a4a0: 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a   its value..  **
a4b0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
a4c0: 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f  gTyp_DATA_STORE_
a4d0: 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20  DIRECTORY: {.   
a4e0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
a4f0: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
a500: 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79  3_data_directory
a510: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
a520: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
a530: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  s(v, 1);.       
a540: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
a550: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
a560: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20  NAME_NAME, .    
a570: 20 20 20 20 20 20 20 20 22 64 61 74 61 5f 73 74          "data_st
a580: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20  ore_directory", 
a590: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
a5a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a5b0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
a5c0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
a5d0: 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64  , sqlite3_data_d
a5e0: 69 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20  irectory, 0);.  
a5f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a600: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
a610: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
a620: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
a630: 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  e{.#ifndef SQLIT
a640: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20  E_OMIT_WSD.     
a650: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
a660: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65  {.        int re
a670: 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  s;.        rc = 
a680: 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28  sqlite3OsAccess(
a690: 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74  db->pVfs, zRight
a6a0: 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f  , SQLITE_ACCESS_
a6b0: 52 45 41 44 57 52 49 54 45 2c 20 26 72 65 73 29  READWRITE, &res)
a6c0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
a6d0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  !=SQLITE_OK || r
a6e0: 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
a6f0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
a700: 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20  sg(pParse, "not 
a710: 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63  a writable direc
a720: 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20  tory");.        
a730: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
a740: 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
a750: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
a760: 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f  e3_free(sqlite3_
a770: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b  data_directory);
a780: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
a790: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
a7a0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
a7b0: 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33  ectory = sqlite3
a7c0: 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a  _mprintf("%s", z
a7d0: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65  Right);.      }e
a7e0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
a7f0: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
a800: 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  ory = 0;.      }
a810: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
a820: 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20  E_OMIT_WSD */.  
a830: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
a840: 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53   }.#endif..#if S
a850: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
a860: 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a  KING_STYLE.  /*.
a870: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
a880: 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72  atabase.]lock_pr
a890: 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20  oxy_file.  **   
a8a0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
a8b0: 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  .]lock_proxy_fil
a8c0: 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f  e = ":auto:"|"lo
a8d0: 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20  ck_file_path".  
a8e0: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
a8f0: 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20  r set the value 
a900: 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78  of the lock_prox
a910: 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68  y_file flag.  Ch
a920: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
a930: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
a940: 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65  cific file to be
a950: 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61   used for databa
a960: 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e  se access locks.
a970: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
a980: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
a990: 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20  ROXY_FILE: {.   
a9a0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
a9b0: 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61        Pager *pPa
a9c0: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
a9d0: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
a9e0: 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70  );.      char *p
a9f0: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d  roxy_file_path =
aa00: 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c   NULL;.      sql
aa10: 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65  ite3_file *pFile
aa20: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
aa30: 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20  ile(pPager);.   
aa40: 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65     sqlite3OsFile
aa50: 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c  ControlHint(pFil
aa60: 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f  e, SQLITE_GET_LO
aa70: 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20  CKPROXYFILE, .  
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa90: 20 20 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f           &proxy_
aaa0: 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20  file_path);.    
aab0: 20 20 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f    .      if( pro
aac0: 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a  xy_file_path ){.
aad0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
aae0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
aaf0: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
ab00: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
ab10: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
ab20: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
ab30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab40: 20 20 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78        "lock_prox
ab50: 79 5f 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f  y_file", SQLITE_
ab60: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
ab70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ab80: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
ab90: 2c 20 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79  , 0, 1, 0, proxy
aba0: 5f 66 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a  _file_path, 0);.
abb0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
abc0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
abd0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
abe0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
abf0: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
ac00: 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74   *pPager = sqlit
ac10: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
ac20: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71  ->pBt);.      sq
ac30: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c  lite3_file *pFil
ac40: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
ac50: 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
ac60: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
ac70: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
ac80: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d   ){.        res=
ac90: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
aca0: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
acb0: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
acc0: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 7a 52 69 67              zRig
acf0: 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  ht);.      } els
ad00: 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d  e {.        res=
ad10: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
ad20: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
ad30: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
ad40: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
ad50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c              NULL
ad70: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
ad80: 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45   if( res!=SQLITE
ad90: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73  _OK ){.        s
ada0: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
adb0: 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74  Parse, "failed t
adc0: 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79  o set lock proxy
add0: 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20   file");.       
ade0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
adf0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
ae00: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
ae10: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ae20: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
ae30: 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20  TYLE */      .  
ae40: 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50    .  /*.  **   P
ae50: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
ae60: 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a  ]synchronous.  *
ae70: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
ae80: 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75  base.]synchronou
ae90: 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c  s=OFF|ON|NORMAL|
aea0: 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  FULL.  **.  ** R
aeb0: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
aec0: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
aed0: 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  the synchronous 
aee0: 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a  flag.  Changing.
aef0: 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76    ** the local v
af00: 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61  alue does not ma
af10: 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ke changes to th
af20: 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20  e disk file and 
af30: 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74  the.  ** default
af40: 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72   value will be r
af50: 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74  estored the next
af60: 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61   time the databa
af70: 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65  se is.  ** opene
af80: 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  d..  */.  case P
af90: 72 61 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f  ragTyp_SYNCHRONO
afa0: 55 53 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a  US: {.    if( !z
afb0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
afc0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
afd0: 50 61 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e  Parse, "synchron
afe0: 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74  ous", pDb->safet
aff0: 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20  y_level-1);.    
b000: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28  }else{.      if(
b010: 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
b020: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
b030: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
b040: 73 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  se, .           
b050: 20 22 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d   "Safety level m
b060: 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65  ay not be change
b070: 64 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73  d inside a trans
b080: 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20  action");.      
b090: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
b0a0: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
b0b0: 20 3d 20 67 65 74 53 61 66 65 74 79 4c 65 76 65   = getSafetyLeve
b0c0: 6c 28 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31 3b  l(zRight,0,1)+1;
b0d0: 0a 20 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50  .        setAllP
b0e0: 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20  agerFlags(db);. 
b0f0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
b100: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
b110: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
b120: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  T_PAGER_PRAGMAS 
b130: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
b140: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
b150: 47 4d 41 53 0a 20 20 63 61 73 65 20 50 72 61 67  GMAS.  case Prag
b160: 54 79 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20  Typ_FLAG: {.    
b170: 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b  if( zRight==0 ){
b180: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
b190: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 61  gleInt(pParse, a
b1a0: 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d  PragmaNames[mid]
b1b0: 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  .zName,.        
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 62               (db
b1d0: 2d 3e 66 6c 61 67 73 20 26 20 61 50 72 61 67 6d  ->flags & aPragm
b1e0: 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67  aNames[mid].iArg
b1f0: 29 21 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )!=0 );.    }els
b200: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73  e{.      int mas
b210: 6b 20 3d 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  k = aPragmaNames
b220: 5b 6d 69 64 5d 2e 69 41 72 67 3b 20 20 20 20 2f  [mid].iArg;    /
b230: 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74  * Mask of bits t
b240: 6f 20 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20  o set or clear. 
b250: 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  */.      if( db-
b260: 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
b270: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72  {.        /* For
b280: 65 69 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74  eign key support
b290: 20 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62   may not be enab
b2a0: 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20  led or disabled 
b2b0: 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20  while not.      
b2c0: 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d    ** in auto-com
b2d0: 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20  mit mode.  */.  
b2e0: 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28        mask &= ~(
b2f0: 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65  SQLITE_ForeignKe
b300: 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ys);.      }..  
b310: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
b320: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
b330: 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  , 0) ){.        
b340: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73  db->flags |= mas
b350: 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  k;.      }else{.
b360: 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
b370: 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20  s &= ~mask;.    
b380: 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51      if( mask==SQ
b390: 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 20  LITE_DeferFKs ) 
b3a0: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
b3b0: 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  Cons = 0;.      
b3c0: 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79  }..      /* Many
b3d0: 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70 72 61   of the flag-pra
b3e0: 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68 65 20  gmas modify the 
b3f0: 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20 62  code generated b
b400: 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20 20 20  y the SQL .     
b410: 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65 67   ** compiler (eg
b420: 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29  . count_changes)
b430: 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f  . So add an opco
b440: 64 65 20 74 6f 20 65 78 70 69 72 65 20 61 6c 6c  de to expire all
b450: 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c  .      ** compil
b460: 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
b470: 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79 69 6e  s after modifyin
b480: 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c 75 65  g a pragma value
b490: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
b4a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b4b0: 70 32 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 2c  p2(v, OP_Expire,
b4c0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 65   0, 0);.      se
b4d0: 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64  tAllPagerFlags(d
b4e0: 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  b);.    }.    br
b4f0: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  eak;.  }.#endif 
b500: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  /* SQLITE_OMIT_F
b510: 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  LAG_PRAGMAS */..
b520: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
b530: 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d  MIT_SCHEMA_PRAGM
b540: 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AS.  /*.  **   P
b550: 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f  RAGMA table_info
b560: 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20  (<table>).  **. 
b570: 20 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 69 6e   ** Return a sin
b580: 67 6c 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68  gle row for each
b590: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e   column of the n
b5a0: 61 6d 65 64 20 74 61 62 6c 65 2e 20 54 68 65 20  amed table. The 
b5b0: 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20  columns of.  ** 
b5c0: 74 68 65 20 72 65 74 75 72 6e 65 64 20 64 61 74  the returned dat
b5d0: 61 20 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a  a set are:.  **.
b5e0: 20 20 2a 2a 20 63 69 64 3a 20 20 20 20 20 20 20    ** cid:       
b5f0: 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62   Column id (numb
b600: 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  ered from left t
b610: 6f 20 72 69 67 68 74 2c 20 73 74 61 72 74 69 6e  o right, startin
b620: 67 20 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d  g at 0).  ** nam
b630: 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  e:       Column 
b640: 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20  name.  ** type: 
b650: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63        Column dec
b660: 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20  laration type.. 
b670: 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20   ** notnull:    
b680: 54 72 75 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c  True if 'NOT NUL
b690: 4c 27 20 69 73 20 70 61 72 74 20 6f 66 20 63 6f  L' is part of co
b6a0: 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e  lumn declaration
b6b0: 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65  .  ** dflt_value
b6c0: 3a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  : The default va
b6d0: 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  lue for the colu
b6e0: 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f  mn, if any..  */
b6f0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
b700: 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69 66 28 20  TABLE_INFO: if( 
b710: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 54 61  zRight ){.    Ta
b720: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70  ble *pTab;.    p
b730: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
b740: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
b750: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
b760: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 69   pTab ){.      i
b770: 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69  nt i, k;.      i
b780: 6e 74 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a  nt nHidden = 0;.
b790: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43        Column *pC
b7a0: 6f 6c 3b 0a 20 20 20 20 20 20 49 6e 64 65 78 20  ol;.      Index 
b7b0: 2a 70 50 6b 3b 0a 20 20 20 20 20 20 66 6f 72 28  *pPk;.      for(
b7c0: 70 50 6b 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  pPk=pTab->pIndex
b7d0: 3b 20 70 50 6b 20 26 26 20 70 50 6b 2d 3e 61 75  ; pPk && pPk->au
b7e0: 74 6f 49 6e 64 65 78 21 3d 32 3b 20 70 50 6b 3d  toIndex!=2; pPk=
b7f0: 70 50 6b 2d 3e 70 4e 65 78 74 29 7b 7d 0a 20 20  pPk->pNext){}.  
b800: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
b810: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29 3b  etNumCols(v, 6);
b820: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
b830: 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73  Mem = 6;.      s
b840: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
b850: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
b860: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
b870: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
b880: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
b890: 41 4d 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49  AME, "cid", SQLI
b8a0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
b8b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
b8c0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
b8d0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d  LNAME_NAME, "nam
b8e0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
b8f0: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
b900: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
b910: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
b920: 4d 45 2c 20 22 74 79 70 65 22 2c 20 53 51 4c 49  ME, "type", SQLI
b930: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
b940: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
b950: 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f  ColName(v, 3, CO
b960: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 6f 74  LNAME_NAME, "not
b970: 6e 75 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54  null", SQLITE_ST
b980: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
b990: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
b9a0: 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45  me(v, 4, COLNAME
b9b0: 5f 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76 61 6c  _NAME, "dflt_val
b9c0: 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ue", SQLITE_STAT
b9d0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
b9e0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
b9f0: 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 5, COLNAME_N
ba00: 41 4d 45 2c 20 22 70 6b 22 2c 20 53 51 4c 49 54  AME, "pk", SQLIT
ba10: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
ba20: 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
ba30: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73  olumnNames(pPars
ba40: 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20  e, pTab);.      
ba50: 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54  for(i=0, pCol=pT
ba60: 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62  ab->aCol; i<pTab
ba70: 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f  ->nCol; i++, pCo
ba80: 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66  l++){.        if
ba90: 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  ( IsHiddenColumn
baa0: 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20  (pCol) ){.      
bab0: 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20      nHidden++;. 
bac0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
bad0: 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
bae0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
baf0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
bb00: 65 67 65 72 2c 20 69 2d 6e 48 69 64 64 65 6e 2c  eger, i-nHidden,
bb10: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
bb20: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
bb30: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
bb40: 20 32 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e 61   2, 0, pCol->zNa
bb50: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
bb60: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bb70: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
bb80: 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20   0, 3, 0,.      
bb90: 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70 65       pCol->zType
bba0: 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a   ? pCol->zType :
bbb0: 20 22 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20   "", 0);.       
bbc0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
bbd0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
bbe0: 2c 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c  , (pCol->notNull
bbf0: 20 3f 20 31 20 3a 20 30 29 2c 20 34 29 3b 0a 20   ? 1 : 0), 4);. 
bc00: 20 20 20 20 20 20 20 69 66 28 20 70 43 6f 6c 2d         if( pCol-
bc10: 3e 7a 44 66 6c 74 20 29 7b 0a 20 20 20 20 20 20  >zDflt ){.      
bc20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
bc30: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
bc40: 6e 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20 28 63  ng8, 0, 5, 0, (c
bc50: 68 61 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66 6c 74  har*)pCol->zDflt
bc60: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  , 0);.        }e
bc70: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73  lse{.          s
bc80: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
bc90: 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20  (v, OP_Null, 0, 
bca0: 35 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  5);.        }.  
bcb0: 20 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d        if( (pCol-
bcc0: 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
bcd0: 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20  LAG_PRIMKEY)==0 
bce0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d  ){.          k =
bcf0: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   0;.        }els
bd00: 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a  e if( pPk==0 ){.
bd10: 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b            k = 1;
bd20: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
bd30: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d            for(k=
bd40: 31 3b 20 41 4c 57 41 59 53 28 6b 3c 3d 70 54 61  1; ALWAYS(k<=pTa
bd50: 62 2d 3e 6e 43 6f 6c 29 20 26 26 20 70 50 6b 2d  b->nCol) && pPk-
bd60: 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d  >aiColumn[k-1]!=
bd70: 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20  i; k++){}.      
bd80: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
bd90: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bda0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6b 2c 20   OP_Integer, k, 
bdb0: 36 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  6);.        sqli
bdc0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bdd0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
bde0: 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 6);.      }.  
bdf0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
be00: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
be10: 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 49 6e  _STATS: {.    In
be20: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 48  dex *pIdx;.    H
be30: 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 20 20  ashElem *i;.    
be40: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
be50: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
be60: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
be70: 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20  mCols(v, 4);.   
be80: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
be90: 34 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  4;.    sqlite3Co
bea0: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
beb0: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
bec0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
bed0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
bee0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c  NAME_NAME, "tabl
bef0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
bf00: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
bf10: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
bf20: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
bf30: 2c 20 22 69 6e 64 65 78 22 2c 20 53 51 4c 49 54  , "index", SQLIT
bf40: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
bf50: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
bf60: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
bf70: 4d 45 5f 4e 41 4d 45 2c 20 22 77 69 64 74 68 22  ME_NAME, "width"
bf80: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
bf90: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
bfa0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33  eSetColName(v, 3
bfb0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
bfc0: 22 68 65 69 67 68 74 22 2c 20 53 51 4c 49 54 45  "height", SQLITE
bfd0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f  _STATIC);.    fo
bfe0: 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(i=sqliteHashFi
bff0: 72 73 74 28 26 70 44 62 2d 3e 70 53 63 68 65 6d  rst(&pDb->pSchem
c000: 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b 20  a->tblHash); i; 
c010: 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  i=sqliteHashNext
c020: 28 69 29 29 7b 0a 20 20 20 20 20 20 54 61 62 6c  (i)){.      Tabl
c030: 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
c040: 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20  HashData(i);.   
c050: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c060: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
c070: 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70 54 61  g8, 0, 1, 0, pTa
c080: 62 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  b->zName, 0);.  
c090: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c0a0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c  ddOp2(v, OP_Null
c0b0: 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20 20 20 73  , 0, 2);.      s
c0c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c0d0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 0a  (v, OP_Integer,.
c0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0f0: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
c100: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
c110: 6e 74 28 70 54 61 62 2d 3e 73 7a 54 61 62 52 6f  nt(pTab->szTabRo
c120: 77 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 73 71  w), 3);.      sq
c130: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c140: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 28  v, OP_Integer, (
c150: 69 6e 74 29 70 54 61 62 2d 3e 6e 52 6f 77 45 73  int)pTab->nRowEs
c160: 74 2c 20 34 29 3b 0a 20 20 20 20 20 20 73 71 6c  t, 4);.      sql
c170: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c180: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
c190: 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 66 6f 72  1, 4);.      for
c1a0: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
c1b0: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
c1c0: 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  Idx->pNext){.   
c1d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c1e0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
c1f0: 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70  ing8, 0, 2, 0, p
c200: 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  Idx->zName, 0);.
c210: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c220: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c230: 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20 20 20  Integer,.       
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c250: 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74        (int)sqlit
c260: 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 49  e3LogEstToInt(pI
c270: 64 78 2d 3e 73 7a 49 64 78 52 6f 77 29 2c 20 33  dx->szIdxRow), 3
c280: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c290: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c2a0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 28 69 6e 74  OP_Integer, (int
c2b0: 29 70 49 64 78 2d 3e 61 69 52 6f 77 45 73 74 5b  )pIdx->aiRowEst[
c2c0: 30 5d 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20  0], 4);.        
c2d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c2e0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
c2f0: 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20  w, 1, 4);.      
c300: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
c310: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
c320: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a  gTyp_INDEX_INFO:
c330: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
c340: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
c350: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
c360: 0a 20 20 20 20 70 49 64 78 20 3d 20 73 71 6c 69  .    pIdx = sqli
c370: 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62 2c  te3FindIndex(db,
c380: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
c390: 20 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a 20     if( pIdx ){. 
c3a0: 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
c3b0: 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e 70    pTab = pIdx->p
c3c0: 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c  Table;.      sql
c3d0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
c3e0: 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 20 20  ls(v, 3);.      
c3f0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33  pParse->nMem = 3
c400: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43  ;.      sqlite3C
c410: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
c420: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
c430: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c440: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
c450: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
c460: 65 71 6e 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54  eqno", SQLITE_ST
c470: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
c480: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c490: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
c4a0: 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20 53 51  _NAME, "cid", SQ
c4b0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
c4c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c4d0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
c4e0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
c4f0: 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ame", SQLITE_STA
c500: 54 49 43 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  TIC);.      for(
c510: 69 3d 30 3b 20 69 3c 70 49 64 78 2d 3e 6e 43 6f  i=0; i<pIdx->nCo
c520: 6c 75 6d 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  lumn; i++){.    
c530: 20 20 20 20 69 6e 74 20 63 6e 75 6d 20 3d 20 70      int cnum = p
c540: 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d  Idx->aiColumn[i]
c550: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
c560: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c570: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29  P_Integer, i, 1)
c580: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
c590: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c5a0: 50 5f 49 6e 74 65 67 65 72 2c 20 63 6e 75 6d 2c  P_Integer, cnum,
c5b0: 20 32 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73   2);.        ass
c5c0: 65 72 74 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 3e  ert( pTab->nCol>
c5d0: 63 6e 75 6d 20 29 3b 0a 20 20 20 20 20 20 20 20  cnum );.        
c5e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c5f0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
c600: 20 30 2c 20 33 2c 20 30 2c 20 70 54 61 62 2d 3e   0, 3, 0, pTab->
c610: 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65  aCol[cnum].zName
c620: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
c630: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c640: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
c650: 20 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 3);.      }.
c660: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
c670: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
c680: 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69  yp_INDEX_LIST: i
c690: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
c6a0: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
c6b0: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
c6c0: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70 54     int i;.    pT
c6d0: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
c6e0: 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74  Table(db, zRight
c6f0: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
c700: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20  pTab ){.      v 
c710: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
c720: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
c730: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
c740: 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20  mCols(v, 3);.   
c750: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
c760: 3d 20 33 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  = 3;.      sqlit
c770: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
c780: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
c790: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c7a0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
c7b0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
c7c0: 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53   "seq", SQLITE_S
c7d0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
c7e0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
c7f0: 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
c800: 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20  E_NAME, "name", 
c810: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
c820: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c830: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
c840: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
c850: 22 75 6e 69 71 75 65 22 2c 20 53 51 4c 49 54 45  "unique", SQLITE
c860: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
c870: 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70  for(pIdx=pTab->p
c880: 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49 64 78  Index, i=0; pIdx
c890: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
c8a0: 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, i++){.      
c8b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c8c0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c8d0: 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20  r, i, 1);.      
c8e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c8f0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
c900: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64 78  8, 0, 2, 0, pIdx
c910: 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ->zName, 0);.   
c920: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c930: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c940: 65 67 65 72 2c 20 70 49 64 78 2d 3e 6f 6e 45 72  eger, pIdx->onEr
c950: 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 2c 20 33 29  ror!=OE_None, 3)
c960: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
c970: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c980: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
c990: 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  3);.      }.    
c9a0: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  }.  }.  break;..
c9b0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44    case PragTyp_D
c9c0: 41 54 41 42 41 53 45 5f 4c 49 53 54 3a 20 7b 0a  ATABASE_LIST: {.
c9d0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73      int i;.    s
c9e0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
c9f0: 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20  Cols(v, 3);.    
ca00: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33  pParse->nMem = 3
ca10: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
ca20: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
ca30: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
ca40: 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54  "seq", SQLITE_ST
ca50: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
ca60: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
ca70: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
ca80: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
ca90: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
caa0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
cab0: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
cac0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 69 6c 65  NAME_NAME, "file
cad0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
cae0: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  );.    for(i=0; 
caf0: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
cb00: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
cb10: 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63  Db[i].pBt==0 ) c
cb20: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 61  ontinue;.      a
cb30: 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69  ssert( db->aDb[i
cb40: 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20  ].zName!=0 );.  
cb50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cb60: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
cb70: 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20  ger, i, 1);.    
cb80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cb90: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
cba0: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 64 62 2d 3e  8, 0, 2, 0, db->
cbb0: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 30 29  aDb[i].zName, 0)
cbc0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
cbd0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
cbe0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
cbf0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  ,.           sql
cc00: 69 74 65 33 42 74 72 65 65 47 65 74 46 69 6c 65  ite3BtreeGetFile
cc10: 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e  name(db->aDb[i].
cc20: 70 42 74 29 2c 20 30 29 3b 0a 20 20 20 20 20 20  pBt), 0);.      
cc30: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cc40: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
cc50: 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a  w, 1, 3);.    }.
cc60: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
cc70: 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4c  case PragTyp_COL
cc80: 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20  LATION_LIST: {. 
cc90: 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20     int i = 0;.  
cca0: 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20    HashElem *p;. 
ccb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
ccc0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a  tNumCols(v, 2);.
ccd0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
cce0: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
ccf0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
cd00: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
cd10: 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54  ME, "seq", SQLIT
cd20: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
cd30: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
cd40: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
cd50: 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c  ME_NAME, "name",
cd60: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
cd70: 0a 20 20 20 20 66 6f 72 28 70 3d 73 71 6c 69 74  .    for(p=sqlit
cd80: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
cd90: 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b 20 70 3d  aCollSeq); p; p=
cda0: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 70  sqliteHashNext(p
cdb0: 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c 6c 53 65  )){.      CollSe
cdc0: 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c  q *pColl = (Coll
cdd0: 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61 73 68  Seq *)sqliteHash
cde0: 44 61 74 61 28 70 29 3b 0a 20 20 20 20 20 20 73  Data(p);.      s
cdf0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ce00: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
ce10: 69 2b 2b 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  i++, 1);.      s
ce20: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
ce30: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
ce40: 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 6c 2d 3e  0, 2, 0, pColl->
ce50: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
ce60: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ce70: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
ce80: 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d  ow, 1, 2);.    }
ce90: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
cea0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
ceb0: 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d  MIT_SCHEMA_PRAGM
cec0: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
ced0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
cee0: 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20 50 72  GN_KEY.  case Pr
cef0: 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45  agTyp_FOREIGN_KE
cf00: 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67  Y_LIST: if( zRig
cf10: 68 74 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a  ht ){.    FKey *
cf20: 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  pFK;.    Table *
cf30: 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d  pTab;.    pTab =
cf40: 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
cf50: 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e(db, zRight, zD
cf60: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  b);.    if( pTab
cf70: 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71   ){.      v = sq
cf80: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
cf90: 72 73 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20  rse);.      pFK 
cfa0: 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20  = pTab->pFKey;. 
cfb0: 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a       if( pFK ){.
cfc0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20          int i = 
cfd0: 30 3b 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0; .        sqli
cfe0: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
cff0: 73 28 76 2c 20 38 29 3b 0a 20 20 20 20 20 20 20  s(v, 8);.       
d000: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
d010: 38 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  8;.        sqlit
d020: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
d030: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
d040: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d050: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
d060: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
d070: 45 2c 20 22 69 64 22 2c 20 53 51 4c 49 54 45 5f  E, "id", SQLITE_
d080: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
d090: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
d0a0: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
d0b0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22  NAME_NAME, "seq"
d0c0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d0d0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d0e0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d0f0: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
d100: 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c  ME, "table", SQL
d110: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d120: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d130: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c  SetColName(v, 3,
d140: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d150: 66 72 6f 6d 22 2c 20 53 51 4c 49 54 45 5f 53 54  from", SQLITE_ST
d160: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
d170: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
d180: 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41  Name(v, 4, COLNA
d190: 4d 45 5f 4e 41 4d 45 2c 20 22 74 6f 22 2c 20 53  ME_NAME, "to", S
d1a0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
d1b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d1c0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
d1d0: 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  5, COLNAME_NAME,
d1e0: 20 22 6f 6e 5f 75 70 64 61 74 65 22 2c 20 53 51   "on_update", SQ
d1f0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
d200: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d210: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 36  eSetColName(v, 6
d220: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
d230: 22 6f 6e 5f 64 65 6c 65 74 65 22 2c 20 53 51 4c  "on_delete", SQL
d240: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d250: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d260: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 37 2c  SetColName(v, 7,
d270: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d280: 6d 61 74 63 68 22 2c 20 53 51 4c 49 54 45 5f 53  match", SQLITE_S
d290: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
d2a0: 77 68 69 6c 65 28 70 46 4b 29 7b 0a 20 20 20 20  while(pFK){.    
d2b0: 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20        int j;.   
d2c0: 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20         for(j=0; 
d2d0: 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b  j<pFK->nCol; j++
d2e0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ){.            c
d2f0: 68 61 72 20 2a 7a 43 6f 6c 20 3d 20 70 46 4b 2d  har *zCol = pFK-
d300: 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 3b 0a 20  >aCol[j].zCol;. 
d310: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20             char 
d320: 2a 7a 4f 6e 44 65 6c 65 74 65 20 3d 20 28 63 68  *zOnDelete = (ch
d330: 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28  ar *)actionName(
d340: 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d 29  pFK->aAction[0])
d350: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68  ;.            ch
d360: 61 72 20 2a 7a 4f 6e 55 70 64 61 74 65 20 3d 20  ar *zOnUpdate = 
d370: 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61  (char *)actionNa
d380: 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b  me(pFK->aAction[
d390: 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  1]);.           
d3a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d3b0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
d3c0: 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , i, 1);.       
d3d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d3e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
d3f0: 65 67 65 72 2c 20 6a 2c 20 32 29 3b 0a 20 20 20  eger, j, 2);.   
d400: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d410: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
d420: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
d430: 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 30 29 3b  0, pFK->zTo, 0);
d440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d450: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
d460: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
d470: 20 34 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   4, 0,.         
d480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d490: 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b       pTab->aCol[
d4a0: 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72  pFK->aCol[j].iFr
d4b0: 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  om].zName, 0);. 
d4c0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d4d0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
d4e0: 7a 43 6f 6c 20 3f 20 4f 50 5f 53 74 72 69 6e 67  zCol ? OP_String
d4f0: 38 20 3a 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20  8 : OP_Null, 0, 
d500: 35 2c 20 30 2c 20 7a 43 6f 6c 2c 20 30 29 3b 0a  5, 0, zCol, 0);.
d510: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d520: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
d530: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
d540: 36 2c 20 30 2c 20 7a 4f 6e 55 70 64 61 74 65 2c  6, 0, zOnUpdate,
d550: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
d560: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d570: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
d580: 2c 20 30 2c 20 37 2c 20 30 2c 20 7a 4f 6e 44 65  , 0, 7, 0, zOnDe
d590: 6c 65 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  lete, 0);.      
d5a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d5b0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
d5c0: 72 69 6e 67 38 2c 20 30 2c 20 38 2c 20 30 2c 20  ring8, 0, 8, 0, 
d5d0: 22 4e 4f 4e 45 22 2c 20 30 29 3b 0a 20 20 20 20  "NONE", 0);.    
d5e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d5f0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d600: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 38 29  ResultRow, 1, 8)
d610: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
d620: 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20          ++i;.   
d630: 20 20 20 20 20 20 20 70 46 4b 20 3d 20 70 46 4b         pFK = pFK
d640: 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a 20 20 20  ->pNextFrom;.   
d650: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
d660: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
d670: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  ;.#endif /* !def
d680: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
d690: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f  _FOREIGN_KEY) */
d6a0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
d6b0: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
d6c0: 59 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  Y.#ifndef SQLITE
d6d0: 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20  _OMIT_TRIGGER.  
d6e0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52  case PragTyp_FOR
d6f0: 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 3a 20  EIGN_KEY_CHECK: 
d700: 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b  {.    FKey *pFK;
d710: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d720: 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  A foreign key co
d730: 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 20 20  nstraint */.    
d740: 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
d750: 20 20 20 20 20 20 20 2f 2a 20 43 68 69 6c 64 20         /* Child 
d760: 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 20 22 52  table contain "R
d770: 45 46 45 52 45 4e 43 45 53 22 20 6b 65 79 77 6f  EFERENCES" keywo
d780: 72 64 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  rd */.    Table 
d790: 2a 70 50 61 72 65 6e 74 3b 20 20 20 20 20 20 20  *pParent;       
d7a0: 20 2f 2a 20 50 61 72 65 6e 74 20 74 61 62 6c 65   /* Parent table
d7b0: 20 74 68 61 74 20 63 68 69 6c 64 20 70 6f 69 6e   that child poin
d7c0: 74 73 20 74 6f 20 2a 2f 0a 20 20 20 20 49 6e 64  ts to */.    Ind
d7d0: 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20 20 20  ex *pIdx;       
d7e0: 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
d7f0: 74 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65  the parent table
d800: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20   */.    int i;  
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d820: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20  * Loop counter: 
d830: 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 6e 75 6d   Foreign key num
d840: 62 65 72 20 66 6f 72 20 70 54 61 62 20 2a 2f 0a  ber for pTab */.
d850: 20 20 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20      int j;      
d860: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
d870: 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 69 65  op counter:  Fie
d880: 6c 64 20 6f 66 20 74 68 65 20 66 6f 72 65 69 67  ld of the foreig
d890: 6e 20 6b 65 79 20 2a 2f 0a 20 20 20 20 48 61 73  n key */.    Has
d8a0: 68 45 6c 65 6d 20 2a 6b 3b 20 20 20 20 20 20 20  hElem *k;       
d8b0: 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
d8c0: 74 65 72 3a 20 20 4e 65 78 74 20 74 61 62 6c 65  ter:  Next table
d8d0: 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20   in schema */.  
d8e0: 20 20 69 6e 74 20 78 3b 20 20 20 20 20 20 20 20    int x;        
d8f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73 75           /* resu
d900: 6c 74 20 76 61 72 69 61 62 6c 65 20 2a 2f 0a 20  lt variable */. 
d910: 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74     int regResult
d920: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 33 20 72  ;         /* 3 r
d930: 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64  egisters to hold
d940: 20 61 20 72 65 73 75 6c 74 20 72 6f 77 20 2a 2f   a result row */
d950: 0a 20 20 20 20 69 6e 74 20 72 65 67 4b 65 79 3b  .    int regKey;
d960: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
d970: 65 67 69 73 74 65 72 20 74 6f 20 68 6f 6c 64 20  egister to hold 
d980: 6b 65 79 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  key for checking
d990: 20 74 68 65 20 46 4b 20 2a 2f 0a 20 20 20 20 69   the FK */.    i
d9a0: 6e 74 20 72 65 67 52 6f 77 3b 20 20 20 20 20 20  nt regRow;      
d9b0: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
d9c0: 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 6f 77  rs to hold a row
d9d0: 20 66 72 6f 6d 20 70 54 61 62 20 2a 2f 0a 20 20   from pTab */.  
d9e0: 20 20 69 6e 74 20 61 64 64 72 54 6f 70 3b 20 20    int addrTop;  
d9f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 70 20           /* Top 
da00: 6f 66 20 61 20 6c 6f 6f 70 20 63 68 65 63 6b 69  of a loop checki
da10: 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ng foreign keys 
da20: 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 4f  */.    int addrO
da30: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
da40: 20 4a 75 6d 70 20 68 65 72 65 20 69 66 20 74 68   Jump here if th
da50: 65 20 6b 65 79 20 69 73 20 4f 4b 20 2a 2f 0a 20  e key is OK */. 
da60: 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 73 3b 20     int *aiCols; 
da70: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 68 69            /* chi
da80: 6c 64 20 74 6f 20 70 61 72 65 6e 74 20 63 6f 6c  ld to parent col
da90: 75 6d 6e 20 6d 61 70 70 69 6e 67 20 2a 2f 0a 0a  umn mapping */..
daa0: 20 20 20 20 72 65 67 52 65 73 75 6c 74 20 3d 20      regResult = 
dab0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a  pParse->nMem+1;.
dac0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
dad0: 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b 65   += 4;.    regKe
dae0: 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  y = ++pParse->nM
daf0: 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77 20 3d  em;.    regRow =
db00: 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b   ++pParse->nMem;
db10: 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33  .    v = sqlite3
db20: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
db30: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
db40: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29  SetNumCols(v, 4)
db50: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
db60: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
db70: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
db80: 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f  "table", SQLITE_
db90: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
dba0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
dbb0: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
dbc0: 5f 4e 41 4d 45 2c 20 22 72 6f 77 69 64 22 2c 20  _NAME, "rowid", 
dbd0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
dbe0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
dbf0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
dc00: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70  COLNAME_NAME, "p
dc10: 61 72 65 6e 74 22 2c 20 53 51 4c 49 54 45 5f 53  arent", SQLITE_S
dc20: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
dc30: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
dc40: 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 3, COLNAME_
dc50: 4e 41 4d 45 2c 20 22 66 6b 69 64 22 2c 20 53 51  NAME, "fkid", SQ
dc60: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
dc70: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
dc80: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
dc90: 2c 20 69 44 62 29 3b 0a 20 20 20 20 6b 20 3d 20  , iDb);.    k = 
dca0: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
dcb0: 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53  &db->aDb[iDb].pS
dcc0: 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b  chema->tblHash);
dcd0: 0a 20 20 20 20 77 68 69 6c 65 28 20 6b 20 29 7b  .    while( k ){
dce0: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
dcf0: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 61  t ){.        pTa
dd00: 62 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74  b = sqlite3Locat
dd10: 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30  eTable(pParse, 0
dd20: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
dd30: 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
dd40: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
dd50: 20 20 20 20 70 54 61 62 20 3d 20 28 54 61 62 6c      pTab = (Tabl
dd60: 65 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74  e*)sqliteHashDat
dd70: 61 28 6b 29 3b 0a 20 20 20 20 20 20 20 20 6b 20  a(k);.        k 
dd80: 3d 20 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  = sqliteHashNext
dd90: 28 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  (k);.      }.   
dda0: 20 20 20 69 66 28 20 70 54 61 62 3d 3d 30 20 7c     if( pTab==0 |
ddb0: 7c 20 70 54 61 62 2d 3e 70 46 4b 65 79 3d 3d 30  | pTab->pFKey==0
ddc0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
ddd0: 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c     sqlite3TableL
dde0: 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62 2c  ock(pParse, iDb,
ddf0: 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 30 2c 20   pTab->tnum, 0, 
de00: 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  pTab->zName);.  
de10: 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 6e 43      if( pTab->nC
de20: 6f 6c 2b 72 65 67 52 6f 77 3e 70 50 61 72 73 65  ol+regRow>pParse
de30: 2d 3e 6e 4d 65 6d 20 29 20 70 50 61 72 73 65 2d  ->nMem ) pParse-
de40: 3e 6e 4d 65 6d 20 3d 20 70 54 61 62 2d 3e 6e 43  >nMem = pTab->nC
de50: 6f 6c 20 2b 20 72 65 67 52 6f 77 3b 0a 20 20 20  ol + regRow;.   
de60: 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61     sqlite3OpenTa
de70: 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20 69  ble(pParse, 0, i
de80: 44 62 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65  Db, pTab, OP_Ope
de90: 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20 73 71  nRead);.      sq
dea0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
deb0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
dec0: 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 30 2c 20  , regResult, 0, 
ded0: 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pTab->zName,.   
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 50 34 5f 54 52 41 4e 53 49 45 4e       P4_TRANSIEN
df00: 54 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  T);.      for(i=
df10: 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b  1, pFK=pTab->pFK
df20: 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46  ey; pFK; i++, pF
df30: 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d  K=pFK->pNextFrom
df40: 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 65  ){.        pPare
df50: 6e 74 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61  nt = sqlite3Loca
df60: 74 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  teTable(pParse, 
df70: 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  0, pFK->zTo, zDb
df80: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
df90: 50 61 72 65 6e 74 3d 3d 30 20 29 20 62 72 65 61  Parent==0 ) brea
dfa0: 6b 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  k;.        pIdx 
dfb0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  = 0;.        sql
dfc0: 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50  ite3TableLock(pP
dfd0: 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65  arse, iDb, pPare
dfe0: 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61  nt->tnum, 0, pPa
dff0: 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20  rent->zName);.  
e000: 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65        x = sqlite
e010: 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70  3FkLocateIndex(p
e020: 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20  Parse, pParent, 
e030: 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a  pFK, &pIdx, 0);.
e040: 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30          if( x==0
e050: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66   ){.          if
e060: 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20  ( pIdx==0 ){.   
e070: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e080: 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65  OpenTable(pParse
e090: 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e  , i, iDb, pParen
e0a0: 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b  t, OP_OpenRead);
e0b0: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
e0c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 4b 65  {.            Ke
e0d0: 79 49 6e 66 6f 20 2a 70 4b 65 79 20 3d 20 73 71  yInfo *pKey = sq
e0e0: 6c 69 74 65 33 49 6e 64 65 78 4b 65 79 69 6e 66  lite3IndexKeyinf
e0f0: 6f 28 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b  o(pParse, pIdx);
e100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e110: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
e120: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69  , OP_OpenRead, i
e130: 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44  , pIdx->tnum, iD
e140: 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  b);.            
e150: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
e160: 65 50 34 28 76 2c 20 2d 31 2c 20 28 63 68 61 72  eP4(v, -1, (char
e170: 2a 29 70 4b 65 79 2c 20 50 34 5f 4b 45 59 49 4e  *)pKey, P4_KEYIN
e180: 46 4f 5f 48 41 4e 44 4f 46 46 29 3b 0a 20 20 20  FO_HANDOFF);.   
e190: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e1a0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
e1b0: 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    k = 0;.       
e1c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
e1d0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
e1e0: 20 20 69 66 28 20 70 46 4b 20 29 20 62 72 65 61    if( pFK ) brea
e1f0: 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 61  k;.      if( pPa
e200: 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50  rse->nTab<i ) pP
e210: 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a  arse->nTab = i;.
e220: 20 20 20 20 20 20 61 64 64 72 54 6f 70 20 3d 20        addrTop = 
e230: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e240: 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20  1(v, OP_Rewind, 
e250: 30 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  0);.      for(i=
e260: 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b  1, pFK=pTab->pFK
e270: 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46  ey; pFK; i++, pF
e280: 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d  K=pFK->pNextFrom
e290: 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 65  ){.        pPare
e2a0: 6e 74 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61  nt = sqlite3Loca
e2b0: 74 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  teTable(pParse, 
e2c0: 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  0, pFK->zTo, zDb
e2d0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
e2e0: 74 28 20 70 50 61 72 65 6e 74 21 3d 30 20 29 3b  t( pParent!=0 );
e2f0: 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20  .        pIdx = 
e300: 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c  0;.        aiCol
e310: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 78  s = 0;.        x
e320: 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61   = sqlite3FkLoca
e330: 74 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20  teIndex(pParse, 
e340: 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70  pParent, pFK, &p
e350: 49 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b 0a 20  Idx, &aiCols);. 
e360: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 78         assert( x
e370: 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  ==0 );.        a
e380: 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56  ddrOk = sqlite3V
e390: 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b  dbeMakeLabel(v);
e3a0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49 64  .        if( pId
e3b0: 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  x==0 ){.        
e3c0: 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b    int iKey = pFK
e3d0: 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b  ->aCol[0].iFrom;
e3e0: 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
e3f0: 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b  t( iKey>=0 && iK
e400: 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b  ey<pTab->nCol );
e410: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
e420: 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79  Key!=pTab->iPKey
e430: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
e440: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e450: 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  3(v, OP_Column, 
e460: 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29  0, iKey, regRow)
e470: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
e480: 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
e490: 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79  lt(v, pTab, iKey
e4a0: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
e4b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e4c0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
e4d0: 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61  sNull, regRow, a
e4e0: 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  ddrOk);.        
e4f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e500: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74  ddOp2(v, OP_Must
e510: 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c 0a 20  BeInt, regRow,. 
e520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
e530: 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74  lite3VdbeCurrent
e540: 41 64 64 72 28 76 29 2b 33 29 3b 0a 20 20 20 20  Addr(v)+3);.    
e550: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
e560: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e570: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
e580: 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f  _Rowid, 0, regRo
e590: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  w);.          }.
e5a0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e5b0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
e5c0: 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20  P_NotExists, i, 
e5d0: 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20  0, regRow);.    
e5e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e5f0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f  eAddOp2(v, OP_Go
e600: 74 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29 3b 0a  to, 0, addrOk);.
e610: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e620: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
e630: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
e640: 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20  entAddr(v)-2);. 
e650: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
e660: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b          for(j=0;
e670: 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b   j<pFK->nCol; j+
e680: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
e690: 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
e6a0: 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
e6b0: 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20  v, pTab, 0,.    
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f          aiCols ?
e6e0: 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b   aiCols[j] : pFK
e6f0: 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 2c  ->aCol[0].iFrom,
e700: 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20   regRow+j);.    
e710: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e720: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
e730: 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a  IsNull, regRow+j
e740: 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20  , addrOk);.     
e750: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
e760: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e770: 70 33 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63  p3(v, OP_MakeRec
e780: 6f 72 64 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b  ord, regRow, pFK
e790: 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 29 3b  ->nCol, regKey);
e7a0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
e7b0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76  e3VdbeChangeP4(v
e7c0: 2c 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20  , -1,.          
e7d0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e7e0: 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
e7f0: 28 76 2c 70 49 64 78 29 2c 20 50 34 5f 54 52 41  (v,pIdx), P4_TRA
e800: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20  NSIENT);.       
e810: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e820: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f  dOp4Int(v, OP_Fo
e830: 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20  und, i, addrOk, 
e840: 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20  regKey, 0);.    
e850: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
e860: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
e870: 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20  v, OP_Rowid, 0, 
e880: 72 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20  regResult+1);.  
e890: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e8a0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
e8b0: 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73  ring8, 0, regRes
e8c0: 75 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20 20  ult+2, 0, .     
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8e0: 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50       pFK->zTo, P
e8f0: 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  4_TRANSIENT);.  
e900: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e910: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
e920: 74 65 67 65 72 2c 20 69 2d 31 2c 20 72 65 67 52  teger, i-1, regR
e930: 65 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20 20  esult+3);.      
e940: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e950: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
e960: 52 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20  Row, regResult, 
e970: 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  4);.        sqli
e980: 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61  te3VdbeResolveLa
e990: 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a  bel(v, addrOk);.
e9a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
e9b0: 62 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73  bFree(db, aiCols
e9c0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
e9d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e9e0: 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30  p2(v, OP_Next, 0
e9f0: 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b 0a 20 20  , addrTop+1);.  
ea00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
ea10: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 54  umpHere(v, addrT
ea20: 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  op);.    }.  }. 
ea30: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
ea40: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
ea50: 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20  E_OMIT_TRIGGER) 
ea60: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  */.#endif /* !de
ea70: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
ea80: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a  T_FOREIGN_KEY) *
ea90: 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  /..#ifndef NDEBU
eaa0: 47 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  G.  case PragTyp
eab0: 5f 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b  _PARSER_TRACE: {
eac0: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
ead0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
eae0: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
eaf0: 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20  Right, 0) ){.   
eb00: 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73       sqlite3Pars
eb10: 65 72 54 72 61 63 65 28 73 74 64 65 72 72 2c 20  erTrace(stderr, 
eb20: 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20  "parser: ");.   
eb30: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
eb40: 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54    sqlite3ParserT
eb50: 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20  race(0, 0);.    
eb60: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
eb70: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
eb80: 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68   /* Reinstall th
eb90: 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20  e LIKE and GLOB 
eba0: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20  functions.  The 
ebb0: 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a  variant of LIKE.
ebc0: 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62    ** used will b
ebd0: 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  e case sensitive
ebe0: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
ebf0: 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20  g on the RHS..  
ec00: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
ec10: 70 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45  p_CASE_SENSITIVE
ec20: 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28  _LIKE: {.    if(
ec30: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
ec40: 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
ec50: 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62  LikeFunctions(db
ec60: 2c 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  , sqlite3GetBool
ec70: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b  ean(zRight, 0));
ec80: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
ec90: 61 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ak;..#ifndef SQL
eca0: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
ecb0: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20  ECK_ERROR_MAX.# 
ecc0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
ecd0: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
ece0: 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64  ROR_MAX 100.#end
ecf0: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
ed00: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
ed10: 59 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61  Y_CHECK.  /* Pra
ed20: 67 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b  gma "quick_check
ed30: 22 20 69 73 20 72 65 64 75 63 65 64 20 76 65 72  " is reduced ver
ed40: 73 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e  sion of .  ** in
ed50: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65  tegrity_check de
ed60: 73 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74  signed to detect
ed70: 20 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20 63   most database c
ed80: 6f 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77  orruption.  ** w
ed90: 69 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74  ithout most of t
eda0: 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61  he overhead of a
edb0: 20 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d   full integrity-
edc0: 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61  check..  */.  ca
edd0: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47  se PragTyp_INTEG
ede0: 52 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20  RITY_CHECK: {.  
edf0: 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72    int i, j, addr
ee00: 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 2f 2a  , mxErr;..    /*
ee10: 20 43 6f 64 65 20 74 68 61 74 20 61 70 70 65 61   Code that appea
ee20: 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  rs at the end of
ee30: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 63   the integrity c
ee40: 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72  heck.  If no err
ee50: 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61 67  or.    ** messag
ee60: 65 73 20 68 61 76 65 20 62 65 65 6e 20 67 65 6e  es have been gen
ee70: 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20 4f  erated, output O
ee80: 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f 75  K.  Otherwise ou
ee90: 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a 20  tput the.    ** 
eea0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20 20  error message.  
eeb0: 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20    */.    static 
eec0: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
eed0: 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20   endCode[] = {. 
eee0: 20 20 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d       { OP_AddImm
eef0: 2c 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20  ,      1, 0,    
ef00: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20      0},    /* 0 
ef10: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66  */.      { OP_If
ef20: 4e 65 67 2c 20 20 20 20 20 20 20 31 2c 20 30 2c  Neg,       1, 0,
ef30: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
ef40: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 1 */.      { O
ef50: 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30  P_String8,     0
ef60: 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 3,        0}, 
ef70: 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20     /* 2 */.     
ef80: 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
ef90: 20 20 20 33 2c 20 31 2c 20 20 20 20 20 20 20 20     3, 1,        
efa0: 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20  0},.    };..    
efb0: 69 6e 74 20 69 73 51 75 69 63 6b 20 3d 20 28 73  int isQuick = (s
efc0: 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c  qlite3Tolower(zL
efd0: 65 66 74 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a  eft[0])=='q');..
efe0: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 52      /* If the PR
eff0: 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73  AGMA command was
f000: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 50 52   of the form "PR
f010: 41 47 4d 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72  AGMA <db>.integr
f020: 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20  ity_check",.    
f030: 2a 2a 20 74 68 65 6e 20 69 44 62 20 69 73 20 73  ** then iDb is s
f040: 65 74 20 74 6f 20 74 68 65 20 69 6e 64 65 78 20  et to the index 
f050: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
f060: 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 3c 64  identified by <d
f070: 62 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68  b>..    ** In th
f080: 69 73 20 63 61 73 65 2c 20 74 68 65 20 69 6e 74  is case, the int
f090: 65 67 72 69 74 79 20 6f 66 20 64 61 74 61 62 61  egrity of databa
f0a0: 73 65 20 69 44 62 20 6f 6e 6c 79 20 69 73 20 76  se iDb only is v
f0b0: 65 72 69 66 69 65 64 20 62 79 0a 20 20 20 20 2a  erified by.    *
f0c0: 2a 20 74 68 65 20 56 44 42 45 20 63 72 65 61 74  * the VDBE creat
f0d0: 65 64 20 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a  ed below..    **
f0e0: 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 77 69 73  .    ** Otherwis
f0f0: 65 2c 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e  e, if the comman
f100: 64 20 77 61 73 20 73 69 6d 70 6c 79 20 22 50 52  d was simply "PR
f110: 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63  AGMA integrity_c
f120: 68 65 63 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a  heck" (or.    **
f130: 20 22 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63   "PRAGMA quick_c
f140: 68 65 63 6b 22 29 2c 20 74 68 65 6e 20 69 44 62  heck"), then iDb
f150: 20 69 73 20 73 65 74 20 74 6f 20 30 2e 20 49 6e   is set to 0. In
f160: 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20   this case, set 
f170: 69 44 62 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31  iDb.    ** to -1
f180: 20 68 65 72 65 2c 20 74 6f 20 69 6e 64 69 63 61   here, to indica
f190: 74 65 20 74 68 61 74 20 74 68 65 20 56 44 42 45  te that the VDBE
f1a0: 20 73 68 6f 75 6c 64 20 76 65 72 69 66 79 20 74   should verify t
f1b0: 68 65 20 69 6e 74 65 67 72 69 74 79 0a 20 20 20  he integrity.   
f1c0: 20 2a 2a 20 6f 66 20 61 6c 6c 20 61 74 74 61 63   ** of all attac
f1d0: 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 20 20  hed databases.  
f1e0: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  */.    assert( i
f1f0: 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73  Db>=0 );.    ass
f200: 65 72 74 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70  ert( iDb==0 || p
f210: 49 64 32 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66  Id2->z );.    if
f220: 28 20 70 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69  ( pId2->z==0 ) i
f230: 44 62 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a  Db = -1;..    /*
f240: 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   Initialize the 
f250: 56 44 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a  VDBE program */.
f260: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
f270: 20 3d 20 36 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 6;.    sqlite
f280: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
f290: 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  v, 1);.    sqlit
f2a0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
f2b0: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
f2c0: 41 4d 45 2c 20 22 69 6e 74 65 67 72 69 74 79 5f  AME, "integrity_
f2d0: 63 68 65 63 6b 22 2c 20 53 51 4c 49 54 45 5f 53  check", SQLITE_S
f2e0: 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 2f 2a 20  TATIC);..    /* 
f2f0: 53 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  Set the maximum 
f300: 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  error count */. 
f310: 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54     mxErr = SQLIT
f320: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
f330: 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20  K_ERROR_MAX;.   
f340: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
f350: 20 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 49       sqlite3GetI
f360: 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78  nt32(zRight, &mx
f370: 45 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20  Err);.      if( 
f380: 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20  mxErr<=0 ){.    
f390: 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49      mxErr = SQLI
f3a0: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
f3b0: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20  CK_ERROR_MAX;.  
f3c0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
f3d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f3e0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
f3f0: 20 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20   mxErr, 1);  /* 
f400: 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72  reg[1] holds err
f410: 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20  ors left */..   
f420: 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72   /* Do an integr
f430: 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63  ity check on eac
f440: 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  h database file 
f450: 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  */.    for(i=0; 
f460: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
f470: 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20  .      HashElem 
f480: 2a 78 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a  *x;.      Hash *
f490: 70 54 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74  pTbls;.      int
f4a0: 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20   cnt = 0;..     
f4b0: 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42   if( OMIT_TEMPDB
f4c0: 20 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69   && i==1 ) conti
f4d0: 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69  nue;.      if( i
f4e0: 44 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20  Db>=0 && i!=iDb 
f4f0: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20  ) continue;..   
f500: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
f510: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
f520: 65 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64  e, i);.      add
f530: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
f540: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp1(v, OP_IfPo
f550: 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69  s, 1); /* Halt i
f560: 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20  f out of errors 
f570: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
f580: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
f590: 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20  _Halt, 0, 0);.  
f5a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
f5b0: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
f5c0: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61  ;..      /* Do a
f5d0: 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  n integrity chec
f5e0: 6b 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a  k of the B-Tree.
f5f0: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
f600: 2a 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69  * Begin by filli
f610: 6e 67 20 72 65 67 69 73 74 65 72 73 20 32 2c 20  ng registers 2, 
f620: 33 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20  3, ... with the 
f630: 72 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65  root pages numbe
f640: 72 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20  rs.      ** for 
f650: 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69  all tables and i
f660: 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20 64 61  ndices in the da
f670: 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  tabase..      */
f680: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
f690: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
f6a0: 78 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20  xHeld(db, i, 0) 
f6b0: 29 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d  );.      pTbls =
f6c0: 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63   &db->aDb[i].pSc
f6d0: 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20  hema->tblHash;. 
f6e0: 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74       for(x=sqlit
f6f0: 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73  eHashFirst(pTbls
f700: 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61  ); x; x=sqliteHa
f710: 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20  shNext(x)){.    
f720: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20      Table *pTab 
f730: 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  = sqliteHashData
f740: 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  (x);.        Ind
f750: 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20  ex *pIdx;.      
f760: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
f770: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
f780: 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32  r, pTab->tnum, 2
f790: 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 63  +cnt);.        c
f7a0: 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 66 6f  nt++;.        fo
f7b0: 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  r(pIdx=pTab->pIn
f7c0: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
f7d0: 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  pIdx->pNext){.  
f7e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
f7f0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
f800: 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 74  Integer, pIdx->t
f810: 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20  num, 2+cnt);.   
f820: 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20         cnt++;.  
f830: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
f840: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
f850: 75 72 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e  ure sufficient n
f860: 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
f870: 72 73 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  rs have been all
f880: 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20  ocated */.      
f890: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d  pParse->nMem = M
f8a0: 41 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  AX( pParse->nMem
f8b0: 2c 20 63 6e 74 2b 37 20 29 3b 0a 0a 20 20 20 20  , cnt+7 );..    
f8c0: 20 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74 72    /* Do the b-tr
f8d0: 65 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  ee integrity che
f8e0: 63 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  cks */.      sql
f8f0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
f900: 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  , OP_IntegrityCk
f910: 2c 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20  , 2, cnt, 1);.  
f920: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
f930: 68 61 6e 67 65 50 35 28 76 2c 20 28 75 38 29 69  hangeP5(v, (u8)i
f940: 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20  );.      addr = 
f950: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f960: 31 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20  1(v, OP_IsNull, 
f970: 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2);.      sqlite
f980: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
f990: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
f9a0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c   0,.         sql
f9b0: 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
f9c0: 22 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  "*** in database
f9d0: 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e   %s ***\n", db->
f9e0: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20  aDb[i].zName),. 
f9f0: 20 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d          P4_DYNAM
fa00: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
fa10: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
fa20: 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 29 3b 0a  OP_Move, 2, 4);.
fa30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fa40: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
fa50: 6e 63 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a  ncat, 4, 3, 2);.
fa60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fa70: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
fa80: 73 75 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a  sultRow, 2, 1);.
fa90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
faa0: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
fab0: 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61  r);..      /* Ma
fac0: 6b 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20  ke sure all the 
fad0: 69 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73  indices are cons
fae0: 74 72 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c  tructed correctl
faf0: 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  y..      */.    
fb00: 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61    for(x=sqliteHa
fb10: 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20  shFirst(pTbls); 
fb20: 78 20 26 26 20 21 69 73 51 75 69 63 6b 3b 20 78  x && !isQuick; x
fb30: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
fb40: 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62  x)){.        Tab
fb50: 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74  le *pTab = sqlit
fb60: 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20  eHashData(x);.  
fb70: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64        Index *pId
fb80: 78 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c  x;.        int l
fb90: 6f 6f 70 54 6f 70 3b 0a 0a 20 20 20 20 20 20 20  oopTop;..       
fba0: 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65   if( pTab->pInde
fbb0: 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  x==0 ) continue;
fbc0: 0a 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20  .        addr = 
fbd0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
fbe0: 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
fbf0: 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f  );  /* Stop if o
fc00: 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a  ut of errors */.
fc10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
fc20: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
fc30: 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Halt, 0, 0);.   
fc40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fc50: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
fc60: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
fc70: 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
fc80: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
fc90: 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62    sqlite3OpenTab
fca0: 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 70 50 61  leAndIndices(pPa
fcb0: 72 73 65 2c 20 70 54 61 62 2c 20 31 2c 20 4f 50  rse, pTab, 1, OP
fcc0: 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20  _OpenRead);.    
fcd0: 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64      for(j=0, pId
fce0: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
fcf0: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
fd00: 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20  >pNext, j++){.  
fd10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
fd20: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
fd30: 49 6e 74 65 67 65 72 2c 20 30 2c 20 37 2b 6a 29  Integer, 0, 7+j)
fd40: 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72 69  ; /* index entri
fd50: 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  es counter */.  
fd60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
fd70: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d  pParse->nMem = M
fd80: 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c  AX(pParse->nMem,
fd90: 20 37 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 6c   7+j);.        l
fda0: 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33  oopTop = sqlite3
fdb0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
fdc0: 5f 52 65 77 69 6e 64 2c 20 31 2c 20 30 29 20 2b  _Rewind, 1, 0) +
fdd0: 20 31 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   1;.        for(
fde0: 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
fdf0: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
fe00: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
fe10: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
fe20: 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a  int jmp2, jmp3;.
fe30: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 31            int r1
fe40: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 74 61 74  ;.          stat
fe50: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
fe60: 69 73 74 20 69 64 78 45 72 72 5b 5d 20 3d 20 7b  ist idxErr[] = {
fe70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
fe80: 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 31  P_AddImm,      1
fe90: 2c 20 2d 31 2c 20 20 30 7d 2c 0a 20 20 20 20 20  , -1,  0},.     
fea0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69         { OP_Stri
feb0: 6e 67 38 2c 20 20 20 20 20 30 2c 20 20 33 2c 20  ng8,     0,  3, 
fec0: 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
fee0: 5f 52 6f 77 69 64 2c 20 20 20 20 20 20 20 31 2c  _Rowid,       1,
fef0: 20 20 34 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20    4,  0},.      
ff00: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
ff10: 67 38 2c 20 20 20 20 20 30 2c 20 20 35 2c 20 20  g8,     0,  5,  
ff20: 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20  0},    /* 3 */. 
ff30: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
ff40: 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20  String8,     0, 
ff50: 20 36 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34   6,  0},    /* 4
ff60: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
ff70: 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20  { OP_Concat,    
ff80: 20 20 34 2c 20 20 33 2c 20 20 33 7d 2c 0a 20 20    4,  3,  3},.  
ff90: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43            { OP_C
ffa0: 6f 6e 63 61 74 2c 20 20 20 20 20 20 35 2c 20 20  oncat,      5,  
ffb0: 33 2c 20 20 33 7d 2c 0a 20 20 20 20 20 20 20 20  3,  3},.        
ffc0: 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c      { OP_Concat,
ffd0: 20 20 20 20 20 20 36 2c 20 20 33 2c 20 20 33 7d        6,  3,  3}
ffe0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  ,.            { 
fff0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
10000 33 2c 20 20 31 2c 20 20 30 7d 2c 0a 20 20 20 20  3,  1,  0},.    
10010 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50          { OP_IfP
10020 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 20 30 2c  os,       1,  0,
10030 20 20 30 7d 2c 20 20 20 20 2f 2a 20 39 20 2a 2f    0},    /* 9 */
10040 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
10050 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20 30  P_Halt,        0
10060 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20 20 20 20  ,  0,  0},.     
10070 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20       };.        
10080 20 20 72 31 20 3d 20 73 71 6c 69 74 65 33 47 65    r1 = sqlite3Ge
10090 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 70  nerateIndexKey(p
100a0 50 61 72 73 65 2c 20 70 49 64 78 2c 20 31 2c 20  Parse, pIdx, 1, 
100b0 33 2c 20 30 2c 20 26 6a 6d 70 33 29 3b 0a 20 20  3, 0, &jmp3);.  
100c0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
100d0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
100e0 41 64 64 49 6d 6d 2c 20 37 2b 6a 2c 20 31 29 3b  AddImm, 7+j, 1);
100f0 20 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65    /* increment e
10100 6e 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ntry count */.  
10110 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73          jmp2 = s
10120 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
10130 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c  Int(v, OP_Found,
10140 20 6a 2b 32 2c 20 30 2c 20 72 31 2c 20 70 49 64   j+2, 0, r1, pId
10150 78 2d 3e 6e 43 6f 6c 75 6d 6e 2b 31 29 3b 0a 20  x->nColumn+1);. 
10160 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20           addr = 
10170 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10180 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
10190 65 28 69 64 78 45 72 72 29 2c 20 69 64 78 45 72  e(idxErr), idxEr
101a0 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  r);.          sq
101b0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
101c0 34 28 76 2c 20 61 64 64 72 2b 31 2c 20 22 72 6f  4(v, addr+1, "ro
101d0 77 69 64 20 22 2c 20 50 34 5f 53 54 41 54 49 43  wid ", P4_STATIC
101e0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
101f0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34  ite3VdbeChangeP4
10200 28 76 2c 20 61 64 64 72 2b 33 2c 20 22 20 6d 69  (v, addr+3, " mi
10210 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78  ssing from index
10220 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a   ", P4_STATIC);.
10230 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10240 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c  3VdbeChangeP4(v,
10250 20 61 64 64 72 2b 34 2c 20 70 49 64 78 2d 3e 7a   addr+4, pIdx->z
10260 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45  Name, P4_TRANSIE
10270 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  NT);.          s
10280 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
10290 72 65 28 76 2c 20 61 64 64 72 2b 39 29 3b 0a 20  re(v, addr+9);. 
102a0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
102b0 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
102c0 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp2);.         
102d0 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f   sqlite3VdbeReso
102e0 6c 76 65 4c 61 62 65 6c 28 76 2c 20 6a 6d 70 33  lveLabel(v, jmp3
102f0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
10300 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10310 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78  AddOp2(v, OP_Nex
10320 74 2c 20 31 2c 20 6c 6f 6f 70 54 6f 70 29 3b 0a  t, 1, loopTop);.
10330 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10340 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c  dbeJumpHere(v, l
10350 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64  oopTop-1);.#ifnd
10360 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
10370 54 52 45 45 43 4f 55 4e 54 0a 20 20 20 20 20 20  TREECOUNT.      
10380 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10390 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
103a0 38 2c 20 30 2c 20 32 2c 20 30 2c 20 0a 20 20 20  8, 0, 2, 0, .   
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103c0 20 20 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e    "wrong # of en
103d0 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22  tries in index "
103e0 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
103f0 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
10400 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
10410 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
10420 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a  x->pNext, j++){.
10430 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d            addr =
10440 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
10450 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20  entAddr(v);.    
10460 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10470 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66  eAddOp2(v, OP_If
10480 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b  Pos, 1, addr+2);
10490 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
104a0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
104b0 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a  OP_Halt, 0, 0);.
104c0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
104d0 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
104e0 50 5f 43 6f 75 6e 74 2c 20 6a 2b 32 2c 20 33 29  P_Count, j+2, 3)
104f0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10500 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
10510 20 4f 50 5f 45 71 2c 20 37 2b 6a 2c 20 61 64 64   OP_Eq, 7+j, add
10520 72 2b 38 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  r+8, 3);.       
10530 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10540 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
10550 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 20  m, 1, -1);.     
10560 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10570 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
10580 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70  ing8, 0, 3, 0, p
10590 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54  Idx->zName, P4_T
105a0 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
105b0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
105c0 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
105d0 63 61 74 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20  cat, 3, 2, 7);. 
105e0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
105f0 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
10600 5f 52 65 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31  _ResultRow, 7, 1
10610 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e  );.        }.#en
10620 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
10630 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f  IT_BTREECOUNT */
10640 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a  .      } .    }.
10650 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
10660 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
10670 76 2c 20 41 72 72 61 79 53 69 7a 65 28 65 6e 64  v, ArraySize(end
10680 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64 65 29 3b  Code), endCode);
10690 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
106a0 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72  ChangeP2(v, addr
106b0 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73  , -mxErr);.    s
106c0 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
106d0 72 65 28 76 2c 20 61 64 64 72 2b 31 29 3b 0a 20  re(v, addr+1);. 
106e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
106f0 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 32  angeP4(v, addr+2
10700 2c 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49  , "ok", P4_STATI
10710 43 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  C);.  }.  break;
10720 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
10730 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
10740 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64  _CHECK */..#ifnd
10750 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
10760 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  TF16.  /*.  **  
10770 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67   PRAGMA encoding
10780 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65  .  **   PRAGMA e
10790 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38  ncoding = "utf-8
107a0 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d  "|"utf-16"|"utf-
107b0 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22  16le"|"utf-16be"
107c0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74  .  **.  ** In it
107d0 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68  s first form, th
107e0 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e  is pragma return
107f0 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  s the encoding o
10800 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20  f the main.  ** 
10810 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
10820 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74   database is not
10830 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74   initialized, it
10840 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
10850 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  now..  **.  ** T
10860 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f  he second form o
10870 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73  f this pragma is
10880 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20   a no-op if the 
10890 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
108a0 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20  le.  ** has not 
108b0 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69  already been ini
108c0 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69  tialized. In thi
108d0 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20 74  s case it sets t
108e0 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20  he default.  ** 
108f0 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69  encoding that wi
10900 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ll be used for t
10910 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
10920 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66   file if a new f
10930 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61  ile.  ** is crea
10940 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74  ted. If an exist
10950 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73  ing main databas
10960 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64  e file is opened
10970 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
10980 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63  default text enc
10990 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78  oding for the ex
109a0 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
109b0 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20  is used..  ** . 
109c0 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73   ** In all cases
109d0 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 63   new databases c
109e0 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65  reated using the
109f0 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20   ATTACH command 
10a00 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64  are.  ** created
10a10 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65   to use the same
10a20 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
10a30 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61  coding as the ma
10a40 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a  in database. If.
10a50 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61    ** the main da
10a60 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62  tabase has not b
10a70 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
10a80 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77  and/or created w
10a90 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20  hen ATTACH.  ** 
10aa0 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68 69  is executed, thi
10ab0 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65  s is done before
10ac0 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65 72   the ATTACH oper
10ad0 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ation..  **.  **
10ae0 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66   In the second f
10af0 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20  orm this pragma 
10b00 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65 6e  sets the text en
10b10 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65  coding to be use
10b20 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61  d in.  ** new da
10b30 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65  tabase files cre
10b40 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20  ated using this 
10b50 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  database handle.
10b60 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a   It is only.  **
10b70 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b   useful if invok
10b80 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61  ed immediately a
10b90 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61  fter the main da
10ba0 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20  tabase i.  */.  
10bb0 63 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43  case PragTyp_ENC
10bc0 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61  ODING: {.    sta
10bd0 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
10be0 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20   EncName {.     
10bf0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20   char *zName;.  
10c00 20 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20      u8 enc;.    
10c10 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  } encnames[] = {
10c20 0a 20 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c  .      { "UTF8",
10c30 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
10c40 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
10c50 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53   { "UTF-8",    S
10c60 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20  QLITE_UTF8      
10c70 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65    },  /* Must be
10c80 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a   element [1] */.
10c90 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c        { "UTF-16l
10ca0 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  e", SQLITE_UTF16
10cb0 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75  LE     },  /* Mu
10cc0 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32  st be element [2
10cd0 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  ] */.      { "UT
10ce0 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f  F-16be", SQLITE_
10cf0 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20  UTF16BE     },  
10d00 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
10d10 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [3] */.      
10d20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51  { "UTF16le",  SQ
10d30 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20  LITE_UTF16LE    
10d40 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46   },.      { "UTF
10d50 31 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55  16be",  SQLITE_U
10d60 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20  TF16BE     },.  
10d70 20 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20      { "UTF-16", 
10d80 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
10d90 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54       }, /* SQLIT
10da0 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f  E_UTF16NATIVE */
10db0 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 22  .      { "UTF16"
10dc0 2c 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20  ,    0          
10dd0 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51          }, /* SQ
10de0 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
10df0 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30   */.      { 0, 0
10e00 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f   }.    };.    co
10e10 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61  nst struct EncNa
10e20 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66  me *pEnc;.    if
10e30 28 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20  ( !zRight ){    
10e40 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64  /* "PRAGMA encod
10e50 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66  ing" */.      if
10e60 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
10e70 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
10e80 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
10e90 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10ea0 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
10eb0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
10ec0 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
10ed0 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
10ee0 2c 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53 51  , "encoding", SQ
10ef0 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
10f00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10f10 64 64 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp2(v, OP_Stri
10f20 6e 67 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20  ng8, 0, 1);.    
10f30 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d    assert( encnam
10f40 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e  es[SQLITE_UTF8].
10f50 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
10f60 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
10f70 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54  ( encnames[SQLIT
10f80 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d  E_UTF16LE].enc==
10f90 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29  SQLITE_UTF16LE )
10fa0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
10fb0 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
10fc0 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51  UTF16BE].enc==SQ
10fd0 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
10fe0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10ff0 65 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c  eChangeP4(v, -1,
11000 20 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50   encnames[ENC(pP
11010 61 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65  arse->db)].zName
11020 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
11030 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
11040 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
11050 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
11060 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20    }else{        
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11080 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64  /* "PRAGMA encod
11090 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20  ing = XXX" */.  
110a0 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e      /* Only chan
110b0 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ge the value of 
110c0 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68  sqlite.enc if th
110d0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
110e0 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a  e is not.      *
110f0 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49  * initialized. I
11100 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
11110 61 73 65 20 65 78 69 73 74 73 2c 20 74 68 65 20  ase exists, the 
11120 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76  new sqlite.enc v
11130 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69  alue.      ** wi
11140 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ll be overwritte
11150 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d  n when the schem
11160 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64  a is next loaded
11170 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74  . If it does not
11180 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64  .      ** alread
11190 79 20 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c  y exists, it wil
111a0 6c 20 62 65 20 63 72 65 61 74 65 64 20 74 6f 20  l be created to 
111b0 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f  use the new enco
111c0 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20  ding value..    
111d0 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a    */.      if( .
111e0 20 20 20 20 20 20 20 20 21 28 44 62 48 61 73 50          !(DbHasP
111f0 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44  roperty(db, 0, D
11200 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29  B_SchemaLoaded))
11210 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48   || .        DbH
11220 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30  asProperty(db, 0
11230 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20  , DB_Empty) .   
11240 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f     ){.        fo
11250 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73  r(pEnc=&encnames
11260 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65  [0]; pEnc->zName
11270 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20  ; pEnc++){.     
11280 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69       if( 0==sqli
11290 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
112a0 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20  t, pEnc->zName) 
112b0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 45  ){.            E
112c0 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 20 3d  NC(pParse->db) =
112d0 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e   pEnc->enc ? pEn
112e0 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f  c->enc : SQLITE_
112f0 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20  UTF16NATIVE;.   
11300 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
11310 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
11320 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
11330 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29  ( !pEnc->zName )
11340 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
11350 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
11360 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64  se, "unsupported
11370 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20   encoding: %s", 
11380 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20  zRight);.       
11390 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
113a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
113b0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
113c0 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69  MIT_UTF16 */..#i
113d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
113e0 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
113f0 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
11400 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
11410 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65  abase.]schema_ve
11420 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41  rsion.  **   PRA
11430 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
11440 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20  chema_version = 
11450 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
11460 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
11470 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72  tabase.]user_ver
11480 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47  sion.  **   PRAG
11490 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73  MA [database.]us
114a0 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e  er_version = <in
114b0 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
114c0 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
114d0 61 73 65 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f  ase.]freelist_co
114e0 75 6e 74 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  unt = <integer>.
114f0 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    **.  **   PRAG
11500 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70  MA [database.]ap
11510 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20 2a  plication_id.  *
11520 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
11530 62 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f  base.]applicatio
11540 6e 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72 3e  n_id = <integer>
11550 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70  .  **.  ** The p
11560 72 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76  ragma's schema_v
11570 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f  ersion and user_
11580 76 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64  version are used
11590 20 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20   to set or get. 
115a0 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
115b0 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
115c0 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72  ion and user-ver
115d0 73 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  sion, respective
115e0 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68  ly. Both.  ** th
115f0 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
11600 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65   and the user-ve
11610 72 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74  rsion are 32-bit
11620 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
11630 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  .  ** stored in 
11640 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
11650 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  der..  **.  ** T
11660 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
11670 20 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79   is usually only
11680 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74   manipulated int
11690 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74  ernally by SQLit
116a0 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e  e. It.  ** is in
116b0 63 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c  cremented by SQL
116c0 69 74 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ite whenever the
116d0 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
116e0 20 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79   is modified (by
116f0 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f  .  ** creating o
11700 72 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62  r dropping a tab
11710 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68  le or index). Th
11720 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
11730 20 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a   is used by.  **
11740 20 53 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d   SQLite each tim
11750 65 20 61 20 71 75 65 72 79 20 69 73 20 65 78 65  e a query is exe
11760 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20  cuted to ensure 
11770 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61  that the interna
11780 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20  l cache.  ** of 
11790 74 68 65 20 73 63 68 65 6d 61 20 75 73 65 64 20  the schema used 
117a0 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74  when compiling t
117b0 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74  he SQL query mat
117c0 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20  ches the schema 
117d0 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61  of.  ** the data
117e0 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69  base against whi
117f0 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  ch the compiled 
11800 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c  query is actuall
11810 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a  y executed..  **
11820 20 53 75 62 76 65 72 74 69 6e 67 20 74 68 69 73   Subverting this
11830 20 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73   mechanism by us
11840 69 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68 65  ing "PRAGMA sche
11850 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d  ma_version" to m
11860 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73  odify.  ** the s
11870 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73  chema-version is
11880 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e   potentially dan
11890 67 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c  gerous and may l
118a0 65 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20  ead to program. 
118b0 20 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64   ** crashes or d
118c0 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
118d0 6f 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61 75  on. Use with cau
118e0 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion!.  **.  ** 
118f0 54 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  The user-version
11900 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74   is not used int
11910 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74  ernally by SQLit
11920 65 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73 65  e. It may be use
11930 64 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63  d by.  ** applic
11940 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70  ations for any p
11950 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 63  urpose..  */.  c
11960 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 41 44  ase PragTyp_HEAD
11970 45 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20 20  ER_VALUE: {.    
11980 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 20 20 20 2f  int iCookie;   /
11990 2a 20 43 6f 6f 6b 69 65 20 69 6e 64 65 78 2e 20  * Cookie index. 
119a0 31 20 66 6f 72 20 73 63 68 65 6d 61 2d 63 6f 6f  1 for schema-coo
119b0 6b 69 65 2c 20 36 20 66 6f 72 20 75 73 65 72 2d  kie, 6 for user-
119c0 63 6f 6f 6b 69 65 2e 20 2a 2f 0a 20 20 20 20 73  cookie. */.    s
119d0 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
119e0 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
119f0 20 73 77 69 74 63 68 28 20 7a 4c 65 66 74 5b 30   switch( zLeft[0
11a00 5d 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  ] ){.      case 
11a10 27 61 27 3a 20 63 61 73 65 20 27 41 27 3a 0a 20  'a': case 'A':. 
11a20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d         iCookie =
11a30 20 42 54 52 45 45 5f 41 50 50 4c 49 43 41 54 49   BTREE_APPLICATI
11a40 4f 4e 5f 49 44 3b 0a 20 20 20 20 20 20 20 20 62  ON_ID;.        b
11a50 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
11a60 20 27 66 27 3a 20 63 61 73 65 20 27 46 27 3a 0a   'f': case 'F':.
11a70 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20          iCookie 
11a80 3d 20 42 54 52 45 45 5f 46 52 45 45 5f 50 41 47  = BTREE_FREE_PAG
11a90 45 5f 43 4f 55 4e 54 3b 0a 20 20 20 20 20 20 20  E_COUNT;.       
11aa0 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
11ab0 73 65 20 27 73 27 3a 20 63 61 73 65 20 27 53 27  se 's': case 'S'
11ac0 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69  :.        iCooki
11ad0 65 20 3d 20 42 54 52 45 45 5f 53 43 48 45 4d 41  e = BTREE_SCHEMA
11ae0 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20  _VERSION;.      
11af0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 64    break;.      d
11b00 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20  efault:.        
11b10 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f  iCookie = BTREE_
11b20 55 53 45 52 5f 56 45 52 53 49 4f 4e 3b 0a 20 20  USER_VERSION;.  
11b30 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
11b40 20 7d 0a 0a 20 20 20 20 69 66 28 20 7a 52 69 67   }..    if( zRig
11b50 68 74 20 26 26 20 69 43 6f 6f 6b 69 65 21 3d 42  ht && iCookie!=B
11b60 54 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f 43  TREE_FREE_PAGE_C
11b70 4f 55 4e 54 20 29 7b 0a 20 20 20 20 20 20 2f 2a  OUNT ){.      /*
11b80 20 57 72 69 74 65 20 74 68 65 20 73 70 65 63 69   Write the speci
11b90 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75  fied cookie valu
11ba0 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69  e */.      stati
11bb0 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
11bc0 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d  st setCookie[] =
11bd0 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f   {.        { OP_
11be0 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20  Transaction,    
11bf0 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  1,  0},    /
11c00 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 0 */.        {
11c10 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
11c20 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
11c30 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
11c40 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69     { OP_SetCooki
11c50 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20  e,      0,  0,  
11c60 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20  1},    /* 2 */. 
11c70 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e       };.      in
11c80 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33  t addr = sqlite3
11c90 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
11ca0 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f   ArraySize(setCo
11cb0 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65  okie), setCookie
11cc0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
11cd0 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
11ce0 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20  addr, iDb);.    
11cf0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
11d00 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP1(v, addr+1,
11d10 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
11d20 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c  ght));.      sql
11d30 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
11d40 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 44 62 29  (v, addr+2, iDb)
11d50 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
11d60 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61  dbeChangeP2(v, a
11d70 64 64 72 2b 32 2c 20 69 43 6f 6f 6b 69 65 29 3b  ddr+2, iCookie);
11d80 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
11d90 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 70    /* Read the sp
11da0 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76  ecified cookie v
11db0 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74  alue */.      st
11dc0 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
11dd0 70 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b 69 65  pList readCookie
11de0 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
11df0 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
11e00 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c       0,  0,  0},
11e10 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
11e20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
11e30 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 31 2c  kie,      0,  1,
11e40 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
11e50 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  .        { OP_Re
11e60 73 75 6c 74 52 6f 77 2c 20 20 20 20 20 20 20 31  sultRow,       1
11e70 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20 20 20 20  ,  1,  0}.      
11e80 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64  };.      int add
11e90 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
11ea0 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
11eb0 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65  ySize(readCookie
11ec0 29 2c 20 72 65 61 64 43 6f 6f 6b 69 65 29 3b 0a  ), readCookie);.
11ed0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11ee0 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
11ef0 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  r, iDb);.      s
11f00 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
11f10 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 44  P1(v, addr+1, iD
11f20 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
11f30 33 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c  3VdbeChangeP3(v,
11f40 20 61 64 64 72 2b 31 2c 20 69 43 6f 6f 6b 69 65   addr+1, iCookie
11f50 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
11f60 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
11f70 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
11f80 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
11f90 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
11fa0 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51 4c  NAME, zLeft, SQL
11fb0 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
11fc0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
11fd0 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
11fe0 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
11ff0 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 20  VERSION_PRAGMAS 
12000 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
12010 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
12020 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20 2f 2a  PTION_DIAGS.  /*
12030 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 63  .  **   PRAGMA c
12040 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20  ompile_options. 
12050 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
12060 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c  the names of all
12070 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
12080 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20 74 68  tions used in th
12090 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f  is build,.  ** o
120a0 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20 72 6f  ne option per ro
120b0 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  w..  */.  case P
120c0 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f 4f  ragTyp_COMPILE_O
120d0 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20 69 6e  PTIONS: {.    in
120e0 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e  t i = 0;.    con
120f0 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b 0a 20  st char *zOpt;. 
12100 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
12110 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
12120 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
12130 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 1;.    sqlite
12140 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
12150 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
12160 4d 45 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f 70 74  ME, "compile_opt
12170 69 6f 6e 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ion", SQLITE_STA
12180 54 49 43 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  TIC);.    while(
12190 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74 65 33   (zOpt = sqlite3
121a0 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
121b0 65 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  et(i++))!=0 ){. 
121c0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
121d0 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
121e0 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a  ing8, 0, 1, 0, z
121f0 4f 70 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  Opt, 0);.      s
12200 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
12210 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
12220 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 1);.    }. 
12230 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
12240 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
12250 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
12260 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  DIAGS */..#ifnde
12270 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
12280 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  L.  /*.  **   PR
12290 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
122a0 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20 3d  wal_checkpoint =
122b0 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72 65   passive|full|re
122c0 73 74 61 72 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20  start.  **.  ** 
122d0 43 68 65 63 6b 70 6f 69 6e 74 20 74 68 65 20 64  Checkpoint the d
122e0 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20  atabase..  */.  
122f0 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c  case PragTyp_WAL
12300 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20  _CHECKPOINT: {. 
12310 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49     int iBt = (pI
12320 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45  d2->z?iDb:SQLITE
12330 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a  _MAX_ATTACHED);.
12340 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20      int eMode = 
12350 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
12360 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69  T_PASSIVE;.    i
12370 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
12380 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
12390 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66  rICmp(zRight, "f
123a0 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
123b0 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
123c0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
123d0 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  LL;.      }else 
123e0 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
123f0 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74  mp(zRight, "rest
12400 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  art")==0 ){.    
12410 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
12420 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
12430 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 0a 20  START;.      }. 
12440 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
12450 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
12460 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 3);.    pParse
12470 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20  ->nMem = 3;.    
12480 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
12490 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
124a0 41 4d 45 5f 4e 41 4d 45 2c 20 22 62 75 73 79 22  AME_NAME, "busy"
124b0 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
124c0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
124d0 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
124e0 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
124f0 22 6c 6f 67 22 2c 20 53 51 4c 49 54 45 5f 53 54  "log", SQLITE_ST
12500 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
12510 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
12520 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
12530 41 4d 45 2c 20 22 63 68 65 63 6b 70 6f 69 6e 74  AME, "checkpoint
12540 65 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ed", SQLITE_STAT
12550 49 43 29 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65  IC);..    sqlite
12560 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
12570 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42  P_Checkpoint, iB
12580 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20  t, eMode, 1);.  
12590 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
125a0 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
125b0 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a  Row, 1, 3);.  }.
125c0 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20    break;..  /*. 
125d0 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c   **   PRAGMA wal
125e0 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a  _autocheckpoint.
125f0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61    **   PRAGMA wa
12600 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
12610 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43   = N.  **.  ** C
12620 6f 6e 66 69 67 75 72 65 20 61 20 64 61 74 61 62  onfigure a datab
12630 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ase connection t
12640 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  o automatically 
12650 63 68 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74  checkpoint a dat
12660 61 62 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72  abase.  ** after
12670 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20   accumulating N 
12680 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f  frames in the lo
12690 67 2e 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20  g. Or query for 
126a0 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
126b0 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a  e.  ** of N..  *
126c0 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
126d0 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f  _WAL_AUTOCHECKPO
126e0 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  INT: {.    if( z
126f0 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
12700 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63  qlite3_wal_autoc
12710 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71  heckpoint(db, sq
12720 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
12730 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ));.    }.    re
12740 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
12750 61 72 73 65 2c 20 22 77 61 6c 5f 61 75 74 6f 63  arse, "wal_autoc
12760 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20 20 20  heckpoint", .   
12770 20 20 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c      db->xWalCall
12780 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61 6c  back==sqlite3Wal
12790 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20  DefaultHook ? . 
127a0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
127b0 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e  _PTR_TO_INT(db->
127c0 70 57 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a 20  pWalArg) : 0);. 
127d0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
127e0 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  if..  /*.  **  P
127f0 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d 65 6d  RAGMA shrink_mem
12800 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ory.  **.  ** Th
12810 69 73 20 70 72 61 67 6d 61 20 61 74 74 65 6d 70  is pragma attemp
12820 74 73 20 74 6f 20 66 72 65 65 20 61 73 20 6d 75  ts to free as mu
12830 63 68 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73  ch memory as pos
12840 73 69 62 6c 65 20 66 72 6f 6d 20 74 68 65 0a 20  sible from the. 
12850 20 2a 2a 20 63 75 72 72 65 6e 74 20 64 61 74 61   ** current data
12860 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
12870 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
12880 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f  gTyp_SHRINK_MEMO
12890 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  RY: {.    sqlite
128a0 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  3_db_release_mem
128b0 6f 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65  ory(db);.    bre
128c0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
128d0 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79  **   PRAGMA busy
128e0 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20  _timeout.  **   
128f0 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65  PRAGMA busy_time
12900 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  out = N.  **.  *
12910 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62  * Call sqlite3_b
12920 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20  usy_timeout(db, 
12930 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  N).  Return the 
12940 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20  current timeout 
12950 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e  value.  ** if on
12960 65 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f  e is set.  If no
12970 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72   busy handler or
12980 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 75 73   a different bus
12990 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74  y handler is set
129a0 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20  .  ** then 0 is 
129b0 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69  returned.  Setti
129c0 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65  ng the busy_time
129d0 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61  out to 0 or nega
129e0 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c  tive.  ** disabl
129f0 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a  es the timeout..
12a00 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72    */.  /*case Pr
12a10 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
12a20 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a  UT*/ default: {.
12a30 20 20 20 20 61 73 73 65 72 74 28 20 61 50 72 61      assert( aPra
12a40 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65 50  gmaNames[mid].eP
12a50 72 61 67 54 79 70 3d 3d 50 72 61 67 54 79 70 5f  ragTyp==PragTyp_
12a60 42 55 53 59 5f 54 49 4d 45 4f 55 54 20 29 3b 0a  BUSY_TIMEOUT );.
12a70 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
12a80 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
12a90 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
12aa0 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
12ab0 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ght));.    }.   
12ac0 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
12ad0 28 70 50 61 72 73 65 2c 20 22 74 69 6d 65 6f 75  (pParse, "timeou
12ae0 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54 69 6d  t",  db->busyTim
12af0 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  eout);.    break
12b00 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
12b10 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68     PRAGMA soft_h
12b20 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20  eap_limit.  **  
12b30 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61   PRAGMA soft_hea
12b40 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20 2a 2a  p_limit = N.  **
12b50 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74  .  ** Call sqlit
12b60 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
12b70 69 74 36 34 28 4e 29 2e 20 20 52 65 74 75 72 6e  it64(N).  Return
12b80 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 49 66   the result.  If
12b90 20 4e 20 69 73 20 6f 6d 69 74 74 65 64 2c 0a 20   N is omitted,. 
12ba0 20 2a 2a 20 75 73 65 20 2d 31 2e 0a 20 20 2a 2f   ** use -1..  */
12bb0 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
12bc0 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54 3a  SOFT_HEAP_LIMIT:
12bd0 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69   {.    sqlite3_i
12be0 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20  nt64 N;.    if( 
12bf0 7a 52 69 67 68 74 20 26 26 20 73 71 6c 69 74 65  zRight && sqlite
12c00 33 41 74 6f 69 36 34 28 7a 52 69 67 68 74 2c 20  3Atoi64(zRight, 
12c10 26 4e 2c 20 31 30 30 30 30 30 30 2c 20 53 51 4c  &N, 1000000, SQL
12c20 49 54 45 5f 55 54 46 38 29 3d 3d 53 51 4c 49 54  ITE_UTF8)==SQLIT
12c30 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71  E_OK ){.      sq
12c40 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
12c50 6c 69 6d 69 74 36 34 28 4e 29 3b 0a 20 20 20 20  limit64(N);.    
12c60 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
12c70 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 73  leInt(pParse, "s
12c80 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c  oft_heap_limit",
12c90 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68    sqlite3_soft_h
12ca0 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 29  eap_limit64(-1))
12cb0 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
12cc0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
12cd0 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
12ce0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
12cf0 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52 65  ST).  /*.  ** Re
12d00 70 6f 72 74 20 74 68 65 20 63 75 72 72 65 6e 74  port the current
12d10 20 73 74 61 74 65 20 6f 66 20 66 69 6c 65 20 6c   state of file l
12d20 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61  ogs for all data
12d30 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20 63 61 73  bases.  */.  cas
12d40 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53  e PragTyp_LOCK_S
12d50 54 41 54 55 53 3a 20 7b 0a 20 20 20 20 73 74 61  TATUS: {.    sta
12d60 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
12d70 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65  const azLockName
12d80 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e  [] = {.      "un
12d90 6c 6f 63 6b 65 64 22 2c 20 22 73 68 61 72 65 64  locked", "shared
12da0 22 2c 20 22 72 65 73 65 72 76 65 64 22 2c 20 22  ", "reserved", "
12db0 70 65 6e 64 69 6e 67 22 2c 20 22 65 78 63 6c 75  pending", "exclu
12dc0 73 69 76 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20  sive".    };.   
12dd0 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69   int i;.    sqli
12de0 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
12df0 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61  s(v, 2);.    pPa
12e00 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20  rse->nMem = 2;. 
12e10 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
12e20 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
12e30 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 61  OLNAME_NAME, "da
12e40 74 61 62 61 73 65 22 2c 20 53 51 4c 49 54 45 5f  tabase", SQLITE_
12e50 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
12e60 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
12e70 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
12e80 5f 4e 41 4d 45 2c 20 22 73 74 61 74 75 73 22 2c  _NAME, "status",
12e90 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
12ea0 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
12eb0 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
12ec0 20 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b       Btree *pBt;
12ed0 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
12ee0 72 20 2a 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b  r *zState = "unk
12ef0 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74  nown";.      int
12f00 20 6a 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62   j;.      if( db
12f10 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d  ->aDb[i].zName==
12f20 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
12f30 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
12f40 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
12f50 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 64 62  ng8, 0, 1, 0, db
12f60 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  ->aDb[i].zName, 
12f70 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
12f80 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
12f90 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69 66  i].pBt;.      if
12fa0 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69  ( pBt==0 || sqli
12fb0 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
12fc0 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  t)==0 ){.       
12fd0 20 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f 73 65   zState = "close
12fe0 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  d";.      }else 
12ff0 69 66 28 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  if( sqlite3_file
13000 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f  _control(db, i ?
13010 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
13020 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20  e : 0, .        
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
13050 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54  ITE_FCNTL_LOCKST
13060 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45  ATE, &j)==SQLITE
13070 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
13080 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e  zState = azLockN
13090 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a  ame[j];.      }.
130a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
130b0 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
130c0 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
130d0 7a 53 74 61 74 65 2c 20 50 34 5f 53 54 41 54 49  zState, P4_STATI
130e0 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
130f0 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
13100 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
13110 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  2);.    }.    br
13120 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
13130 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
13140 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65 20  AS_CODEC.  case 
13150 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20  PragTyp_KEY: {. 
13160 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20     if( zRight ) 
13170 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64  sqlite3_key_v2(d
13180 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20  b, zDb, zRight, 
13190 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
131a0 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72  zRight));.    br
131b0 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20  eak;.  }.  case 
131c0 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b  PragTyp_REKEY: {
131d0 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
131e0 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f  ) sqlite3_rekey_
131f0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67  v2(db, zDb, zRig
13200 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
13210 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
13220 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63    break;.  }.  c
13230 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b  ase PragTyp_HEXK
13240 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
13250 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75 38  ight ){.      u8
13260 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69 6e   iByte;.      in
13270 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72 20  t i;.      char 
13280 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20  zKey[40];.      
13290 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30  for(i=0, iByte=0
132a0 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29  ; i<sizeof(zKey)
132b0 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49 73 78  *2 && sqlite3Isx
132c0 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d 29  digit(zRight[i])
132d0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
132e0 69 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c 3c  iByte = (iByte<<
132f0 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54  4) + sqlite3HexT
13300 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b  oInt(zRight[i]);
13310 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26  .        if( (i&
13320 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32  1)!=0 ) zKey[i/2
13330 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20 20  ] = iByte;.     
13340 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 4c   }.      if( (zL
13350 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30  eft[3] & 0xf)==0
13360 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  xb ){.        sq
13370 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c  lite3_key_v2(db,
13380 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29   zDb, zKey, i/2)
13390 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
133a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
133b0 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
133c0 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20   zKey, i/2);.   
133d0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
133e0 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
133f0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
13400 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c  ITE_HAS_CODEC) |
13410 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
13420 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20  _ENABLE_CEROD). 
13430 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 43   case PragTyp_AC
13440 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e  TIVATE_EXTENSION
13450 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  S: if( zRight ){
13460 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
13470 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66 28  AS_CODEC.    if(
13480 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
13490 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22 2c  (zRight, "see-",
134a0 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   4)==0 ){.      
134b0 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65  sqlite3_activate
134c0 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d 29  _see(&zRight[4])
134d0 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23  ;.    }.#endif.#
134e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
134f0 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69 66  BLE_CEROD.    if
13500 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
13510 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f 64  p(zRight, "cerod
13520 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 6)==0 ){.   
13530 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
13540 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68  ate_cerod(&zRigh
13550 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  t[6]);.    }.#en
13560 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
13570 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20  .#endif..  } /* 
13580 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47 4d  End of the PRAGM
13590 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72 61  A switch */..pra
135a0 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74  gma_out:.  sqlit
135b0 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c 65  e3DbFree(db, zLe
135c0 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  ft);.  sqlite3Db
135d0 46 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74 29  Free(db, zRight)
135e0 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.}..#endif /* S
135f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
13600 41 20 2a 2f 0a                                   A */.