/ Hex Artifact Content
Login

Artifact ab815d27690d24e87c953355a765edb546c47708:


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 4b 65  i=0; i<pIdx->nKe
c520: 79 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  yCol; i++){.    
c530: 20 20 20 20 69 31 36 20 63 6e 75 6d 20 3d 20 70      i16 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 46 69 6e 64  nt = sqlite3Find
df60: 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a  Table(db, pFK->z
df70: 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20  To, zDb);.      
df80: 20 20 69 66 28 20 70 50 61 72 65 6e 74 3d 3d 30    if( pParent==0
df90: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
dfa0: 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20       pIdx = 0;. 
dfb0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 61         sqlite3Ta
dfc0: 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20  bleLock(pParse, 
dfd0: 69 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e 74 6e  iDb, pParent->tn
dfe0: 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74 2d 3e  um, 0, pParent->
dff0: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20  zName);.        
e000: 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  x = sqlite3FkLoc
e010: 61 74 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c  ateIndex(pParse,
e020: 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26   pParent, pFK, &
e030: 70 49 64 78 2c 20 30 29 3b 0a 20 20 20 20 20 20  pIdx, 0);.      
e040: 20 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a 20 20    if( x==0 ){.  
e050: 20 20 20 20 20 20 20 20 69 66 28 20 70 49 64 78          if( pIdx
e060: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
e070: 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61     sqlite3OpenTa
e080: 62 6c 65 28 70 50 61 72 73 65 2c 20 69 2c 20 69  ble(pParse, i, i
e090: 44 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f 50 5f  Db, pParent, OP_
e0a0: 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20  OpenRead);.     
e0b0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
e0c0: 20 20 20 20 20 20 20 20 4b 65 79 49 6e 66 6f 20          KeyInfo 
e0d0: 2a 70 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 49  *pKey = sqlite3I
e0e0: 6e 64 65 78 4b 65 79 69 6e 66 6f 28 70 50 61 72  ndexKeyinfo(pPar
e0f0: 73 65 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20  se, pIdx);.     
e100: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e110: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4f  beAddOp3(v, OP_O
e120: 70 65 6e 52 65 61 64 2c 20 69 2c 20 70 49 64 78  penRead, i, pIdx
e130: 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b 0a 20 20  ->tnum, iDb);.  
e140: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e150: 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c  3VdbeChangeP4(v,
e160: 20 2d 31 2c 20 28 63 68 61 72 2a 29 70 4b 65 79   -1, (char*)pKey
e170: 2c 20 50 34 5f 4b 45 59 49 4e 46 4f 5f 48 41 4e  , P4_KEYINFO_HAN
e180: 44 4f 46 46 29 3b 0a 20 20 20 20 20 20 20 20 20  DOFF);.         
e190: 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65   }.        }else
e1a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
e1b0: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  0;.          bre
e1c0: 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
e1d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
e1e0: 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72  rt( pParse->nErr
e1f0: 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a  >0 || pFK==0 );.
e200: 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 20        if( pFK ) 
e210: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28  break;.      if(
e220: 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20   pParse->nTab<i 
e230: 29 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d  ) pParse->nTab =
e240: 20 69 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f   i;.      addrTo
e250: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
e260: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69  ddOp1(v, OP_Rewi
e270: 6e 64 2c 20 30 29 3b 0a 20 20 20 20 20 20 66 6f  nd, 0);.      fo
e280: 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d  r(i=1, pFK=pTab-
e290: 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b  >pFKey; pFK; i++
e2a0: 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74  , pFK=pFK->pNext
e2b0: 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70  From){.        p
e2c0: 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33  Parent = sqlite3
e2d0: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46  FindTable(db, pF
e2e0: 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20  K->zTo, zDb);.  
e2f0: 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a        pIdx = 0;.
e300: 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d          aiCols =
e310: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   0;.        if( 
e320: 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20  pParent ){.     
e330: 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
e340: 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50  FkLocateIndex(pP
e350: 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70  arse, pParent, p
e360: 46 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f  FK, &pIdx, &aiCo
e370: 6c 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  ls);.          a
e380: 73 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20  ssert( x==0 );. 
e390: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e3a0: 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65   addrOk = sqlite
e3b0: 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76  3VdbeMakeLabel(v
e3c0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
e3d0: 50 61 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d  Parent && pIdx==
e3e0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  0 ){.          i
e3f0: 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61  nt iKey = pFK->a
e400: 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20  Col[0].iFrom;.  
e410: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
e420: 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c  iKey>=0 && iKey<
e430: 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20  pTab->nCol );.  
e440: 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79          if( iKey
e450: 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b  !=pTab->iPKey ){
e460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e470: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
e480: 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20  , OP_Column, 0, 
e490: 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20  iKey, regRow);. 
e4a0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e4b0: 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
e4c0: 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72  v, pTab, iKey, r
e4d0: 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20  egRow);.        
e4e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e4f0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp2(v, OP_IsNu
e500: 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72  ll, regRow, addr
e510: 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Ok);.           
e520: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e530: 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65 49  p2(v, OP_MustBeI
e540: 6e 74 2c 20 72 65 67 52 6f 77 2c 0a 20 20 20 20  nt, regRow,.    
e550: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e560: 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
e570: 72 28 76 29 2b 33 29 3b 0a 20 20 20 20 20 20 20  r(v)+3);.       
e580: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
e590: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e5a0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f  eAddOp2(v, OP_Ro
e5b0: 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b  wid, 0, regRow);
e5c0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
e5d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e5e0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4e  beAddOp3(v, OP_N
e5f0: 6f 74 45 78 69 73 74 73 2c 20 69 2c 20 30 2c 20  otExists, i, 0, 
e600: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
e610: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e620: 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c  dOp2(v, OP_Goto,
e630: 20 30 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20   0, addrOk);.   
e640: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e650: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 73 71  beJumpHere(v, sq
e660: 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74  lite3VdbeCurrent
e670: 41 64 64 72 28 76 29 2d 32 29 3b 0a 20 20 20 20  Addr(v)-2);.    
e680: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e690: 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c       for(j=0; j<
e6a0: 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b  pFK->nCol; j++){
e6b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e6c0: 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
e6d0: 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20  olumnOfTable(v, 
e6e0: 70 54 61 62 2c 20 30 2c 0a 20 20 20 20 20 20 20  pTab, 0,.       
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e700: 20 20 20 20 20 61 69 43 6f 6c 73 20 3f 20 61 69       aiCols ? ai
e710: 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61  Cols[j] : pFK->a
e720: 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65  Col[j].iFrom, re
e730: 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20  gRow+j);.       
e740: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e750: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e  AddOp2(v, OP_IsN
e760: 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61  ull, regRow+j, a
e770: 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  ddrOk);.        
e780: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
e790: 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20  ( pParent ){.   
e7a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e7b0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
e7c0: 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67  _MakeRecord, reg
e7d0: 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20  Row, pFK->nCol, 
e7e0: 72 65 67 4b 65 79 29 3b 0a 20 20 20 20 20 20 20  regKey);.       
e7f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e800: 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c 0a  ChangeP4(v, -1,.
e810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e820: 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64 65       sqlite3Inde
e830: 78 41 66 66 69 6e 69 74 79 53 74 72 28 76 2c 70  xAffinityStr(v,p
e840: 49 64 78 29 2c 20 50 34 5f 54 52 41 4e 53 49 45  Idx), P4_TRANSIE
e850: 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  NT);.           
e860: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e870: 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e  p4Int(v, OP_Foun
e880: 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65  d, i, addrOk, re
e890: 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  gKey, 0);.      
e8a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
e8b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e8c0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
e8d0: 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 65 73  Rowid, 0, regRes
e8e0: 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20 20 20  ult+1);.        
e8f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e900: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
e910: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c   0, regResult+2,
e920: 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20   0, .           
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
e940: 46 4b 2d 3e 7a 54 6f 2c 20 50 34 5f 54 52 41 4e  FK->zTo, P4_TRAN
e950: 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20  SIENT);.        
e960: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e970: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
e980: 20 69 2d 31 2c 20 72 65 67 52 65 73 75 6c 74 2b   i-1, regResult+
e990: 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  3);.        sqli
e9a0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
e9b0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72   OP_ResultRow, r
e9c0: 65 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20  egResult, 4);.  
e9d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e9e0: 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c  eResolveLabel(v,
e9f0: 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20   addrOk);.      
ea00: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
ea10: 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20  db, aiCols);.   
ea20: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
ea30: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
ea40: 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64 72  OP_Next, 0, addr
ea50: 54 6f 70 2b 31 29 3b 0a 20 20 20 20 20 20 73 71  Top+1);.      sq
ea60: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
ea70: 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20  e(v, addrTop);. 
ea80: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
ea90: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  ;.#endif /* !def
eaa0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
eab0: 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e  _TRIGGER) */.#en
eac0: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
ead0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
eae0: 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66  IGN_KEY) */..#if
eaf0: 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63 61  ndef NDEBUG.  ca
eb00: 73 65 20 50 72 61 67 54 79 70 5f 50 41 52 53 45  se PragTyp_PARSE
eb10: 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20 69  R_TRACE: {.    i
eb20: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
eb30: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
eb40: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
eb50: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73   0) ){.        s
eb60: 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
eb70: 65 28 73 74 64 65 72 72 2c 20 22 70 61 72 73 65  e(stderr, "parse
eb80: 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  r: ");.      }el
eb90: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
eba0: 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 30  te3ParserTrace(0
ebb0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 0);.      }.  
ebc0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
ebd0: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65  .#endif..  /* Re
ebe0: 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45  install the LIKE
ebf0: 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69   and GLOB functi
ec00: 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e  ons.  The varian
ec10: 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75  t of LIKE.  ** u
ec20: 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65  sed will be case
ec30: 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f   sensitive or no
ec40: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  t depending on t
ec50: 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63  he RHS..  */.  c
ec60: 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 53 45  ase PragTyp_CASE
ec70: 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a  _SENSITIVE_LIKE:
ec80: 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
ec90: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
eca0: 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
ecb0: 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69  nctions(db, sqli
ecc0: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
ecd0: 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d  ight, 0));.    }
ece0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23  .  }.  break;..#
ecf0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e  ifndef SQLITE_IN
ed00: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
ed10: 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65  ROR_MAX.# define
ed20: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
ed30: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
ed40: 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69  X 100.#endif..#i
ed50: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
ed60: 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
ed70: 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20 22 71  K.  /* Pragma "q
ed80: 75 69 63 6b 5f 63 68 65 63 6b 22 20 69 73 20 72  uick_check" is r
ed90: 65 64 75 63 65 64 20 76 65 72 73 69 6f 6e 20 6f  educed version o
eda0: 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69 74  f .  ** integrit
edb0: 79 5f 63 68 65 63 6b 20 64 65 73 69 67 6e 65 64  y_check designed
edc0: 20 74 6f 20 64 65 74 65 63 74 20 6d 6f 73 74 20   to detect most 
edd0: 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
ede0: 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74  ion.  ** without
edf0: 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f 76 65   most of the ove
ee00: 72 68 65 61 64 20 6f 66 20 61 20 66 75 6c 6c 20  rhead of a full 
ee10: 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 2e  integrity-check.
ee20: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
ee30: 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43  gTyp_INTEGRITY_C
ee40: 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74 20  HECK: {.    int 
ee50: 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72  i, j, addr, mxEr
ee60: 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20  r;..    /* Code 
ee70: 74 68 61 74 20 61 70 70 65 61 72 73 20 61 74 20  that appears at 
ee80: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
ee90: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 2e 20  ntegrity check. 
eea0: 20 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20 20 20   If no error.   
eeb0: 20 2a 2a 20 6d 65 73 73 61 67 65 73 20 68 61 76   ** messages hav
eec0: 65 20 62 65 65 6e 20 67 65 6e 65 72 61 74 65 64  e been generated
eed0: 2c 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20 4f 74  , output OK.  Ot
eee0: 68 65 72 77 69 73 65 20 6f 75 74 70 75 74 20 74  herwise output t
eef0: 68 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f 72 20  he.    ** error 
ef00: 6d 65 73 73 61 67 65 0a 20 20 20 20 2a 2f 0a 20  message.    */. 
ef10: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
ef20: 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f  VdbeOpList endCo
ef30: 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b  de[] = {.      {
ef40: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20   OP_AddImm,     
ef50: 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   1, 0,        0}
ef60: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
ef70: 20 20 20 7b 20 4f 50 5f 49 66 4e 65 67 2c 20 20     { OP_IfNeg,  
ef80: 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20       1, 0,      
ef90: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
efa0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69  .      { OP_Stri
efb0: 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20  ng8,     0, 3,  
efc0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
efd0: 32 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  2 */.      { OP_
efe0: 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20  ResultRow,   3, 
eff0: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  1,        0},.  
f000: 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73    };..    int is
f010: 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33  Quick = (sqlite3
f020: 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d  Tolower(zLeft[0]
f030: 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a  )=='q');..    /*
f040: 20 49 66 20 74 68 65 20 50 52 41 47 4d 41 20 63   If the PRAGMA c
f050: 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68  ommand was of th
f060: 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c  e form "PRAGMA <
f070: 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68  db>.integrity_ch
f080: 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65  eck",.    ** the
f090: 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20  n iDb is set to 
f0a0: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
f0b0: 20 64 61 74 61 62 61 73 65 20 69 64 65 6e 74 69   database identi
f0c0: 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20  fied by <db>..  
f0d0: 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73    ** In this cas
f0e0: 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  e, the integrity
f0f0: 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62   of database iDb
f100: 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65   only is verifie
f110: 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20  d by.    ** the 
f120: 56 44 42 45 20 63 72 65 61 74 65 64 20 62 65 6c  VDBE created bel
f130: 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ow..    **.    *
f140: 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  * Otherwise, if 
f150: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  the command was 
f160: 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69  simply "PRAGMA i
f170: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20  ntegrity_check" 
f180: 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47  (or.    ** "PRAG
f190: 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29  MA quick_check")
f1a0: 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65  , then iDb is se
f1b0: 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20  t to 0. In this 
f1c0: 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20  case, set iDb.  
f1d0: 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c    ** to -1 here,
f1e0: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
f1f0: 74 20 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c  t the VDBE shoul
f200: 64 20 76 65 72 69 66 79 20 74 68 65 20 69 6e 74  d verify the int
f210: 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  egrity.    ** of
f220: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
f230: 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20  tabases.  */.   
f240: 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
f250: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
f260: 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a  Db==0 || pId2->z
f270: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32   );.    if( pId2
f280: 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d  ->z==0 ) iDb = -
f290: 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  1;..    /* Initi
f2a0: 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20 70  alize the VDBE p
f2b0: 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50  rogram */.    pP
f2c0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a  arse->nMem = 6;.
f2d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
f2e0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
f2f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f300: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
f310: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
f320: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
f330: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
f340: 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68  ;..    /* Set th
f350: 65 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72 20  e maximum error 
f360: 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45  count */.    mxE
f370: 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rr = SQLITE_INTE
f380: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
f390: 52 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28 20 7a  R_MAX;.    if( z
f3a0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
f3b0: 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a  qlite3GetInt32(z
f3c0: 52 69 67 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a  Right, &mxErr);.
f3d0: 20 20 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c        if( mxErr<
f3e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78  =0 ){.        mx
f3f0: 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54  Err = SQLITE_INT
f400: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
f410: 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a  OR_MAX;.      }.
f420: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
f430: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
f440: 50 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45 72 72  P_Integer, mxErr
f450: 2c 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d  , 1);  /* reg[1]
f460: 20 68 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c 65   holds errors le
f470: 66 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f  ft */..    /* Do
f480: 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68   an integrity ch
f490: 65 63 6b 20 6f 6e 20 65 61 63 68 20 64 61 74 61  eck on each data
f4a0: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20  base file */.   
f4b0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
f4c0: 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nDb; i++){.     
f4d0: 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20   HashElem *x;.  
f4e0: 20 20 20 20 48 61 73 68 20 2a 70 54 62 6c 73 3b      Hash *pTbls;
f4f0: 0a 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d  .      int cnt =
f500: 20 30 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 4f   0;..      if( O
f510: 4d 49 54 5f 54 45 4d 50 44 42 20 26 26 20 69 3d  MIT_TEMPDB && i=
f520: 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =1 ) continue;. 
f530: 20 20 20 20 20 69 66 28 20 69 44 62 3e 3d 30 20       if( iDb>=0 
f540: 26 26 20 69 21 3d 69 44 62 20 29 20 63 6f 6e 74  && i!=iDb ) cont
f550: 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c  inue;..      sql
f560: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
f570: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b  hema(pParse, i);
f580: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
f590: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
f5a0: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
f5b0: 20 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75 74 20   /* Halt if out 
f5c0: 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20  of errors */.   
f5d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f5e0: 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  dOp2(v, OP_Halt,
f5f0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71   0, 0);.      sq
f600: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
f610: 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20  e(v, addr);..   
f620: 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65     /* Do an inte
f630: 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20 74  grity check of t
f640: 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20 20  he B-Tree.      
f650: 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65 67 69  **.      ** Begi
f660: 6e 20 62 79 20 66 69 6c 6c 69 6e 67 20 72 65 67  n by filling reg
f670: 69 73 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e 2e  isters 2, 3, ...
f680: 20 77 69 74 68 20 74 68 65 20 72 6f 6f 74 20 70   with the root p
f690: 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20 20  ages numbers.   
f6a0: 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61     ** for all ta
f6b0: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
f6c0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
f6d0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
f6e0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
f6f0: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
f700: 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20 20  db, i, 0) );.   
f710: 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e     pTbls = &db->
f720: 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[i].pSchema->
f730: 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20 66  tblHash;.      f
f740: 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46  or(x=sqliteHashF
f750: 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b 20  irst(pTbls); x; 
f760: 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  x=sqliteHashNext
f770: 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61  (x)){.        Ta
f780: 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69  ble *pTab = sqli
f790: 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20  teHashData(x);. 
f7a0: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49         Index *pI
f7b0: 64 78 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  dx;.        sqli
f7c0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
f7d0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54 61   OP_Integer, pTa
f7e0: 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b  b->tnum, 2+cnt);
f7f0: 0a 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a  .        cnt++;.
f800: 20 20 20 20 20 20 20 20 66 6f 72 28 70 49 64 78          for(pIdx
f810: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
f820: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
f830: 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20  pNext){.        
f840: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
f850: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
f860: 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 32  r, pIdx->tnum, 2
f870: 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  +cnt);.         
f880: 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20   cnt++;.        
f890: 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  }.      }..     
f8a0: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75   /* Make sure su
f8b0: 66 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20  fficient number 
f8c0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 68 61 76  of registers hav
f8d0: 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
f8e0: 20 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65   */.      pParse
f8f0: 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50  ->nMem = MAX( pP
f900: 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b  arse->nMem, cnt+
f910: 37 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  7 );..      /* D
f920: 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74  o the b-tree int
f930: 65 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f  egrity checks */
f940: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f950: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49  beAddOp3(v, OP_I
f960: 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63  ntegrityCk, 2, c
f970: 6e 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  nt, 1);.      sq
f980: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
f990: 35 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20  5(v, (u8)i);.   
f9a0: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
f9b0: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
f9c0: 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 0a 20 20  P_IsNull, 2);.  
f9d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f9e0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
f9f0: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20  ng8, 0, 3, 0,.  
fa00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50         sqlite3MP
fa10: 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69  rintf(db, "*** i
fa20: 6e 20 64 61 74 61 62 61 73 65 20 25 73 20 2a 2a  n database %s **
fa30: 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  *\n", db->aDb[i]
fa40: 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20  .zName),.       
fa50: 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20    P4_DYNAMIC);. 
fa60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fa70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 6f 76  AddOp2(v, OP_Mov
fa80: 65 2c 20 32 2c 20 34 29 3b 0a 20 20 20 20 20 20  e, 2, 4);.      
fa90: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
faa0: 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
fab0: 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20 20 20  4, 3, 2);.      
fac0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
fad0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
fae0: 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 2, 1);.      
faf0: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
fb00: 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20  ere(v, addr);.. 
fb10: 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
fb20: 65 20 61 6c 6c 20 74 68 65 20 69 6e 64 69 63 65  e all the indice
fb30: 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65  s are constructe
fb40: 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20  d correctly..   
fb50: 20 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28     */.      for(
fb60: 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  x=sqliteHashFirs
fb70: 74 28 70 54 62 6c 73 29 3b 20 78 20 26 26 20 21  t(pTbls); x && !
fb80: 69 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c 69 74  isQuick; x=sqlit
fb90: 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20  eHashNext(x)){. 
fba0: 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54         Table *pT
fbb0: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
fbc0: 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20  ata(x);.        
fbd0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
fbe0: 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70       int loopTop
fbf0: 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ;..        if( p
fc00: 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29  Tab->pIndex==0 )
fc10: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
fc20: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
fc30: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
fc40: 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a  P_IfPos, 1);  /*
fc50: 20 53 74 6f 70 20 69 66 20 6f 75 74 20 6f 66 20   Stop if out of 
fc60: 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20  errors */.      
fc70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
fc80: 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20  Op2(v, OP_Halt, 
fc90: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  0, 0);.        s
fca0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
fcb0: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20  re(v, addr);.   
fcc0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72       sqlite3Expr
fcd0: 43 61 63 68 65 43 6c 65 61 72 28 70 50 61 72 73  CacheClear(pPars
fce0: 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  e);.        sqli
fcf0: 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49  te3OpenTableAndI
fd00: 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c 20 70  ndices(pParse, p
fd10: 54 61 62 2c 20 31 2c 20 4f 50 5f 4f 70 65 6e 52  Tab, 1, OP_OpenR
fd20: 65 61 64 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  ead);.        fo
fd30: 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
fd40: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
fd50: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
fd60: 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
fd70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
fd80: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
fd90: 72 2c 20 30 2c 20 37 2b 6a 29 3b 20 2f 2a 20 69  r, 0, 7+j); /* i
fda0: 6e 64 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75  ndex entries cou
fdb0: 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20  nter */.        
fdc0: 7d 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65  }.        pParse
fdd0: 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 70 50 61  ->nMem = MAX(pPa
fde0: 72 73 65 2d 3e 6e 4d 65 6d 2c 20 37 2b 6a 29 3b  rse->nMem, 7+j);
fdf0: 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70  .        loopTop
fe00: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
fe10: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e  dOp2(v, OP_Rewin
fe20: 64 2c 20 31 2c 20 30 29 20 2b 20 31 3b 0a 20 20  d, 1, 0) + 1;.  
fe30: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
fe40: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
fe50: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
fe60: 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a  x->pNext, j++){.
fe70: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d            int jm
fe80: 70 32 2c 20 6a 6d 70 33 3b 0a 20 20 20 20 20 20  p2, jmp3;.      
fe90: 20 20 20 20 69 6e 74 20 72 31 3b 0a 20 20 20 20      int r1;.    
fea0: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
feb0: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 69 64  st VdbeOpList id
fec0: 78 45 72 72 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  xErr[] = {.     
fed0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 41 64 64 49         { OP_AddI
fee0: 6d 6d 2c 20 20 20 20 20 20 31 2c 20 2d 31 2c 20  mm,      1, -1, 
fef0: 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20   0},.           
ff00: 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20   { OP_String8,  
ff10: 20 20 20 30 2c 20 20 33 2c 20 20 30 7d 2c 20 20     0,  3,  0},  
ff20: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
ff30: 20 20 20 20 20 20 7b 20 4f 50 5f 52 6f 77 69 64        { OP_Rowid
ff40: 2c 20 20 20 20 20 20 20 31 2c 20 20 34 2c 20 20  ,       1,  4,  
ff50: 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  0},.            
ff60: 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20  { OP_String8,   
ff70: 20 20 30 2c 20 20 35 2c 20 20 30 7d 2c 20 20 20    0,  5,  0},   
ff80: 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20   /* 3 */.       
ff90: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
ffa0: 38 2c 20 20 20 20 20 30 2c 20 20 36 2c 20 20 30  8,     0,  6,  0
ffb0: 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20  },    /* 4 */.  
ffc0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43            { OP_C
ffd0: 6f 6e 63 61 74 2c 20 20 20 20 20 20 34 2c 20 20  oncat,      4,  
ffe0: 33 2c 20 20 33 7d 2c 0a 20 20 20 20 20 20 20 20  3,  3},.        
fff0: 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c      { OP_Concat,
10000 20 20 20 20 20 20 35 2c 20 20 33 2c 20 20 33 7d        5,  3,  3}
10010 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  ,.            { 
10020 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20 20  OP_Concat,      
10030 36 2c 20 20 33 2c 20 20 33 7d 2c 0a 20 20 20 20  6,  3,  3},.    
10040 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73          { OP_Res
10050 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 20 31 2c  ultRow,   3,  1,
10060 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20    0},.          
10070 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20    { OP_IfPos,   
10080 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d 2c 20      1,  0,  0}, 
10090 20 20 20 2f 2a 20 39 20 2a 2f 0a 20 20 20 20 20     /* 9 */.     
100a0 20 20 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74         { OP_Halt
100b0 2c 20 20 20 20 20 20 20 20 30 2c 20 20 30 2c 20  ,        0,  0, 
100c0 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 7d   0},.          }
100d0 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31 20 3d  ;.          r1 =
100e0 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
100f0 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65 2c  IndexKey(pParse,
10100 20 70 49 64 78 2c 20 31 2c 20 33 2c 20 30 2c 20   pIdx, 1, 3, 0, 
10110 26 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20  &jmp3);.        
10120 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10130 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
10140 2c 20 37 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20 69  , 7+j, 1);  /* i
10150 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72 79 20 63  ncrement entry c
10160 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  ount */.        
10170 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33    jmp2 = sqlite3
10180 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c  VdbeAddOp4Int(v,
10190 20 4f 50 5f 46 6f 75 6e 64 2c 20 6a 2b 32 2c 20   OP_Found, j+2, 
101a0 30 2c 20 72 31 2c 20 70 49 64 78 2d 3e 6e 4b 65  0, r1, pIdx->nKe
101b0 79 43 6f 6c 2b 31 29 3b 0a 20 20 20 20 20 20 20  yCol+1);.       
101c0 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
101d0 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
101e0 2c 20 41 72 72 61 79 53 69 7a 65 28 69 64 78 45  , ArraySize(idxE
101f0 72 72 29 2c 20 69 64 78 45 72 72 29 3b 0a 20 20  rr), idxErr);.  
10200 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10210 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 61  dbeChangeP4(v, a
10220 64 64 72 2b 31 2c 20 22 72 6f 77 69 64 20 22 2c  ddr+1, "rowid ",
10230 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
10240 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10250 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 61 64  beChangeP4(v, ad
10260 64 72 2b 33 2c 20 22 20 6d 69 73 73 69 6e 67 20  dr+3, " missing 
10270 66 72 6f 6d 20 69 6e 64 65 78 20 22 2c 20 50 34  from index ", P4
10280 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
10290 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
102a0 68 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b  hangeP4(v, addr+
102b0 34 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20  4, pIdx->zName, 
102c0 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  P4_TRANSIENT);. 
102d0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
102e0 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
102f0 61 64 64 72 2b 39 29 3b 0a 20 20 20 20 20 20 20  addr+9);.       
10300 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
10310 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b  mpHere(v, jmp2);
10320 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10330 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62  e3VdbeResolveLab
10340 65 6c 28 76 2c 20 6a 6d 70 33 29 3b 0a 20 20 20  el(v, jmp3);.   
10350 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
10360 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10370 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 31 2c 20  (v, OP_Next, 1, 
10380 6c 6f 6f 70 54 6f 70 29 3b 0a 20 20 20 20 20 20  loopTop);.      
10390 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
103a0 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70  pHere(v, loopTop
103b0 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  -1);.#ifndef SQL
103c0 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
103d0 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c 69  UNT.        sqli
103e0 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
103f0 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
10400 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20  2, 0, .         
10410 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72 6f              "wro
10420 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
10430 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53  in index ", P4_S
10440 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
10450 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
10460 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
10470 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
10480 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
10490 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
104a0 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
104b0 72 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  r(v);.          
104c0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
104d0 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  2(v, OP_IfPos, 1
104e0 2c 20 61 64 64 72 2b 32 29 3b 0a 20 20 20 20 20  , addr+2);.     
104f0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10500 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c  AddOp2(v, OP_Hal
10510 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  t, 0, 0);.      
10520 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10530 64 64 4f 70 32 28 76 2c 20 4f 50 5f 43 6f 75 6e  ddOp2(v, OP_Coun
10540 74 2c 20 6a 2b 32 2c 20 33 29 3b 0a 20 20 20 20  t, j+2, 3);.    
10550 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10560 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71  eAddOp3(v, OP_Eq
10570 2c 20 37 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33  , 7+j, addr+8, 3
10580 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10590 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
105a0 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
105b0 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  -1);.          s
105c0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
105d0 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
105e0 30 2c 20 33 2c 20 30 2c 20 70 49 64 78 2d 3e 7a  0, 3, 0, pIdx->z
105f0 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45  Name, P4_TRANSIE
10600 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  NT);.          s
10610 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
10620 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33  (v, OP_Concat, 3
10630 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20 20  , 2, 7);.       
10640 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10650 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
10660 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20  tRow, 7, 1);.   
10670 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a       }.#endif /*
10680 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
10690 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20  EECOUNT */.     
106a0 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61 64   } .    }.    ad
106b0 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
106c0 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
106d0 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c  aySize(endCode),
106e0 20 65 6e 64 43 6f 64 65 29 3b 0a 20 20 20 20 73   endCode);.    s
106f0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
10700 50 32 28 76 2c 20 61 64 64 72 2c 20 2d 6d 78 45  P2(v, addr, -mxE
10710 72 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  rr);.    sqlite3
10720 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
10730 61 64 64 72 2b 31 29 3b 0a 20 20 20 20 73 71 6c  addr+1);.    sql
10740 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34  ite3VdbeChangeP4
10750 28 76 2c 20 61 64 64 72 2b 32 2c 20 22 6f 6b 22  (v, addr+2, "ok"
10760 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
10770 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
10780 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
10790 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
107a0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
107b0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
107c0 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
107d0 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a 20  A encoding.  ** 
107e0 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
107f0 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75 74 66  g = "utf-8"|"utf
10800 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65 22 7c  -16"|"utf-16le"|
10810 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a 2a 0a  "utf-16be".  **.
10820 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69 72 73    ** In its firs
10830 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70 72 61  t form, this pra
10840 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68 65 20  gma returns the 
10850 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20  encoding of the 
10860 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61 62 61  main.  ** databa
10870 73 65 2e 20 49 66 20 74 68 65 20 64 61 74 61 62  se. If the datab
10880 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ase is not initi
10890 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20 69 6e  alized, it is in
108a0 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20  itialized now.. 
108b0 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 65 63   **.  ** The sec
108c0 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 69 73  ond form of this
108d0 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e 6f 2d   pragma is a no-
108e0 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e 20 64  op if the main d
108f0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20 2a  atabase file.  *
10900 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65 61 64  * has not alread
10910 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  y been initializ
10920 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
10930 20 69 74 20 73 65 74 73 20 74 68 65 20 64 65 66   it sets the def
10940 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f 64 69  ault.  ** encodi
10950 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ng that will be 
10960 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61 69  used for the mai
10970 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
10980 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a 20 20  if a new file.  
10990 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e 20 49  ** is created. I
109a0 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6d 61  f an existing ma
109b0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
109c0 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68 65 6e   is opened, then
109d0 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c   the.  ** defaul
109e0 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  t text encoding 
109f0 66 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e 67  for the existing
10a00 20 64 61 74 61 62 61 73 65 20 69 73 20 75 73 65   database is use
10a10 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e  d..  ** .  ** In
10a20 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77 20 64   all cases new d
10a30 61 74 61 62 61 73 65 73 20 63 72 65 61 74 65 64  atabases created
10a40 20 75 73 69 6e 67 20 74 68 65 20 41 54 54 41 43   using the ATTAC
10a50 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a 20 20  H command are.  
10a60 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  ** created to us
10a70 65 20 74 68 65 20 73 61 6d 65 20 64 65 66 61 75  e the same defau
10a80 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  lt text encoding
10a90 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   as the main dat
10aa0 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a 20 74  abase. If.  ** t
10ab0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
10ac0 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 69 6e   has not been in
10ad0 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f 6f 72  itialized and/or
10ae0 20 63 72 65 61 74 65 64 20 77 68 65 6e 20 41 54   created when AT
10af0 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65 78 65  TACH.  ** is exe
10b00 63 75 74 65 64 2c 20 74 68 69 73 20 69 73 20 64  cuted, this is d
10b10 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65 20 41  one before the A
10b20 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f 6e 2e  TTACH operation.
10b30 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74 68  .  **.  ** In th
10b40 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74 68  e second form th
10b50 69 73 20 70 72 61 67 6d 61 20 73 65 74 73 20 74  is pragma sets t
10b60 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
10b70 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e 0a 20   to be used in. 
10b80 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61 73 65   ** new database
10b90 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 75   files created u
10ba0 73 69 6e 67 20 74 68 69 73 20 64 61 74 61 62 61  sing this databa
10bb0 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20 69 73  se handle. It is
10bc0 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65 66 75   only.  ** usefu
10bd0 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69 6d 6d  l if invoked imm
10be0 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 74  ediately after t
10bf0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
10c00 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50   i.  */.  case P
10c10 72 61 67 54 79 70 5f 45 4e 43 4f 44 49 4e 47 3a  ragTyp_ENCODING:
10c20 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
10c30 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61  nst struct EncNa
10c40 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20  me {.      char 
10c50 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 75 38  *zName;.      u8
10c60 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e 63 6e   enc;.    } encn
10c70 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  ames[] = {.     
10c80 20 7b 20 22 55 54 46 38 22 2c 20 20 20 20 20 53   { "UTF8",     S
10c90 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20  QLITE_UTF8      
10ca0 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
10cb0 46 2d 38 22 2c 20 20 20 20 53 51 4c 49 54 45 5f  F-8",    SQLITE_
10cc0 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 20 20  UTF8        },  
10cd0 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
10ce0 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [1] */.      
10cf0 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c 20 53 51  { "UTF-16le", SQ
10d00 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20  LITE_UTF16LE    
10d10 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
10d20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20  element [2] */. 
10d30 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 62 65       { "UTF-16be
10d40 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  ", SQLITE_UTF16B
10d50 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73  E     },  /* Mus
10d60 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 33 5d  t be element [3]
10d70 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
10d80 31 36 6c 65 22 2c 20 20 53 51 4c 49 54 45 5f 55  16le",  SQLITE_U
10d90 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20  TF16LE     },.  
10da0 20 20 20 20 7b 20 22 55 54 46 31 36 62 65 22 2c      { "UTF16be",
10db0 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
10dc0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
10dd0 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20 20 20  "UTF-16",   0   
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
10df0 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31  , /* SQLITE_UTF1
10e00 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20  6NATIVE */.     
10e10 20 7b 20 22 55 54 46 31 36 22 2c 20 20 20 20 30   { "UTF16",    0
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55    }, /* SQLITE_U
10e40 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20  TF16NATIVE */.  
10e50 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20 20 20      { 0, 0 }.   
10e60 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20 73 74   };.    const st
10e70 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a 70 45  ruct EncName *pE
10e80 6e 63 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  nc;.    if( !zRi
10e90 67 68 74 20 29 7b 20 20 20 20 2f 2a 20 22 50 52  ght ){    /* "PR
10ea0 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22 20 2a  AGMA encoding" *
10eb0 2f 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  /.      if( sqli
10ec0 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
10ed0 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
10ee0 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 73  gma_out;.      s
10ef0 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
10f00 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
10f10 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
10f20 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
10f30 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 65 6e 63  LNAME_NAME, "enc
10f40 6f 64 69 6e 67 22 2c 20 53 51 4c 49 54 45 5f 53  oding", SQLITE_S
10f50 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
10f60 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10f70 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
10f80 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73 73 65  , 1);.      asse
10f90 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
10fa0 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53  ITE_UTF8].enc==S
10fb0 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20  QLITE_UTF8 );.  
10fc0 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e      assert( encn
10fd0 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31  ames[SQLITE_UTF1
10fe0 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45  6LE].enc==SQLITE
10ff0 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 20 20  _UTF16LE );.    
11000 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d    assert( encnam
11010 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 42  es[SQLITE_UTF16B
11020 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  E].enc==SQLITE_U
11030 54 46 31 36 42 45 20 29 3b 0a 20 20 20 20 20 20  TF16BE );.      
11040 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
11050 65 50 34 28 76 2c 20 2d 31 2c 20 65 6e 63 6e 61  eP4(v, -1, encna
11060 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e  mes[ENC(pParse->
11070 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53  db)].zName, P4_S
11080 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
11090 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
110a0 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
110b0 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 65 6c 73   1, 1);.    }els
110c0 65 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e{              
110d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22 50 52            /* "PR
110e0 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20  AGMA encoding = 
110f0 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  XXX" */.      /*
11100 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74 68 65   Only change the
11110 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65   value of sqlite
11120 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61 74 61  .enc if the data
11130 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73 20 6e  base handle is n
11140 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 69 74  ot.      ** init
11150 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68 65 20  ialized. If the 
11160 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 65 78  main database ex
11170 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20 73 71  ists, the new sq
11180 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20  lite.enc value. 
11190 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20       ** will be 
111a0 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68 65 6e  overwritten when
111b0 20 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e   the schema is n
111c0 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66 20 69  ext loaded. If i
111d0 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20  t does not.     
111e0 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78 69 73   ** already exis
111f0 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 63  ts, it will be c
11200 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
11210 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67 20 76  e new encoding v
11220 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  alue..      */. 
11230 20 20 20 20 20 69 66 28 20 0a 20 20 20 20 20 20       if( .      
11240 20 20 21 28 44 62 48 61 73 50 72 6f 70 65 72 74    !(DbHasPropert
11250 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63 68 65  y(db, 0, DB_Sche
11260 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20  maLoaded)) || . 
11270 20 20 20 20 20 20 20 44 62 48 61 73 50 72 6f 70         DbHasProp
11280 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 45  erty(db, 0, DB_E
11290 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29 7b 0a  mpty) .      ){.
112a0 20 20 20 20 20 20 20 20 66 6f 72 28 70 45 6e 63          for(pEnc
112b0 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70  =&encnames[0]; p
112c0 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63  Enc->zName; pEnc
112d0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
112e0 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
112f0 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70 45 6e  ICmp(zRight, pEn
11300 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20  c->zName) ){.   
11310 20 20 20 20 20 20 20 20 20 45 4e 43 28 70 50 61           ENC(pPa
11320 72 73 65 2d 3e 64 62 29 20 3d 20 70 45 6e 63 2d  rse->db) = pEnc-
11330 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63  >enc ? pEnc->enc
11340 20 3a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e   : SQLITE_UTF16N
11350 41 54 49 56 45 3b 0a 20 20 20 20 20 20 20 20 20  ATIVE;.         
11360 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
11370 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
11380 20 20 20 20 20 20 20 20 69 66 28 20 21 70 45 6e          if( !pEn
11390 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20  c->zName ){.    
113a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
113b0 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 75  orMsg(pParse, "u
113c0 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f 64  nsupported encod
113d0 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67 68 74  ing: %s", zRight
113e0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
113f0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
11400 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
11410 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  * SQLITE_OMIT_UT
11420 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  F16 */..#ifndef 
11430 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
11440 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
11450 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AS.  /*.  **   P
11460 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
11470 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a  ]schema_version.
11480 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
11490 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f  atabase.]schema_
114a0 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67  version = <integ
114b0 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  er>.  **.  **   
114c0 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
114d0 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20  .]user_version. 
114e0 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
114f0 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72  tabase.]user_ver
11500 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e  sion = <integer>
11510 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  **.  **   PRA
11520 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 66  GMA [database.]f
11530 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20 3d 20  reelist_count = 
11540 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
11550 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
11560 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63 61 74  tabase.]applicat
11570 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52  ion_id.  **   PR
11580 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
11590 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d  application_id =
115a0 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
115b0 20 20 2a 2a 20 54 68 65 20 70 72 61 67 6d 61 27    ** The pragma'
115c0 73 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  s schema_version
115d0 20 61 6e 64 20 75 73 65 72 5f 76 65 72 73 69 6f   and user_versio
115e0 6e 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 65  n are used to se
115f0 74 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74 68  t or get.  ** th
11600 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73  e value of the s
11610 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e  chema-version an
11620 64 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20  d user-version, 
11630 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 42 6f  respectively. Bo
11640 74 68 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65  th.  ** the sche
11650 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 74  ma-version and t
11660 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
11670 61 72 65 20 33 32 2d 62 69 74 20 73 69 67 6e 65  are 32-bit signe
11680 64 20 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20  d integers.  ** 
11690 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
116a0 74 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a 20  tabase header.. 
116b0 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63 68   **.  ** The sch
116c0 65 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73  ema-cookie is us
116d0 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70  ually only manip
116e0 75 6c 61 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c  ulated internall
116f0 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 0a  y by SQLite. It.
11700 20 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e    ** is incremen
11710 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68  ted by SQLite wh
11720 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62  enever the datab
11730 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6d 6f  ase schema is mo
11740 64 69 66 69 65 64 20 28 62 79 0a 20 20 2a 2a 20  dified (by.  ** 
11750 63 72 65 61 74 69 6e 67 20 6f 72 20 64 72 6f 70  creating or drop
11760 70 69 6e 67 20 61 20 74 61 62 6c 65 20 6f 72 20  ping a table or 
11770 69 6e 64 65 78 29 2e 20 54 68 65 20 73 63 68 65  index). The sche
11780 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75 73  ma version is us
11790 65 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74  ed by.  ** SQLit
117a0 65 20 65 61 63 68 20 74 69 6d 65 20 61 20 71 75  e each time a qu
117b0 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64 20  ery is executed 
117c0 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
117d0 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63 68  he internal cach
117e0 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 73 63  e.  ** of the sc
117f0 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20 63  hema used when c
11800 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51 4c  ompiling the SQL
11810 20 71 75 65 72 79 20 6d 61 74 63 68 65 73 20 74   query matches t
11820 68 65 20 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a  he schema of.  *
11830 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  * the database a
11840 67 61 69 6e 73 74 20 77 68 69 63 68 20 74 68 65  gainst which the
11850 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20   compiled query 
11860 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63  is actually exec
11870 75 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65  uted..  ** Subve
11880 72 74 69 6e 67 20 74 68 69 73 20 6d 65 63 68 61  rting this mecha
11890 6e 69 73 6d 20 62 79 20 75 73 69 6e 67 20 22 50  nism by using "P
118a0 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65 72  RAGMA schema_ver
118b0 73 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a  sion" to modify.
118c0 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d    ** the schema-
118d0 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e  version is poten
118e0 74 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73  tially dangerous
118f0 20 61 6e 64 20 6d 61 79 20 6c 65 61 64 20 74 6f   and may lead to
11900 20 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72   program.  ** cr
11910 61 73 68 65 73 20 6f 72 20 64 61 74 61 62 61 73  ashes or databas
11920 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73  e corruption. Us
11930 65 20 77 69 74 68 20 63 61 75 74 69 6f 6e 21 0a  e with caution!.
11940 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73    **.  ** The us
11950 65 72 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f  er-version is no
11960 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  t used internall
11970 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74 20  y by SQLite. It 
11980 6d 61 79 20 62 65 20 75 73 65 64 20 62 79 0a 20  may be used by. 
11990 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e 73   ** applications
119a0 20 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73 65   for any purpose
119b0 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
119c0 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
119d0 55 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 43  UE: {.    int iC
119e0 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 43 6f 6f 6b  ookie;   /* Cook
119f0 69 65 20 69 6e 64 65 78 2e 20 31 20 66 6f 72 20  ie index. 1 for 
11a00 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 2c 20 36  schema-cookie, 6
11a10 20 66 6f 72 20 75 73 65 72 2d 63 6f 6f 6b 69 65   for user-cookie
11a20 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33  . */.    sqlite3
11a30 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c  VdbeUsesBtree(v,
11a40 20 69 44 62 29 3b 0a 20 20 20 20 73 77 69 74 63   iDb);.    switc
11a50 68 28 20 7a 4c 65 66 74 5b 30 5d 20 29 7b 0a 20  h( zLeft[0] ){. 
11a60 20 20 20 20 20 63 61 73 65 20 27 61 27 3a 20 63       case 'a': c
11a70 61 73 65 20 27 41 27 3a 0a 20 20 20 20 20 20 20  ase 'A':.       
11a80 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45   iCookie = BTREE
11a90 5f 41 50 50 4c 49 43 41 54 49 4f 4e 5f 49 44 3b  _APPLICATION_ID;
11aa0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
11ab0 20 20 20 20 20 20 63 61 73 65 20 27 66 27 3a 20        case 'f': 
11ac0 63 61 73 65 20 27 46 27 3a 0a 20 20 20 20 20 20  case 'F':.      
11ad0 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45    iCookie = BTRE
11ae0 45 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f 55 4e  E_FREE_PAGE_COUN
11af0 54 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  T;.        break
11b00 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27 73 27  ;.      case 's'
11b10 3a 20 63 61 73 65 20 27 53 27 3a 0a 20 20 20 20  : case 'S':.    
11b20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54      iCookie = BT
11b30 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
11b40 4f 4e 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  ON;.        brea
11b50 6b 3b 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74  k;.      default
11b60 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69  :.        iCooki
11b70 65 20 3d 20 42 54 52 45 45 5f 55 53 45 52 5f 56  e = BTREE_USER_V
11b80 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20 20 20  ERSION;.        
11b90 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20  break;.    }..  
11ba0 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20    if( zRight && 
11bb0 69 43 6f 6f 6b 69 65 21 3d 42 54 52 45 45 5f 46  iCookie!=BTREE_F
11bc0 52 45 45 5f 50 41 47 45 5f 43 4f 55 4e 54 20 29  REE_PAGE_COUNT )
11bd0 7b 0a 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65  {.      /* Write
11be0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
11bf0 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20  ookie value */. 
11c00 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
11c10 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74  t VdbeOpList set
11c20 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20  Cookie[] = {.   
11c30 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61       { OP_Transa
11c40 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20 31 2c  ction,    0,  1,
11c50 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
11c60 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e  .        { OP_In
11c70 74 65 67 65 72 2c 20 20 20 20 20 20 20 20 30 2c  teger,        0,
11c80 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    1,  0},    /* 
11c90 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  1 */.        { O
11ca0 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20  P_SetCookie,    
11cb0 20 20 30 2c 20 20 30 2c 20 20 31 7d 2c 20 20 20    0,  0,  1},   
11cc0 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 7d   /* 2 */.      }
11cd0 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64 72  ;.      int addr
11ce0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
11cf0 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
11d00 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29 2c  Size(setCookie),
11d10 20 73 65 74 43 6f 6f 6b 69 65 29 3b 0a 20 20 20   setCookie);.   
11d20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
11d30 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20  angeP1(v, addr, 
11d40 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
11d50 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
11d60 76 2c 20 61 64 64 72 2b 31 2c 20 73 71 6c 69 74  v, addr+1, sqlit
11d70 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b  e3Atoi(zRight));
11d80 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11d90 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
11da0 64 72 2b 32 2c 20 69 44 62 29 3b 0a 20 20 20 20  dr+2, iDb);.    
11db0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
11dc0 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c  ngeP2(v, addr+2,
11dd0 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d   iCookie);.    }
11de0 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52  else{.      /* R
11df0 65 61 64 20 74 68 65 20 73 70 65 63 69 66 69 65  ead the specifie
11e00 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a  d cookie value *
11e10 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  /.      static c
11e20 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
11e30 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b  readCookie[] = {
11e40 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72  .        { OP_Tr
11e50 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30  ansaction,     0
11e60 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  0,  0},    /*
11e70 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   0 */.        { 
11e80 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20  OP_ReadCookie,  
11e90 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
11ea0 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
11eb0 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
11ec0 77 2c 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20  w,       1,  1, 
11ed0 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20   0}.      };.   
11ee0 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71     int addr = sq
11ef0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
11f00 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
11f10 72 65 61 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61  readCookie), rea
11f20 64 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20  dCookie);.      
11f30 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
11f40 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62  eP1(v, addr, iDb
11f50 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
11f60 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
11f70 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20  addr+1, iDb);.  
11f80 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
11f90 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2b  hangeP3(v, addr+
11fa0 31 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20  1, iCookie);.   
11fb0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
11fc0 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
11fd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11fe0 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
11ff0 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
12000 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52  zLeft, SQLITE_TR
12010 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a  ANSIENT);.    }.
12020 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
12030 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
12040 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  IT_SCHEMA_VERSIO
12050 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  N_PRAGMAS */..#i
12060 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
12070 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
12080 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  DIAGS.  /*.  ** 
12090 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65    PRAGMA compile
120a0 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20  _options.  **.  
120b0 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  ** Return the na
120c0 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69  mes of all compi
120d0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options 
120e0 75 73 65 64 20 69 6e 20 74 68 69 73 20 62 75 69  used in this bui
120f0 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74  ld,.  ** one opt
12100 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a  ion per row..  *
12110 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
12120 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53  _COMPILE_OPTIONS
12130 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20  : {.    int i = 
12140 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  0;.    const cha
12150 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 73 71 6c  r *zOpt;.    sql
12160 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
12170 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 70 50  ls(v, 1);.    pP
12180 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a  arse->nMem = 1;.
12190 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
121a0 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
121b0 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
121c0 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22 2c 20  ompile_option", 
121d0 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
121e0 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f 70 74      while( (zOpt
121f0 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69   = sqlite3_compi
12200 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 2b 2b  leoption_get(i++
12210 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ))!=0 ){.      s
12220 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
12230 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
12240 30 2c 20 31 2c 20 30 2c 20 7a 4f 70 74 2c 20 30  0, 1, 0, zOpt, 0
12250 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
12260 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
12270 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
12280 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
12290 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
122a0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
122b0 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20  ILEOPTION_DIAGS 
122c0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
122d0 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a  TE_OMIT_WAL.  /*
122e0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
122f0 64 61 74 61 62 61 73 65 2e 5d 77 61 6c 5f 63 68  database.]wal_ch
12300 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73 73 69  eckpoint = passi
12310 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72 74 0a  ve|full|restart.
12320 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70    **.  ** Checkp
12330 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62 61 73  oint the databas
12340 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
12350 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b  ragTyp_WAL_CHECK
12360 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74  POINT: {.    int
12370 20 69 42 74 20 3d 20 28 70 49 64 32 2d 3e 7a 3f   iBt = (pId2->z?
12380 69 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 41  iDb:SQLITE_MAX_A
12390 54 54 41 43 48 45 44 29 3b 0a 20 20 20 20 69 6e  TTACHED);.    in
123a0 74 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45  t eMode = SQLITE
123b0 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53  _CHECKPOINT_PASS
123c0 49 56 45 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  IVE;.    if( zRi
123d0 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ght ){.      if(
123e0 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28   sqlite3StrICmp(
123f0 7a 52 69 67 68 74 2c 20 22 66 75 6c 6c 22 29 3d  zRight, "full")=
12400 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d  =0 ){.        eM
12410 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45  ode = SQLITE_CHE
12420 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20  CKPOINT_FULL;.  
12430 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71      }else if( sq
12440 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69  lite3StrICmp(zRi
12450 67 68 74 2c 20 22 72 65 73 74 61 72 74 22 29 3d  ght, "restart")=
12460 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d  =0 ){.        eM
12470 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45  ode = SQLITE_CHE
12480 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 3b  CKPOINT_RESTART;
12490 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
124a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
124b0 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a  tNumCols(v, 3);.
124c0 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
124d0 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 3;.    sqlite
124e0 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
124f0 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
12500 4d 45 2c 20 22 62 75 73 79 22 2c 20 53 51 4c 49  ME, "busy", SQLI
12510 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
12520 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
12530 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
12540 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 67 22 2c  AME_NAME, "log",
12550 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
12560 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
12570 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
12580 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
12590 63 68 65 63 6b 70 6f 69 6e 74 65 64 22 2c 20 53  checkpointed", S
125a0 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a  QLITE_STATIC);..
125b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
125c0 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65 63  ddOp3(v, OP_Chec
125d0 6b 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f  kpoint, iBt, eMo
125e0 64 65 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  de, 1);.    sqli
125f0 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
12600 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
12610 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  , 3);.  }.  brea
12620 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  k;..  /*.  **   
12630 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63  PRAGMA wal_autoc
12640 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20  heckpoint.  **  
12650 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f   PRAGMA wal_auto
12660 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20  checkpoint = N. 
12670 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75   **.  ** Configu
12680 72 65 20 61 20 64 61 74 61 62 61 73 65 20 63 6f  re a database co
12690 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f  nnection to auto
126a0 6d 61 74 69 63 61 6c 6c 79 20 63 68 65 63 6b 70  matically checkp
126b0 6f 69 6e 74 20 61 20 64 61 74 61 62 61 73 65 0a  oint a database.
126c0 20 20 2a 2a 20 61 66 74 65 72 20 61 63 63 75 6d    ** after accum
126d0 75 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d 65 73  ulating N frames
126e0 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20   in the log. Or 
126f0 71 75 65 72 79 20 66 6f 72 20 74 68 65 20 63 75  query for the cu
12700 72 72 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a  rrent value.  **
12710 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61   of N..  */.  ca
12720 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41  se PragTyp_WAL_A
12730 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b  UTOCHECKPOINT: {
12740 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
12750 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
12760 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f  _wal_autocheckpo
12770 69 6e 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41  int(db, sqlite3A
12780 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
12790 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
127a0 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
127b0 22 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f  "wal_autocheckpo
127c0 69 6e 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62  int", .       db
127d0 2d 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d  ->xWalCallback==
127e0 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
127f0 74 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20  tHook ? .       
12800 20 20 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54      SQLITE_PTR_T
12810 4f 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72  O_INT(db->pWalAr
12820 67 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62  g) : 0);.  }.  b
12830 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
12840 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
12850 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20  shrink_memory.  
12860 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 61  **.  ** This pra
12870 67 6d 61 20 61 74 74 65 6d 70 74 73 20 74 6f 20  gma attempts to 
12880 66 72 65 65 20 61 73 20 6d 75 63 68 20 6d 65 6d  free as much mem
12890 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20  ory as possible 
128a0 66 72 6f 6d 20 74 68 65 0a 20 20 2a 2a 20 63 75  from the.  ** cu
128b0 72 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63  rrent database c
128c0 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a  onnection..  */.
128d0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53    case PragTyp_S
128e0 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a  HRINK_MEMORY: {.
128f0 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 72      sqlite3_db_r
12900 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 64 62  elease_memory(db
12910 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
12920 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  }..  /*.  **   P
12930 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f  RAGMA busy_timeo
12940 75 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  ut.  **   PRAGMA
12950 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20   busy_timeout = 
12960 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c  N.  **.  ** Call
12970 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
12980 6d 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20 20 52  meout(db, N).  R
12990 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e  eturn the curren
129a0 74 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a  t timeout value.
129b0 20 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73 20 73    ** if one is s
129c0 65 74 2e 20 20 49 66 20 6e 6f 20 62 75 73 79 20  et.  If no busy 
129d0 68 61 6e 64 6c 65 72 20 6f 72 20 61 20 64 69 66  handler or a dif
129e0 66 65 72 65 6e 74 20 62 75 73 79 20 68 61 6e 64  ferent busy hand
129f0 6c 65 72 20 69 73 20 73 65 74 0a 20 20 2a 2a 20  ler is set.  ** 
12a00 74 68 65 6e 20 30 20 69 73 20 72 65 74 75 72 6e  then 0 is return
12a10 65 64 2e 20 20 53 65 74 74 69 6e 67 20 74 68 65  ed.  Setting the
12a20 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f   busy_timeout to
12a30 20 30 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20   0 or negative. 
12a40 20 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68 65   ** disables the
12a50 20 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20   timeout..  */. 
12a60 20 2f 2a 63 61 73 65 20 50 72 61 67 54 79 70 5f   /*case PragTyp_
12a70 42 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f 20 64  BUSY_TIMEOUT*/ d
12a80 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 61 73  efault: {.    as
12a90 73 65 72 74 28 20 61 50 72 61 67 6d 61 4e 61 6d  sert( aPragmaNam
12aa0 65 73 5b 6d 69 64 5d 2e 65 50 72 61 67 54 79 70  es[mid].ePragTyp
12ab0 3d 3d 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54  ==PragTyp_BUSY_T
12ac0 49 4d 45 4f 55 54 20 29 3b 0a 20 20 20 20 69 66  IMEOUT );.    if
12ad0 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
12ae0 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74    sqlite3_busy_t
12af0 69 6d 65 6f 75 74 28 64 62 2c 20 73 71 6c 69 74  imeout(db, sqlit
12b00 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b  e3Atoi(zRight));
12b10 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
12b20 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
12b30 65 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20 20 64  e, "timeout",  d
12b40 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 29 3b  b->busyTimeout);
12b50 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
12b60 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
12b70 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69  GMA soft_heap_li
12b80 6d 69 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  mit.  **   PRAGM
12b90 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  A soft_heap_limi
12ba0 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  t = N.  **.  ** 
12bb0 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 6f 66  Call sqlite3_sof
12bc0 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e  t_heap_limit64(N
12bd0 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 72  ).  Return the r
12be0 65 73 75 6c 74 2e 20 20 49 66 20 4e 20 69 73 20  esult.  If N is 
12bf0 6f 6d 69 74 74 65 64 2c 0a 20 20 2a 2a 20 75 73  omitted,.  ** us
12c00 65 20 2d 31 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  e -1..  */.  cas
12c10 65 20 50 72 61 67 54 79 70 5f 53 4f 46 54 5f 48  e PragTyp_SOFT_H
12c20 45 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20  EAP_LIMIT: {.   
12c30 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e   sqlite3_int64 N
12c40 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
12c50 20 26 26 20 73 71 6c 69 74 65 33 41 74 6f 69 36   && sqlite3Atoi6
12c60 34 28 7a 52 69 67 68 74 2c 20 26 4e 2c 20 31 30  4(zRight, &N, 10
12c70 30 30 30 30 30 2c 20 53 51 4c 49 54 45 5f 55 54  00000, SQLITE_UT
12c80 46 38 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  F8)==SQLITE_OK )
12c90 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
12ca0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36  soft_heap_limit6
12cb0 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4(N);.    }.    
12cc0 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
12cd0 70 50 61 72 73 65 2c 20 22 73 6f 66 74 5f 68 65  pParse, "soft_he
12ce0 61 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69  ap_limit",  sqli
12cf0 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
12d00 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20 20 20 20  mit64(-1));.    
12d10 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20  break;.  }..#if 
12d20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
12d30 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
12d40 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 20 20  (SQLITE_TEST).  
12d50 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74 20 74  /*.  ** Report t
12d60 68 65 20 63 75 72 72 65 6e 74 20 73 74 61 74 65  he current state
12d70 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f   of file logs fo
12d80 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 0a  r all databases.
12d90 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
12da0 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a  Typ_LOCK_STATUS:
12db0 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
12dc0 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20  nst char *const 
12dd0 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b  azLockName[] = {
12de0 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64  .      "unlocked
12df0 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22 72 65  ", "shared", "re
12e00 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64 69 6e  served", "pendin
12e10 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65 22 0a  g", "exclusive".
12e20 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69      };.    int i
12e30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
12e40 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32  eSetNumCols(v, 2
12e50 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
12e60 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c  Mem = 2;.    sql
12e70 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
12e80 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
12e90 5f 4e 41 4d 45 2c 20 22 64 61 74 61 62 61 73 65  _NAME, "database
12ea0 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
12eb0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
12ec0 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
12ed0 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
12ee0 20 22 73 74 61 74 75 73 22 2c 20 53 51 4c 49 54   "status", SQLIT
12ef0 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66  E_STATIC);.    f
12f00 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
12f10 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42  b; i++){.      B
12f20 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 20 20 20  tree *pBt;.     
12f30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
12f40 61 74 65 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b  ate = "unknown";
12f50 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20  .      int j;.  
12f60 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
12f70 69 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29 20 63 6f  i].zName==0 ) co
12f80 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71  ntinue;.      sq
12f90 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
12fa0 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
12fb0 2c 20 31 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b  , 1, 0, db->aDb[
12fc0 69 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41  i].zName, P4_STA
12fd0 54 49 43 29 3b 0a 20 20 20 20 20 20 70 42 74 20  TIC);.      pBt 
12fe0 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  = db->aDb[i].pBt
12ff0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 42 74 3d  ;.      if( pBt=
13000 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =0 || sqlite3Btr
13010 65 65 50 61 67 65 72 28 70 42 74 29 3d 3d 30 20  eePager(pBt)==0 
13020 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 74 61 74  ){.        zStat
13030 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20  e = "closed";.  
13040 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71      }else if( sq
13050 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
13060 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61  ol(db, i ? db->a
13070 44 62 5b 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c  Db[i].zName : 0,
13080 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 46 43         SQLITE_FC
130b0 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26  NTL_LOCKSTATE, &
130c0 6a 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  j)==SQLITE_OK ){
130d0 0a 20 20 20 20 20 20 20 20 20 7a 53 74 61 74 65  .         zState
130e0 20 3d 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d   = azLockName[j]
130f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
13100 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
13110 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
13120 20 30 2c 20 32 2c 20 30 2c 20 7a 53 74 61 74 65   0, 2, 0, zState
13130 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
13140 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
13150 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
13160 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20  ltRow, 1, 2);.  
13170 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
13180 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65   }.#endif..#ifde
13190 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  f SQLITE_HAS_COD
131a0 45 43 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  EC.  case PragTy
131b0 70 5f 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28  p_KEY: {.    if(
131c0 20 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74 65   zRight ) sqlite
131d0 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  3_key_v2(db, zDb
131e0 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65  , zRight, sqlite
131f0 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74  3Strlen30(zRight
13200 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
13210 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79   }.  case PragTy
13220 70 5f 52 45 4b 45 59 3a 20 7b 0a 20 20 20 20 69  p_REKEY: {.    i
13230 66 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c 69  f( zRight ) sqli
13240 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c  te3_rekey_v2(db,
13250 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73 71   zDb, zRight, sq
13260 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52  lite3Strlen30(zR
13270 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65 61  ight));.    brea
13280 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50 72  k;.  }.  case Pr
13290 61 67 54 79 70 5f 48 45 58 4b 45 59 3a 20 7b 0a  agTyp_HEXKEY: {.
132a0 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
132b0 7b 0a 20 20 20 20 20 20 75 38 20 69 42 79 74 65  {.      u8 iByte
132c0 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20  ;.      int i;. 
132d0 20 20 20 20 20 63 68 61 72 20 7a 4b 65 79 5b 34       char zKey[4
132e0 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  0];.      for(i=
132f0 30 2c 20 69 42 79 74 65 3d 30 3b 20 69 3c 73 69  0, iByte=0; i<si
13300 7a 65 6f 66 28 7a 4b 65 79 29 2a 32 20 26 26 20  zeof(zKey)*2 && 
13310 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
13320 7a 52 69 67 68 74 5b 69 5d 29 3b 20 69 2b 2b 29  zRight[i]); i++)
13330 7b 0a 20 20 20 20 20 20 20 20 69 42 79 74 65 20  {.        iByte 
13340 3d 20 28 69 42 79 74 65 3c 3c 34 29 20 2b 20 73  = (iByte<<4) + s
13350 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 7a  qlite3HexToInt(z
13360 52 69 67 68 74 5b 69 5d 29 3b 0a 20 20 20 20 20  Right[i]);.     
13370 20 20 20 69 66 28 20 28 69 26 31 29 21 3d 30 20     if( (i&1)!=0 
13380 29 20 7a 4b 65 79 5b 69 2f 32 5d 20 3d 20 69 42  ) zKey[i/2] = iB
13390 79 74 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  yte;.      }.   
133a0 20 20 20 69 66 28 20 28 7a 4c 65 66 74 5b 33 5d     if( (zLeft[3]
133b0 20 26 20 30 78 66 29 3d 3d 30 78 62 20 29 7b 0a   & 0xf)==0xb ){.
133c0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
133d0 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
133e0 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20  zKey, i/2);.    
133f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
13400 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76   sqlite3_rekey_v
13410 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c  2(db, zDb, zKey,
13420 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 0a 20   i/2);.      }. 
13430 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
13440 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 20 64    }.#endif.#if d
13450 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
13460 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69  S_CODEC) || defi
13470 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
13480 45 5f 43 45 52 4f 44 29 0a 20 20 63 61 73 65 20  E_CEROD).  case 
13490 50 72 61 67 54 79 70 5f 41 43 54 49 56 41 54 45  PragTyp_ACTIVATE
134a0 5f 45 58 54 45 4e 53 49 4f 4e 53 3a 20 69 66 28  _EXTENSIONS: if(
134b0 20 7a 52 69 67 68 74 20 29 7b 0a 23 69 66 64 65   zRight ){.#ifde
134c0 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  f SQLITE_HAS_COD
134d0 45 43 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  EC.    if( sqlit
134e0 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68  e3StrNICmp(zRigh
134f0 74 2c 20 22 73 65 65 2d 22 2c 20 34 29 3d 3d 30  t, "see-", 4)==0
13500 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
13510 33 5f 61 63 74 69 76 61 74 65 5f 73 65 65 28 26  3_activate_see(&
13520 7a 52 69 67 68 74 5b 34 5d 29 3b 0a 20 20 20 20  zRight[4]);.    
13530 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  }.#endif.#ifdef 
13540 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
13550 52 4f 44 0a 20 20 20 20 69 66 28 20 73 71 6c 69  ROD.    if( sqli
13560 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67  te3StrNICmp(zRig
13570 68 74 2c 20 22 63 65 72 6f 64 2d 22 2c 20 36 29  ht, "cerod-", 6)
13580 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
13590 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f 63 65  ite3_activate_ce
135a0 72 6f 64 28 26 7a 52 69 67 68 74 5b 36 5d 29 3b  rod(&zRight[6]);
135b0 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
135c0 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
135d0 66 0a 0a 20 20 7d 20 2f 2a 20 45 6e 64 20 6f 66  f..  } /* End of
135e0 20 74 68 65 20 50 52 41 47 4d 41 20 73 77 69 74   the PRAGMA swit
135f0 63 68 20 2a 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75  ch */..pragma_ou
13600 74 3a 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72  t:.  sqlite3DbFr
13610 65 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20  ee(db, zLeft);. 
13620 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
13630 62 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a 0a 23  b, zRight);.}..#
13640 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
13650 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a     OMIT_PRAGMA */.