/ Hex Artifact Content
Login

Artifact 5986f119f6350839a28936fce4e2d6a4c703922c:


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 20 3d 20 73 71 6c 69 74 65 33 50 72  *pPk = sqlite3Pr
b7c0: 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54  imaryKeyIndex(pT
b7d0: 61 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ab);.      sqlit
b7e0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
b7f0: 28 76 2c 20 36 29 3b 0a 20 20 20 20 20 20 70 50  (v, 6);.      pP
b800: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a  arse->nMem = 6;.
b810: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
b820: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
b830: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
b840: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
b850: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
b860: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64  LNAME_NAME, "cid
b870: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
b880: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
b890: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
b8a0: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
b8b0: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
b8c0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
b8d0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
b8e0: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
b8f0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 79 70 65  NAME_NAME, "type
b900: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
b910: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
b920: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
b930: 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 3, COLNAME_NAM
b940: 45 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 53 51  E, "notnull", SQ
b950: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
b960: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
b970: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20  etColName(v, 4, 
b980: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64  COLNAME_NAME, "d
b990: 66 6c 74 5f 76 61 6c 75 65 22 2c 20 53 51 4c 49  flt_value", SQLI
b9a0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
b9b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
b9c0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f  ColName(v, 5, CO
b9d0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 6b 22  LNAME_NAME, "pk"
b9e0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
b9f0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
ba00: 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
ba10: 73 28 70 50 61 72 73 65 2c 20 70 54 61 62 29 3b  s(pParse, pTab);
ba20: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20  .      for(i=0, 
ba30: 70 43 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c 3b  pCol=pTab->aCol;
ba40: 20 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69   i<pTab->nCol; i
ba50: 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20 20  ++, pCol++){.   
ba60: 20 20 20 20 20 69 66 28 20 49 73 48 69 64 64 65       if( IsHidde
ba70: 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b  nColumn(pCol) ){
ba80: 0a 20 20 20 20 20 20 20 20 20 20 6e 48 69 64 64  .          nHidd
ba90: 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20  en++;.          
baa0: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
bab0: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
bac0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bad0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d 6e   OP_Integer, i-n
bae0: 48 69 64 64 65 6e 2c 20 31 29 3b 0a 20 20 20 20  Hidden, 1);.    
baf0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
bb00: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
bb10: 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43  ng8, 0, 2, 0, pC
bb20: 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  ol->zName, 0);. 
bb30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
bb40: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
bb50: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
bb60: 0a 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c  .           pCol
bb70: 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f 6c 2d 3e  ->zType ? pCol->
bb80: 7a 54 79 70 65 20 3a 20 22 22 2c 20 30 29 3b 0a  zType : "", 0);.
bb90: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bba0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
bbb0: 49 6e 74 65 67 65 72 2c 20 28 70 43 6f 6c 2d 3e  Integer, (pCol->
bbc0: 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a 20 30 29  notNull ? 1 : 0)
bbd0: 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 69 66  , 4);.        if
bbe0: 28 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74 20 29 7b  ( pCol->zDflt ){
bbf0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
bc00: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
bc10: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 35  OP_String8, 0, 5
bc20: 2c 20 30 2c 20 28 63 68 61 72 2a 29 70 43 6f 6c  , 0, (char*)pCol
bc30: 2d 3e 7a 44 66 6c 74 2c 20 30 29 3b 0a 20 20 20  ->zDflt, 0);.   
bc40: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
bc50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bc60: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75  eAddOp2(v, OP_Nu
bc70: 6c 6c 2c 20 30 2c 20 35 29 3b 0a 20 20 20 20 20  ll, 0, 5);.     
bc80: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
bc90: 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73   (pCol->colFlags
bca0: 20 26 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b   & COLFLAG_PRIMK
bcb0: 45 59 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  EY)==0 ){.      
bcc0: 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20      k = 0;.     
bcd0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 50 6b     }else if( pPk
bce0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
bcf0: 20 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20   k = 1;.        
bd00: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
bd10: 20 66 6f 72 28 6b 3d 31 3b 20 41 4c 57 41 59 53   for(k=1; ALWAYS
bd20: 28 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 29 20  (k<=pTab->nCol) 
bd30: 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e  && pPk->aiColumn
bd40: 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d  [k-1]!=i; k++){}
bd50: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
bd60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bd70: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
bd80: 65 72 2c 20 6b 2c 20 36 29 3b 0a 20 20 20 20 20  er, k, 6);.     
bd90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
bda0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
bdb0: 74 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20  tRow, 1, 6);.   
bdc0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
bdd0: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
bde0: 50 72 61 67 54 79 70 5f 53 54 41 54 53 3a 20 7b  PragTyp_STATS: {
bdf0: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
be00: 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  ;.    HashElem *
be10: 69 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74  i;.    v = sqlit
be20: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
be30: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
be40: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
be50: 34 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  4);.    pParse->
be60: 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71  nMem = 4;.    sq
be70: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
be80: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
be90: 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  b);.    sqlite3V
bea0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
beb0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
bec0: 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54  , "table", SQLIT
bed0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
bee0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
bef0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
bf00: 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 64 65 78 22  ME_NAME, "index"
bf10: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
bf20: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
bf30: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
bf40: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
bf50: 22 77 69 64 74 68 22 2c 20 53 51 4c 49 54 45 5f  "width", SQLITE_
bf60: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
bf70: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
bf80: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
bf90: 5f 4e 41 4d 45 2c 20 22 68 65 69 67 68 74 22 2c  _NAME, "height",
bfa0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
bfb0: 0a 20 20 20 20 66 6f 72 28 69 3d 73 71 6c 69 74  .    for(i=sqlit
bfc0: 65 48 61 73 68 46 69 72 73 74 28 26 70 44 62 2d  eHashFirst(&pDb-
bfd0: 3e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73  >pSchema->tblHas
bfe0: 68 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48  h); i; i=sqliteH
bff0: 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20  ashNext(i)){.   
c000: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
c010: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
c020: 69 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  i);.      sqlite
c030: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
c040: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
c050: 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c   0, pTab->zName,
c060: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
c070: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c080: 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 32 29 3b 0a  OP_Null, 0, 2);.
c090: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c0a0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c0b0: 74 65 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  teger,.         
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f    (int)sqlite3Lo
c0e0: 67 45 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e  gEstToInt(pTab->
c0f0: 73 7a 54 61 62 52 6f 77 29 2c 20 33 29 3b 0a 20  szTabRow), 3);. 
c100: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c110: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c120: 65 67 65 72 2c 20 28 69 6e 74 29 70 54 61 62 2d  eger, (int)pTab-
c130: 3e 6e 52 6f 77 45 73 74 2c 20 34 29 3b 0a 20 20  >nRowEst, 4);.  
c140: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c150: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
c160: 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20  ltRow, 1, 4);.  
c170: 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61      for(pIdx=pTa
c180: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
c190: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
c1a0: 74 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  t){.        sqli
c1b0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
c1c0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
c1d0: 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  2, 0, pIdx->zNam
c1e0: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  e, 0);.        s
c1f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c200: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 0a  (v, OP_Integer,.
c210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c220: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
c230: 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  t)sqlite3LogEstT
c240: 6f 49 6e 74 28 70 49 64 78 2d 3e 73 7a 49 64 78  oInt(pIdx->szIdx
c250: 52 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20 20 20  Row), 3);.      
c260: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c270: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c280: 72 2c 20 28 69 6e 74 29 70 49 64 78 2d 3e 61 69  r, (int)pIdx->ai
c290: 52 6f 77 45 73 74 5b 30 5d 2c 20 34 29 3b 0a 20  RowEst[0], 4);. 
c2a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c2b0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
c2c0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b  esultRow, 1, 4);
c2d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
c2e0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
c2f0: 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45  ase PragTyp_INDE
c300: 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67  X_INFO: if( zRig
c310: 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20  ht ){.    Index 
c320: 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65  *pIdx;.    Table
c330: 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78   *pTab;.    pIdx
c340: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e   = sqlite3FindIn
c350: 64 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  dex(db, zRight, 
c360: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49  zDb);.    if( pI
c370: 64 78 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  dx ){.      int 
c380: 69 3b 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20  i;.      pTab = 
c390: 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20  pIdx->pTable;.  
c3a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c3b0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b  etNumCols(v, 3);
c3c0: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
c3d0: 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 73  Mem = 3;.      s
c3e0: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
c3f0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
c400: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
c410: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c420: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
c430: 41 4d 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51  AME, "seqno", SQ
c440: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
c450: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c460: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
c470: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
c480: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
c490: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
c4a0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c4b0: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
c4c0: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
c4d0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c4e0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 49     for(i=0; i<pI
c4f0: 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 69 2b 2b  dx->nKeyCol; i++
c500: 29 7b 0a 20 20 20 20 20 20 20 20 69 31 36 20 63  ){.        i16 c
c510: 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f  num = pIdx->aiCo
c520: 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20  lumn[i];.       
c530: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c540: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
c550: 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , i, 1);.       
c560: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c570: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
c580: 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20 20  , cnum, 2);.    
c590: 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
c5a0: 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20  ->nCol>cnum );. 
c5b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c5c0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
c5d0: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
c5e0: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d   pTab->aCol[cnum
c5f0: 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ].zName, 0);.   
c600: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c610: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
c620: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
c630: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
c640: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
c650: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
c660: 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74  LIST: if( zRight
c670: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
c680: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
c690: 70 54 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b  pTab;.    int i;
c6a0: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
c6b0: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
c6c0: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
c6d0: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
c6e0: 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
c6f0: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
c700: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c710: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
c720: 33 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65  3);.      pParse
c730: 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20  ->nMem = 3;.    
c740: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
c750: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
c760: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
c770: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
c780: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
c790: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53  E_NAME, "seq", S
c7a0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c7b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c7c0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
c7d0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
c7e0: 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  name", SQLITE_ST
c7f0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
c800: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c810: 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
c820: 5f 4e 41 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c  _NAME, "unique",
c830: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
c840: 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d  .      for(pIdx=
c850: 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d  pTab->pIndex, i=
c860: 30 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  0; pIdx; pIdx=pI
c870: 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b  dx->pNext, i++){
c880: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
c890: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c8a0: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
c8b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
c8c0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
c8d0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
c8e0: 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20  0, pIdx->zName, 
c8f0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
c900: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c910: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64   OP_Integer, pId
c920: 78 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e  x->onError!=OE_N
c930: 6f 6e 65 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  one, 3);.       
c940: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c950: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
c960: 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 20  ow, 1, 3);.     
c970: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
c980: 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72  reak;..  case Pr
c990: 61 67 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c  agTyp_DATABASE_L
c9a0: 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  IST: {.    int i
c9b0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
c9c0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33  eSetNumCols(v, 3
c9d0: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
c9e0: 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c  Mem = 3;.    sql
c9f0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
ca00: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
ca10: 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51  _NAME, "seq", SQ
ca20: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
ca30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
ca40: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
ca50: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d  LNAME_NAME, "nam
ca60: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
ca70: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
ca80: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
ca90: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
caa0: 2c 20 22 66 69 6c 65 22 2c 20 53 51 4c 49 54 45  , "file", SQLITE
cab0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f  _STATIC);.    fo
cac0: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
cad0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
cae0: 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  ( db->aDb[i].pBt
caf0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
cb00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
cb10: 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d  ->aDb[i].zName!=
cb20: 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 );.      sqlit
cb30: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
cb40: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31  OP_Integer, i, 1
cb50: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
cb60: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
cb70: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
cb80: 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  0, db->aDb[i].zN
cb90: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  ame, 0);.      s
cba0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
cbb0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
cbc0: 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 3, 0,.       
cbd0: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
cbe0: 47 65 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e  GetFilename(db->
cbf0: 61 44 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b  aDb[i].pBt), 0);
cc00: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
cc10: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
cc20: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b  esultRow, 1, 3);
cc30: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
cc40: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
cc50: 54 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49  Typ_COLLATION_LI
cc60: 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20  ST: {.    int i 
cc70: 3d 20 30 3b 0a 20 20 20 20 48 61 73 68 45 6c 65  = 0;.    HashEle
cc80: 6d 20 2a 70 3b 0a 20 20 20 20 73 71 6c 69 74 65  m *p;.    sqlite
cc90: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
cca0: 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 2);.    pPars
ccb0: 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20  e->nMem = 2;.   
ccc0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
ccd0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
cce0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22  NAME_NAME, "seq"
ccf0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
cd00: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
cd10: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
cd20: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
cd30: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
cd40: 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
cd50: 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  p=sqliteHashFirs
cd60: 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29  t(&db->aCollSeq)
cd70: 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73  ; p; p=sqliteHas
cd80: 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20  hNext(p)){.     
cd90: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20   CollSeq *pColl 
cda0: 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c  = (CollSeq *)sql
cdb0: 69 74 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a  iteHashData(p);.
cdc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cdd0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
cde0: 74 65 67 65 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a  teger, i++, 1);.
cdf0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ce00: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
ce10: 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
ce20: 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29  pColl->zName, 0)
ce30: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
ce40: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
ce50: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29  ResultRow, 1, 2)
ce60: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
ce70: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
ce80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
ce90: 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  A_PRAGMAS */..#i
cea0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
ceb0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
cec0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52  case PragTyp_FOR
ced0: 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69  EIGN_KEY_LIST: i
cee0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
cef0: 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20   FKey *pFK;.    
cf00: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
cf10: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46   pTab = sqlite3F
cf20: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69  indTable(db, zRi
cf30: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69  ght, zDb);.    i
cf40: 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20  f( pTab ){.     
cf50: 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   v = sqlite3GetV
cf60: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20  dbe(pParse);.   
cf70: 20 20 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70     pFK = pTab->p
cf80: 46 4b 65 79 3b 0a 20 20 20 20 20 20 69 66 28 20  FKey;.      if( 
cf90: 70 46 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69  pFK ){.        i
cfa0: 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20  nt i = 0; .     
cfb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
cfc0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 38 29 3b 0a  tNumCols(v, 8);.
cfd0: 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e          pParse->
cfe0: 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20  nMem = 8;.      
cff0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
d000: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
d010: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , iDb);.        
d020: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d030: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
d040: 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 64 22 2c 20  AME_NAME, "id", 
d050: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
d060: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d070: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
d080: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
d090: 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f  , "seq", SQLITE_
d0a0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
d0b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
d0c0: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
d0d0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c  NAME_NAME, "tabl
d0e0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
d0f0: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
d100: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d110: 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 3, COLNAME_
d120: 4e 41 4d 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51  NAME, "from", SQ
d130: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
d140: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d150: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34  eSetColName(v, 4
d160: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
d170: 22 74 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  "to", SQLITE_STA
d180: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
d190: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d1a0: 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d  ame(v, 5, COLNAM
d1b0: 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 75 70 64 61  E_NAME, "on_upda
d1c0: 74 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  te", SQLITE_STAT
d1d0: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
d1e0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
d1f0: 6d 65 28 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45  me(v, 6, COLNAME
d200: 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65 74  _NAME, "on_delet
d210: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
d220: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
d230: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d240: 65 28 76 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 7, COLNAME_
d250: 4e 41 4d 45 2c 20 22 6d 61 74 63 68 22 2c 20 53  NAME, "match", S
d260: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
d270: 20 20 20 20 20 20 20 77 68 69 6c 65 28 70 46 4b         while(pFK
d280: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
d290: 20 6a 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f   j;.          fo
d2a0: 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43  r(j=0; j<pFK->nC
d2b0: 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; j++){.      
d2c0: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c        char *zCol
d2d0: 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e   = pFK->aCol[j].
d2e0: 7a 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20 20 20  zCol;.          
d2f0: 20 20 63 68 61 72 20 2a 7a 4f 6e 44 65 6c 65 74    char *zOnDelet
d300: 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69  e = (char *)acti
d310: 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74  onName(pFK->aAct
d320: 69 6f 6e 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  ion[0]);.       
d330: 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 55 70       char *zOnUp
d340: 64 61 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61  date = (char *)a
d350: 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61  ctionName(pFK->a
d360: 41 63 74 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20  Action[1]);.    
d370: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d380: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d390: 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a  Integer, i, 1);.
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d3b0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d3c0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6a 2c 20   OP_Integer, j, 
d3d0: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  2);.            
d3e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d3f0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
d400: 20 30 2c 20 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a   0, 3, 0, pFK->z
d410: 54 6f 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  To, 0);.        
d420: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d430: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d440: 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20  ng8, 0, 4, 0,.  
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d460: 20 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62              pTab
d470: 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c  ->aCol[pFK->aCol
d480: 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65  [j].iFrom].zName
d490: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
d4a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d4b0: 4f 70 34 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50  Op4(v, zCol ? OP
d4c0: 5f 53 74 72 69 6e 67 38 20 3a 20 4f 50 5f 4e 75  _String8 : OP_Nu
d4d0: 6c 6c 2c 20 30 2c 20 35 2c 20 30 2c 20 7a 43 6f  ll, 0, 5, 0, zCo
d4e0: 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  l, 0);.         
d4f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d500: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
d510: 67 38 2c 20 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e  g8, 0, 6, 0, zOn
d520: 55 70 64 61 74 65 2c 20 30 29 3b 0a 20 20 20 20  Update, 0);.    
d530: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d540: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
d550: 53 74 72 69 6e 67 38 2c 20 30 2c 20 37 2c 20 30  String8, 0, 7, 0
d560: 2c 20 7a 4f 6e 44 65 6c 65 74 65 2c 20 30 29 3b  , zOnDelete, 0);
d570: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d580: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
d590: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
d5a0: 20 38 2c 20 30 2c 20 22 4e 4f 4e 45 22 2c 20 30   8, 0, "NONE", 0
d5b0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
d5c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d5d0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
d5e0: 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20 20 20 20  , 1, 8);.       
d5f0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2b     }.          +
d600: 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70 46  +i;.          pF
d610: 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72  K = pFK->pNextFr
d620: 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  om;.        }.  
d630: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
d640: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
d650: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
d660: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
d670: 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  KEY) */..#ifndef
d680: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
d690: 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66  EIGN_KEY.#ifndef
d6a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
d6b0: 47 47 45 52 0a 20 20 63 61 73 65 20 50 72 61 67  GGER.  case Prag
d6c0: 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f  Typ_FOREIGN_KEY_
d6d0: 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65  CHECK: {.    FKe
d6e0: 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20 20 20  y *pFK;         
d6f0: 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e      /* A foreign
d700: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
d710: 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
d720: 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
d730: 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e   Child table con
d740: 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43 45 53  tain "REFERENCES
d750: 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20  " keyword */.   
d760: 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b   Table *pParent;
d770: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
d780: 74 20 74 61 62 6c 65 20 74 68 61 74 20 63 68 69  t table that chi
d790: 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a  ld points to */.
d7a0: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
d7b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
d7c0: 64 65 78 20 69 6e 20 74 68 65 20 70 61 72 65 6e  dex in the paren
d7d0: 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  t table */.    i
d7e0: 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
d7f0: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
d800: 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67 6e 20  unter:  Foreign 
d810: 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72 20 70  key number for p
d820: 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a  Tab */.    int j
d830: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
d840: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
d850: 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74 68 65  r:  Field of the
d860: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a   foreign key */.
d870: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b      HashElem *k;
d880: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
d890: 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78  op counter:  Nex
d8a0: 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68 65 6d  t table in schem
d8b0: 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20  a */.    int x; 
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8d0: 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69 61 62  /* result variab
d8e0: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  le */.    int re
d8f0: 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20 20 20  gResult;        
d900: 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72 73 20   /* 3 registers 
d910: 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75 6c 74  to hold a result
d920: 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20   row */.    int 
d930: 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20 20 20  regKey;         
d940: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
d950: 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63  o hold key for c
d960: 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a  hecking the FK *
d970: 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 6f 77  /.    int regRow
d980: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
d990: 52 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c  Registers to hol
d9a0: 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70 54 61  d a row from pTa
d9b0: 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  b */.    int add
d9c0: 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  rTop;           
d9d0: 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70  /* Top of a loop
d9e0: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67   checking foreig
d9f0: 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e  n keys */.    in
da00: 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20 20 20  t addrOk;       
da10: 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
da20: 65 20 69 66 20 74 68 65 20 6b 65 79 20 69 73 20  e if the key is 
da30: 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61  OK */.    int *a
da40: 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  iCols;          
da50: 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70 61 72   /* child to par
da60: 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69  ent column mappi
da70: 6e 67 20 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65  ng */..    regRe
da80: 73 75 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e  sult = pParse->n
da90: 4d 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73  Mem+1;.    pPars
daa0: 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20  e->nMem += 4;.  
dab0: 20 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61    regKey = ++pPa
dac0: 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72  rse->nMem;.    r
dad0: 65 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65  egRow = ++pParse
dae0: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20  ->nMem;.    v = 
daf0: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
db00: 50 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69  Parse);.    sqli
db10: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
db20: 73 28 76 2c 20 34 29 3b 0a 20 20 20 20 73 71 6c  s(v, 4);.    sql
db30: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
db40: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
db50: 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20  _NAME, "table", 
db60: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
db70: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
db80: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
db90: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72  COLNAME_NAME, "r
dba0: 6f 77 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54  owid", SQLITE_ST
dbb0: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
dbc0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
dbd0: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
dbe0: 41 4d 45 2c 20 22 70 61 72 65 6e 74 22 2c 20 53  AME, "parent", S
dbf0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
dc00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
dc10: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43  tColName(v, 3, C
dc20: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b  OLNAME_NAME, "fk
dc30: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
dc40: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
dc50: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
dc60: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
dc70: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
dc80: 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b  hFirst(&db->aDb[
dc90: 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62  iDb].pSchema->tb
dca0: 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c  lHash);.    whil
dcb0: 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66  e( k ){.      if
dcc0: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
dcd0: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
dce0: 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50  e3LocateTable(pP
dcf0: 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c  arse, 0, zRight,
dd00: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b   zDb);.        k
dd10: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
dd20: 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20  e{.        pTab 
dd30: 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65  = (Table*)sqlite
dd40: 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20  HashData(k);.   
dd50: 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48       k = sqliteH
dd60: 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20  ashNext(k);.    
dd70: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54    }.      if( pT
dd80: 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70  ab==0 || pTab->p
dd90: 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  FKey==0 ) contin
dda0: 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
ddb0: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
ddc0: 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e  e, iDb, pTab->tn
ddd0: 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61  um, 0, pTab->zNa
dde0: 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  me);.      if( p
ddf0: 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77  Tab->nCol+regRow
de00: 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20  >pParse->nMem ) 
de10: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pParse->nMem = p
de20: 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52  Tab->nCol + regR
de30: 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ow;.      sqlite
de40: 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73  3OpenTable(pPars
de50: 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c  e, 0, iDb, pTab,
de60: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
de70: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
de80: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
de90: 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75  ing8, 0, regResu
dea0: 6c 74 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61  lt, 0, pTab->zNa
deb0: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  me,.            
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 50 34 5f 54              P4_T
ded0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
dee0: 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54   for(i=1, pFK=pT
def0: 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20  ab->pFKey; pFK; 
df00: 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e  i++, pFK=pFK->pN
df10: 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20  extFrom){.      
df20: 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69    pParent = sqli
df30: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
df40: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b   pFK->zTo, zDb);
df50: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
df60: 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  rent==0 ) contin
df70: 75 65 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78  ue;.        pIdx
df80: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71   = 0;.        sq
df90: 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70  lite3TableLock(p
dfa0: 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72  Parse, iDb, pPar
dfb0: 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50  ent->tnum, 0, pP
dfc0: 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20  arent->zName);. 
dfd0: 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74         x = sqlit
dfe0: 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
dff0: 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c  pParse, pParent,
e000: 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b   pFK, &pIdx, 0);
e010: 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d  .        if( x==
e020: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  0 ){.          i
e030: 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20  f( pIdx==0 ){.  
e040: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e050: 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73  3OpenTable(pPars
e060: 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65  e, i, iDb, pPare
e070: 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29  nt, OP_OpenRead)
e080: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
e090: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 4b  e{.            K
e0a0: 65 79 49 6e 66 6f 20 2a 70 4b 65 79 20 3d 20 73  eyInfo *pKey = s
e0b0: 71 6c 69 74 65 33 49 6e 64 65 78 4b 65 79 69 6e  qlite3IndexKeyin
e0c0: 66 6f 28 70 50 61 72 73 65 2c 20 70 49 64 78 29  fo(pParse, pIdx)
e0d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
e0e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
e0f0: 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20  v, OP_OpenRead, 
e100: 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69  i, pIdx->tnum, i
e110: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Db);.           
e120: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
e130: 67 65 50 34 28 76 2c 20 2d 31 2c 20 28 63 68 61  geP4(v, -1, (cha
e140: 72 2a 29 70 4b 65 79 2c 20 50 34 5f 4b 45 59 49  r*)pKey, P4_KEYI
e150: 4e 46 4f 5f 48 41 4e 44 4f 46 46 29 3b 0a 20 20  NFO_HANDOFF);.  
e160: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e170: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
e180: 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20     k = 0;.      
e190: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
e1a0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
e1b0: 20 20 20 61 73 73 65 72 74 28 20 70 50 61 72 73     assert( pPars
e1c0: 65 2d 3e 6e 45 72 72 3e 30 20 7c 7c 20 70 46 4b  e->nErr>0 || pFK
e1d0: 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
e1e0: 20 70 46 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20   pFK ) break;.  
e1f0: 20 20 20 20 69 66 28 20 70 50 61 72 73 65 2d 3e      if( pParse->
e200: 6e 54 61 62 3c 69 20 29 20 70 50 61 72 73 65 2d  nTab<i ) pParse-
e210: 3e 6e 54 61 62 20 3d 20 69 3b 0a 20 20 20 20 20  >nTab = i;.     
e220: 20 61 64 64 72 54 6f 70 20 3d 20 73 71 6c 69 74   addrTop = sqlit
e230: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
e240: 4f 50 5f 52 65 77 69 6e 64 2c 20 30 29 3b 0a 20  OP_Rewind, 0);. 
e250: 20 20 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46       for(i=1, pF
e260: 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70  K=pTab->pFKey; p
e270: 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b  FK; i++, pFK=pFK
e280: 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20  ->pNextFrom){.  
e290: 20 20 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20        pParent = 
e2a0: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
e2b0: 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a  (db, pFK->zTo, z
e2c0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64  Db);.        pId
e2d0: 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61  x = 0;.        a
e2e0: 69 43 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20  iCols = 0;.     
e2f0: 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29     if( pParent )
e300: 7b 0a 20 20 20 20 20 20 20 20 20 20 78 20 3d 20  {.          x = 
e310: 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
e320: 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70 50 61  ndex(pParse, pPa
e330: 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78  rent, pFK, &pIdx
e340: 2c 20 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20  , &aiCols);.    
e350: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 78 3d        assert( x=
e360: 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  =0 );.        }.
e370: 20 20 20 20 20 20 20 20 61 64 64 72 4f 6b 20 3d          addrOk =
e380: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
e390: 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20  Label(v);.      
e3a0: 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 26 26    if( pParent &&
e3b0: 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20   pIdx==0 ){.    
e3c0: 20 20 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d        int iKey =
e3d0: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46   pFK->aCol[0].iF
e3e0: 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61  rom;.          a
e3f0: 73 73 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26  ssert( iKey>=0 &
e400: 26 20 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f  & iKey<pTab->nCo
e410: 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  l );.          i
e420: 66 28 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69  f( iKey!=pTab->i
e430: 50 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  PKey ){.        
e440: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e450: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75  ddOp3(v, OP_Colu
e460: 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67  mn, 0, iKey, reg
e470: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
e480: 20 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44    sqlite3ColumnD
e490: 65 66 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20  efault(v, pTab, 
e4a0: 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20  iKey, regRow);. 
e4b0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e4c0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
e4d0: 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f  OP_IsNull, regRo
e4e0: 77 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20  w, addrOk);.    
e4f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e500: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
e510: 4d 75 73 74 42 65 49 6e 74 2c 20 72 65 67 52 6f  MustBeInt, regRo
e520: 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  w,.             
e530: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72    sqlite3VdbeCur
e540: 72 65 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 0a  rentAddr(v)+3);.
e550: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
e560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e570: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
e580: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
e590: 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20  egRow);.        
e5a0: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71    }.          sq
e5b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
e5c0: 76 2c 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c  v, OP_NotExists,
e5d0: 20 69 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a   i, 0, regRow);.
e5e0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e5f0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
e600: 50 5f 47 6f 74 6f 2c 20 30 2c 20 61 64 64 72 4f  P_Goto, 0, addrO
e610: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  k);.          sq
e620: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
e630: 65 28 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65  e(v, sqlite3Vdbe
e640: 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32  CurrentAddr(v)-2
e650: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
e660: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
e670: 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c  j=0; j<pFK->nCol
e680: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
e690: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43      sqlite3ExprC
e6a0: 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
e6b0: 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a  ble(v, pTab, 0,.
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 61 69 43 6f              aiCo
e6e0: 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a  ls ? aiCols[j] :
e6f0: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46   pFK->aCol[j].iF
e700: 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a  rom, regRow+j);.
e710: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e720: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
e730: 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52   OP_IsNull, regR
e740: 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  ow+j, addrOk);. 
e750: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
e760: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
e770: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
e780: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e790: 33 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  3(v, OP_MakeReco
e7a0: 72 64 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d  rd, regRow, pFK-
e7b0: 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 29 3b 0a  >nCol, regKey);.
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e7d0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28  te3VdbeChangeP4(
e7e0: 76 2c 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20  v, -1,.         
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e800: 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
e810: 53 74 72 28 76 2c 70 49 64 78 29 2c 20 50 34 5f  Str(v,pIdx), P4_
e820: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
e830: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e840: 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20  dbeAddOp4Int(v, 
e850: 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64  OP_Found, i, add
e860: 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b  rOk, regKey, 0);
e870: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
e880: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
e890: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
e8a0: 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c  (v, OP_Rowid, 0,
e8b0: 20 72 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20   regResult+1);. 
e8c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e8d0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
e8e0: 74 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65  tring8, 0, regRe
e8f0: 73 75 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20  sult+2, 0, .    
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e910: 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20        pFK->zTo, 
e920: 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  P4_TRANSIENT);. 
e930: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e940: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
e950: 6e 74 65 67 65 72 2c 20 69 2d 31 2c 20 72 65 67  nteger, i-1, reg
e960: 52 65 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20  Result+3);.     
e970: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e980: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
e990: 74 52 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c  tRow, regResult,
e9a0: 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   4);.        sql
e9b0: 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c  ite3VdbeResolveL
e9c0: 61 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b  abel(v, addrOk);
e9d0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
e9e0: 44 62 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c  DbFree(db, aiCol
e9f0: 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  s);.      }.    
ea00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ea10: 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20  Op2(v, OP_Next, 
ea20: 30 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b 0a 20  0, addrTop+1);. 
ea30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ea40: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
ea50: 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Top);.    }.  }.
ea60: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
ea70: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
ea80: 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
ea90: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   */.#endif /* !d
eaa0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
eab0: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
eac0: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  */..#ifndef NDEB
ead0: 55 47 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UG.  case PragTy
eae0: 70 5f 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20  p_PARSER_TRACE: 
eaf0: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
eb00: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
eb10: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
eb20: 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20  zRight, 0) ){.  
eb30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72        sqlite3Par
eb40: 73 65 72 54 72 61 63 65 28 73 74 64 65 72 72 2c  serTrace(stderr,
eb50: 20 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20   "parser: ");.  
eb60: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
eb70: 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72     sqlite3Parser
eb80: 54 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20  Trace(0, 0);.   
eb90: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
eba0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a   break;.#endif..
ebb0: 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74    /* Reinstall t
ebc0: 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42  he LIKE and GLOB
ebd0: 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65   functions.  The
ebe0: 20 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45   variant of LIKE
ebf0: 0a 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20  .  ** used will 
ec00: 62 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  be case sensitiv
ec10: 65 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69  e or not dependi
ec20: 6e 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20  ng on the RHS.. 
ec30: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
ec40: 79 70 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56  yp_CASE_SENSITIV
ec50: 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66  E_LIKE: {.    if
ec60: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
ec70: 20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65    sqlite3Registe
ec80: 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64  rLikeFunctions(d
ec90: 62 2c 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  b, sqlite3GetBoo
eca0: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29  lean(zRight, 0))
ecb0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
ecc0: 65 61 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  eak;..#ifndef SQ
ecd0: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
ece0: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23  HECK_ERROR_MAX.#
ecf0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
ed00: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
ed10: 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e  RROR_MAX 100.#en
ed20: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
ed30: 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
ed40: 54 59 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72  TY_CHECK.  /* Pr
ed50: 61 67 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63  agma "quick_chec
ed60: 6b 22 20 69 73 20 72 65 64 75 63 65 64 20 76 65  k" is reduced ve
ed70: 72 73 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69  rsion of .  ** i
ed80: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64  ntegrity_check d
ed90: 65 73 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63  esigned to detec
eda0: 74 20 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20  t most database 
edb0: 63 6f 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20  corruption.  ** 
edc0: 77 69 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20  without most of 
edd0: 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20  the overhead of 
ede0: 61 20 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79  a full integrity
edf0: 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63  -check..  */.  c
ee00: 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45  ase PragTyp_INTE
ee10: 47 52 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20  GRITY_CHECK: {. 
ee20: 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64     int i, j, add
ee30: 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 2f  r, mxErr;..    /
ee40: 2a 20 43 6f 64 65 20 74 68 61 74 20 61 70 70 65  * Code that appe
ee50: 61 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ars at the end o
ee60: 66 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20  f the integrity 
ee70: 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72  check.  If no er
ee80: 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61  ror.    ** messa
ee90: 67 65 73 20 68 61 76 65 20 62 65 65 6e 20 67 65  ges have been ge
eea0: 6e 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20  nerated, output 
eeb0: 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f  OK.  Otherwise o
eec0: 75 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a  utput the.    **
eed0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20   error message. 
eee0: 20 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63     */.    static
eef0: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
ef00: 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a  t endCode[] = {.
ef10: 20 20 20 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d        { OP_AddIm
ef20: 6d 2c 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20  m,      1, 0,   
ef30: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30       0},    /* 0
ef40: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49   */.      { OP_I
ef50: 66 4e 65 67 2c 20 20 20 20 20 20 20 31 2c 20 30  fNeg,       1, 0
ef60: 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20  ,        0},    
ef70: 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20  /* 1 */.      { 
ef80: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20  OP_String8,     
ef90: 30 2c 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 3,        0},
efa0: 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20      /* 2 */.    
efb0: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
efc0: 2c 20 20 20 33 2c 20 31 2c 20 20 20 20 20 20 20  ,   3, 1,       
efd0: 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20   0},.    };..   
efe0: 20 69 6e 74 20 69 73 51 75 69 63 6b 20 3d 20 28   int isQuick = (
eff0: 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a  sqlite3Tolower(z
f000: 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a  Left[0])=='q');.
f010: 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50  .    /* If the P
f020: 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 20 77 61  RAGMA command wa
f030: 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 50  s of the form "P
f040: 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e 74 65 67  RAGMA <db>.integ
f050: 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20 20  rity_check",.   
f060: 20 2a 2a 20 74 68 65 6e 20 69 44 62 20 69 73 20   ** then iDb is 
f070: 73 65 74 20 74 6f 20 74 68 65 20 69 6e 64 65 78  set to the index
f080: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
f090: 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 3c   identified by <
f0a0: 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 74  db>..    ** In t
f0b0: 68 69 73 20 63 61 73 65 2c 20 74 68 65 20 69 6e  his case, the in
f0c0: 74 65 67 72 69 74 79 20 6f 66 20 64 61 74 61 62  tegrity of datab
f0d0: 61 73 65 20 69 44 62 20 6f 6e 6c 79 20 69 73 20  ase iDb only is 
f0e0: 76 65 72 69 66 69 65 64 20 62 79 0a 20 20 20 20  verified by.    
f0f0: 2a 2a 20 74 68 65 20 56 44 42 45 20 63 72 65 61  ** the VDBE crea
f100: 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20 20 20 2a  ted below..    *
f110: 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 77 69  *.    ** Otherwi
f120: 73 65 2c 20 69 66 20 74 68 65 20 63 6f 6d 6d 61  se, if the comma
f130: 6e 64 20 77 61 73 20 73 69 6d 70 6c 79 20 22 50  nd was simply "P
f140: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
f150: 63 68 65 63 6b 22 20 28 6f 72 0a 20 20 20 20 2a  check" (or.    *
f160: 2a 20 22 50 52 41 47 4d 41 20 71 75 69 63 6b 5f  * "PRAGMA quick_
f170: 63 68 65 63 6b 22 29 2c 20 74 68 65 6e 20 69 44  check"), then iD
f180: 62 20 69 73 20 73 65 74 20 74 6f 20 30 2e 20 49  b is set to 0. I
f190: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73 65 74  n this case, set
f1a0: 20 69 44 62 0a 20 20 20 20 2a 2a 20 74 6f 20 2d   iDb.    ** to -
f1b0: 31 20 68 65 72 65 2c 20 74 6f 20 69 6e 64 69 63  1 here, to indic
f1c0: 61 74 65 20 74 68 61 74 20 74 68 65 20 56 44 42  ate that the VDB
f1d0: 45 20 73 68 6f 75 6c 64 20 76 65 72 69 66 79 20  E should verify 
f1e0: 74 68 65 20 69 6e 74 65 67 72 69 74 79 0a 20 20  the integrity.  
f1f0: 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61 74 74 61    ** of all atta
f200: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 20  ched databases. 
f210: 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
f220: 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73  iDb>=0 );.    as
f230: 73 65 72 74 28 20 69 44 62 3d 3d 30 20 7c 7c 20  sert( iDb==0 || 
f240: 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20 20 20 69  pId2->z );.    i
f250: 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30 20 29 20  f( pId2->z==0 ) 
f260: 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f  iDb = -1;..    /
f270: 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  * Initialize the
f280: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f   VDBE program */
f290: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
f2a0: 6d 20 3d 20 36 3b 0a 20 20 20 20 73 71 6c 69 74  m = 6;.    sqlit
f2b0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
f2c0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  (v, 1);.    sqli
f2d0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
f2e0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
f2f0: 4e 41 4d 45 2c 20 22 69 6e 74 65 67 72 69 74 79  NAME, "integrity
f300: 5f 63 68 65 63 6b 22 2c 20 53 51 4c 49 54 45 5f  _check", SQLITE_
f310: 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 2f 2a  STATIC);..    /*
f320: 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d   Set the maximum
f330: 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a   error count */.
f340: 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49      mxErr = SQLI
f350: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
f360: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20  CK_ERROR_MAX;.  
f370: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
f380: 20 20 20 20 20 20 73 71 6c 69 74 65 33 47 65 74        sqlite3Get
f390: 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d  Int32(zRight, &m
f3a0: 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28  xErr);.      if(
f3b0: 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20   mxErr<=0 ){.   
f3c0: 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c       mxErr = SQL
f3d0: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
f3e0: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20  ECK_ERROR_MAX;. 
f3f0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
f400: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f410: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
f420: 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a  , mxErr, 1);  /*
f430: 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72   reg[1] holds er
f440: 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20  rors left */..  
f450: 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67    /* Do an integ
f460: 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20 65 61  rity check on ea
f470: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
f480: 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   */.    for(i=0;
f490: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
f4a0: 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c 65 6d  {.      HashElem
f4b0: 20 2a 78 3b 0a 20 20 20 20 20 20 48 61 73 68 20   *x;.      Hash 
f4c0: 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e  *pTbls;.      in
f4d0: 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20  t cnt = 0;..    
f4e0: 20 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44    if( OMIT_TEMPD
f4f0: 42 20 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74  B && i==1 ) cont
f500: 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20  inue;.      if( 
f510: 69 44 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62  iDb>=0 && i!=iDb
f520: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20   ) continue;..  
f530: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
f540: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
f550: 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64  se, i);.      ad
f560: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
f570: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50  AddOp1(v, OP_IfP
f580: 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20  os, 1); /* Halt 
f590: 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73  if out of errors
f5a0: 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
f5b0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
f5c0: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
f5d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f5e0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
f5f0: 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20  );..      /* Do 
f600: 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  an integrity che
f610: 63 6b 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65  ck of the B-Tree
f620: 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
f630: 2a 2a 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c  ** Begin by fill
f640: 69 6e 67 20 72 65 67 69 73 74 65 72 73 20 32 2c  ing registers 2,
f650: 20 33 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65   3, ... with the
f660: 20 72 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62   root pages numb
f670: 65 72 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72  ers.      ** for
f680: 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20   all tables and 
f690: 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20 64  indices in the d
f6a0: 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a  atabase..      *
f6b0: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
f6c0: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
f6d0: 65 78 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29  exHeld(db, i, 0)
f6e0: 20 29 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20   );.      pTbls 
f6f0: 3d 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53  = &db->aDb[i].pS
f700: 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a  chema->tblHash;.
f710: 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69        for(x=sqli
f720: 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c  teHashFirst(pTbl
f730: 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48  s); x; x=sqliteH
f740: 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20  ashNext(x)){.   
f750: 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
f760: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
f770: 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e  a(x);.        In
f780: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20  dex *pIdx;.     
f790: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f7a0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
f7b0: 65 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20  er, pTab->tnum, 
f7c0: 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  2+cnt);.        
f7d0: 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 66  cnt++;.        f
f7e0: 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  or(pIdx=pTab->pI
f7f0: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
f800: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20  =pIdx->pNext){. 
f810: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
f820: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
f830: 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e  _Integer, pIdx->
f840: 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20  tnum, 2+cnt);.  
f850: 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20          cnt++;. 
f860: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
f870: 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  ..      /* Make 
f880: 73 75 72 65 20 73 75 66 66 69 63 69 65 6e 74 20  sure sufficient 
f890: 6e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74  number of regist
f8a0: 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 61 6c  ers have been al
f8b0: 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20  located */.     
f8c0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
f8d0: 4d 41 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65  MAX( pParse->nMe
f8e0: 6d 2c 20 63 6e 74 2b 37 20 29 3b 0a 0a 20 20 20  m, cnt+7 );..   
f8f0: 20 20 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74     /* Do the b-t
f900: 72 65 65 20 69 6e 74 65 67 72 69 74 79 20 63 68  ree integrity ch
f910: 65 63 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73 71  ecks */.      sq
f920: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
f930: 76 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43  v, OP_IntegrityC
f940: 6b 2c 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20  k, 2, cnt, 1);. 
f950: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f960: 43 68 61 6e 67 65 50 35 28 76 2c 20 28 75 38 29  ChangeP5(v, (u8)
f970: 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d  i);.      addr =
f980: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f990: 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c  p1(v, OP_IsNull,
f9a0: 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   2);.      sqlit
f9b0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
f9c0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
f9d0: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 73 71  , 0,.         sq
f9e0: 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
f9f0: 20 22 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73   "*** in databas
fa00: 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d  e %s ***\n", db-
fa10: 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a  >aDb[i].zName),.
fa20: 20 20 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41           P4_DYNA
fa30: 4d 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  MIC);.      sqli
fa40: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
fa50: 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 29 3b   OP_Move, 2, 4);
fa60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
fa70: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
fa80: 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b  oncat, 4, 3, 2);
fa90: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
faa0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
fab0: 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b  esultRow, 2, 1);
fac0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
fad0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
fae0: 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  dr);..      /* M
faf0: 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65  ake sure all the
fb00: 20 69 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e   indices are con
fb10: 73 74 72 75 63 74 65 64 20 63 6f 72 72 65 63 74  structed correct
fb20: 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ly..      */.   
fb30: 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48     for(x=sqliteH
fb40: 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b  ashFirst(pTbls);
fb50: 20 78 20 26 26 20 21 69 73 51 75 69 63 6b 3b 20   x && !isQuick; 
fb60: 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  x=sqliteHashNext
fb70: 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61  (x)){.        Ta
fb80: 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69  ble *pTab = sqli
fb90: 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20  teHashData(x);. 
fba0: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49         Index *pI
fbb0: 64 78 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  dx;.        int 
fbc0: 6c 6f 6f 70 54 6f 70 3b 0a 0a 20 20 20 20 20 20  loopTop;..      
fbd0: 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64    if( pTab->pInd
fbe0: 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ex==0 ) continue
fbf0: 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72 20 3d  ;.        addr =
fc00: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
fc10: 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p1(v, OP_IfPos, 
fc20: 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66 20  1);  /* Stop if 
fc30: 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f  out of errors */
fc40: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
fc50: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
fc60: 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20  _Halt, 0, 0);.  
fc70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fc80: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
fc90: 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  r);.        sqli
fca0: 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61  te3ExprCacheClea
fcb0: 72 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  r(pParse);.     
fcc0: 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61     sqlite3OpenTa
fcd0: 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 70 50  bleAndIndices(pP
fce0: 61 72 73 65 2c 20 70 54 61 62 2c 20 31 2c 20 2d  arse, pTab, 1, -
fcf0: 31 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b  1, OP_OpenRead);
fd00: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
fd10: 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  , pIdx=pTab->pIn
fd20: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
fd30: 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b  pIdx->pNext, j++
fd40: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
fd50: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
fd60: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c  , OP_Integer, 0,
fd70: 20 37 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20   7+j); /* index 
fd80: 65 6e 74 72 69 65 73 20 63 6f 75 6e 74 65 72 20  entries counter 
fd90: 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  */.        }.   
fda0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
fdb0: 6d 20 3d 20 4d 41 58 28 70 50 61 72 73 65 2d 3e  m = MAX(pParse->
fdc0: 6e 4d 65 6d 2c 20 37 2b 6a 29 3b 0a 20 20 20 20  nMem, 7+j);.    
fdd0: 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71      loopTop = sq
fde0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
fdf0: 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 31 2c  v, OP_Rewind, 1,
fe00: 20 30 29 20 2b 20 31 3b 0a 20 20 20 20 20 20 20   0) + 1;.       
fe10: 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70   for(j=0, pIdx=p
fe20: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
fe30: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
fe40: 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ext, j++){.     
fe50: 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a       int jmp2, j
fe60: 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20 69  mp3;.          i
fe70: 6e 74 20 72 31 3b 0a 20 20 20 20 20 20 20 20 20  nt r1;.         
fe80: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
fe90: 62 65 4f 70 4c 69 73 74 20 69 64 78 45 72 72 5b  beOpList idxErr[
fea0: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20  ] = {.          
feb0: 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20    { OP_AddImm,  
fec0: 20 20 20 20 31 2c 20 2d 31 2c 20 20 30 7d 2c 0a      1, -1,  0},.
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
fee0: 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c  _String8,     0,
fef0: 20 20 33 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    3,  0},    /* 
ff00: 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  1 */.           
ff10: 20 7b 20 4f 50 5f 52 6f 77 69 64 2c 20 20 20 20   { OP_Rowid,    
ff20: 20 20 20 31 2c 20 20 34 2c 20 20 30 7d 2c 0a 20     1,  4,  0},. 
ff30: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
ff40: 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20  String8,     0, 
ff50: 20 35 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33   5,  0},    /* 3
ff60: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
ff70: 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20  { OP_String8,   
ff80: 20 20 30 2c 20 20 36 2c 20 20 30 7d 2c 20 20 20    0,  6,  0},   
ff90: 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20   /* 4 */.       
ffa0: 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61 74       { OP_Concat
ffb0: 2c 20 20 20 20 20 20 34 2c 20 20 33 2c 20 20 33  ,      4,  3,  3
ffc0: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  },.            {
ffd0: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20   OP_Concat,     
ffe0: 20 35 2c 20 20 33 2c 20 20 33 7d 2c 0a 20 20 20   5,  3,  3},.   
fff0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f           { OP_Co
10000 6e 63 61 74 2c 20 20 20 20 20 20 36 2c 20 20 33  ncat,      6,  3
10010 2c 20 20 33 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  3},.         
10020 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
10030 77 2c 20 20 20 33 2c 20 20 31 2c 20 20 30 7d 2c  w,   3,  1,  0},
10040 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
10050 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31  P_IfPos,       1
10060 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  0,  0},    /*
10070 20 39 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   9 */.          
10080 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20    { OP_Halt,    
10090 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 0a      0,  0,  0},.
100a0 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20            };.   
100b0 20 20 20 20 20 20 20 72 31 20 3d 20 73 71 6c 69         r1 = sqli
100c0 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
100d0 4b 65 79 28 70 50 61 72 73 65 2c 20 70 49 64 78  Key(pParse, pIdx
100e0 2c 20 31 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33  , 1, 0, 0, &jmp3
100f0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10100 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10110 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2b 6a  , OP_AddImm, 7+j
10120 2c 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d  , 1);  /* increm
10130 65 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20  ent entry count 
10140 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  */.          jmp
10150 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  2 = sqlite3VdbeA
10160 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46  ddOp4Int(v, OP_F
10170 6f 75 6e 64 2c 20 6a 2b 32 2c 20 30 2c 20 72 31  ound, j+2, 0, r1
10180 2c 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 2b  , pIdx->nKeyCol+
10190 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64  1);.          ad
101a0 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
101b0 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
101c0 61 79 53 69 7a 65 28 69 64 78 45 72 72 29 2c 20  aySize(idxErr), 
101d0 69 64 78 45 72 72 29 3b 0a 20 20 20 20 20 20 20  idxErr);.       
101e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
101f0 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 31  angeP4(v, addr+1
10200 2c 20 22 72 6f 77 69 64 20 22 2c 20 50 34 5f 53  , "rowid ", P4_S
10210 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
10220 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
10230 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 33 2c  ngeP4(v, addr+3,
10240 20 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20   " missing from 
10250 69 6e 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54  index ", P4_STAT
10260 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  IC);.          s
10270 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
10280 50 34 28 76 2c 20 61 64 64 72 2b 34 2c 20 70 49  P4(v, addr+4, pI
10290 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52  dx->zName, P4_TR
102a0 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
102b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
102c0 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 2b  umpHere(v, addr+
102d0 39 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  9);.          sq
102e0 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
102f0 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20  e(v, jmp2);.    
10300 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10310 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c  eResolveLabel(v,
10320 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20   jmp3);.        
10330 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
10340 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10350 50 5f 4e 65 78 74 2c 20 31 2c 20 6c 6f 6f 70 54  P_Next, 1, loopT
10360 6f 70 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  op);.        sql
10370 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
10380 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a  (v, loopTop-1);.
10390 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
103a0 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 20  MIT_BTREECOUNT. 
103b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
103c0 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
103d0 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
103e0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
103f0 20 20 20 20 20 20 20 22 77 72 6f 6e 67 20 23 20         "wrong # 
10400 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
10410 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43  dex ", P4_STATIC
10420 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  );.        for(j
10430 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
10440 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
10450 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
10460 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  ++){.          a
10470 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
10480 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b  eCurrentAddr(v);
10490 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
104a0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
104b0 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64  OP_IfPos, 1, add
104c0 72 2b 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  r+2);.          
104d0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
104e0 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c  2(v, OP_Halt, 0,
104f0 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   0);.          s
10500 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10510 28 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 6a 2b  (v, OP_Count, j+
10520 32 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  2, 3);.         
10530 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10540 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 37 2b 6a  p3(v, OP_Eq, 7+j
10550 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 0a 20 20  , addr+8, 3);.  
10560 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10570 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10580 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a  AddImm, 1, -1);.
10590 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
105a0 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
105b0 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
105c0 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c   0, pIdx->zName,
105d0 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a   P4_TRANSIENT);.
105e0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
105f0 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
10600 50 5f 43 6f 6e 63 61 74 2c 20 33 2c 20 32 2c 20  P_Concat, 3, 2, 
10610 37 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  7);.          sq
10620 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10630 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
10640 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   7, 1);.        
10650 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
10660 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55  TE_OMIT_BTREECOU
10670 4e 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20 0a 20  NT */.      } . 
10680 20 20 20 7d 0a 20 20 20 20 61 64 64 72 20 3d 20     }.    addr = 
10690 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
106a0 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
106b0 65 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43  e(endCode), endC
106c0 6f 64 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ode);.    sqlite
106d0 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c  3VdbeChangeP2(v,
106e0 20 61 64 64 72 2c 20 2d 6d 78 45 72 72 29 3b 0a   addr, -mxErr);.
106f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
10700 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 2b  umpHere(v, addr+
10710 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
10720 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 61  dbeChangeP4(v, a
10730 64 64 72 2b 32 2c 20 22 6f 6b 22 2c 20 50 34 5f  ddr+2, "ok", P4_
10740 53 54 41 54 49 43 29 3b 0a 20 20 7d 0a 20 20 62  STATIC);.  }.  b
10750 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
10760 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
10770 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
10780 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
10790 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a 20  MIT_UTF16.  /*. 
107a0 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63   **   PRAGMA enc
107b0 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52 41  oding.  **   PRA
107c0 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22  GMA encoding = "
107d0 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36 22 7c  utf-8"|"utf-16"|
107e0 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74 66 2d  "utf-16le"|"utf-
107f0 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  16be".  **.  ** 
10800 49 6e 20 69 74 73 20 66 69 72 73 74 20 66 6f 72  In its first for
10810 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61 20 72  m, this pragma r
10820 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63 6f 64  eturns the encod
10830 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a  ing of the main.
10840 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 49    ** database. I
10850 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
10860 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65  s not initialize
10870 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69 61 6c  d, it is initial
10880 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20  ized now..  **. 
10890 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 66   ** The second f
108a0 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72 61 67  orm of this prag
108b0 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66  ma is a no-op if
108c0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
108d0 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61 73  se file.  ** has
108e0 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62 65 65   not already bee
108f0 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49  n initialized. I
10900 6e 20 74 68 69 73 20 63 61 73 65 20 69 74 20 73  n this case it s
10910 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a  ets the default.
10920 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74 68    ** encoding th
10930 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  at will be used 
10940 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  for the main dat
10950 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 61 20  abase file if a 
10960 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69 73  new file.  ** is
10970 20 63 72 65 61 74 65 64 2e 20 49 66 20 61 6e 20   created. If an 
10980 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20 64 61  existing main da
10990 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 6f  tabase file is o
109a0 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a  pened, then the.
109b0 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74 65 78    ** default tex
109c0 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74  t encoding for t
109d0 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74 61  he existing data
109e0 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a 20 20  base is used..  
109f0 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c 20  ** .  ** In all 
10a00 63 61 73 65 73 20 6e 65 77 20 64 61 74 61 62 61  cases new databa
10a10 73 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  ses created usin
10a20 67 20 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d  g the ATTACH com
10a30 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63 72  mand are.  ** cr
10a40 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68 65  eated to use the
10a50 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20 74 65   same default te
10a60 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 74  xt encoding as t
10a70 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
10a80 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d 61  . If.  ** the ma
10a90 69 6e 20 64 61 74 61 62 61 73 65 20 68 61 73 20  in database has 
10aa0 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  not been initial
10ab0 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72 65 61  ized and/or crea
10ac0 74 65 64 20 77 68 65 6e 20 41 54 54 41 43 48 0a  ted when ATTACH.
10ad0 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64    ** is executed
10ae0 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20 62  , this is done b
10af0 65 66 6f 72 65 20 74 68 65 20 41 54 54 41 43 48  efore the ATTACH
10b00 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a   operation..  **
10b10 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65 63  .  ** In the sec
10b20 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20 70 72  ond form this pr
10b30 61 67 6d 61 20 73 65 74 73 20 74 68 65 20 74 65  agma sets the te
10b40 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20 62  xt encoding to b
10b50 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20 6e  e used in.  ** n
10b60 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ew database file
10b70 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
10b80 74 68 69 73 20 64 61 74 61 62 61 73 65 20 68 61  this database ha
10b90 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c 79  ndle. It is only
10ba0 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69 66 20  .  ** useful if 
10bb0 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61 74  invoked immediat
10bc0 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6d 61  ely after the ma
10bd0 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a 20 20  in database i.  
10be0 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
10bf0 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20 20  p_ENCODING: {.  
10c00 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73    static const s
10c10 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b 0a  truct EncName {.
10c20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d        char *zNam
10c30 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e 63 3b  e;.      u8 enc;
10c40 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73 5b  .    } encnames[
10c50 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 55  ] = {.      { "U
10c60 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54 45  TF8",     SQLITE
10c70 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 0a  _UTF8        },.
10c80 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c        { "UTF-8",
10c90 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20      SQLITE_UTF8 
10ca0 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75         },  /* Mu
10cb0 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 31  st be element [1
10cc0 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  ] */.      { "UT
10cd0 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f  F-16le", SQLITE_
10ce0 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 20 20  UTF16LE     },  
10cf0 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
10d00 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [2] */.      
10d10 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20 53 51  { "UTF-16be", SQ
10d20 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20  LITE_UTF16BE    
10d30 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
10d40 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20  element [3] */. 
10d50 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22       { "UTF16le"
10d60 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ,  SQLITE_UTF16L
10d70 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b  E     },.      {
10d80 20 22 55 54 46 31 36 62 65 22 2c 20 20 53 51 4c   "UTF16be",  SQL
10d90 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20  ITE_UTF16BE     
10da0 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  },.      { "UTF-
10db0 31 36 22 2c 20 20 20 30 20 20 20 20 20 20 20 20  16",   0        
10dc0 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20            }, /* 
10dd0 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
10de0 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  VE */.      { "U
10df0 54 46 31 36 22 2c 20 20 20 20 30 20 20 20 20 20  TF16",    0     
10e00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20               }, 
10e10 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e  /* SQLITE_UTF16N
10e20 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b  ATIVE */.      {
10e30 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a 20   0, 0 }.    };. 
10e40 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20     const struct 
10e50 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a 20  EncName *pEnc;. 
10e60 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
10e70 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20  {    /* "PRAGMA 
10e80 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20  encoding" */.   
10e90 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65     if( sqlite3Re
10ea0 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29  adSchema(pParse)
10eb0 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
10ec0 75 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ut;.      sqlite
10ed0 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
10ee0 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
10ef0 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
10f00 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
10f10 5f 4e 41 4d 45 2c 20 22 65 6e 63 6f 64 69 6e 67  _NAME, "encoding
10f20 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
10f30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
10f40 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
10f50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 29 3b  _String8, 0, 1);
10f60 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
10f70 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55  ncnames[SQLITE_U
10f80 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45  TF8].enc==SQLITE
10f90 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20 61  _UTF8 );.      a
10fa0 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b  ssert( encnames[
10fb0 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e  SQLITE_UTF16LE].
10fc0 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
10fd0 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73  6LE );.      ass
10fe0 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51  ert( encnames[SQ
10ff0 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e  LITE_UTF16BE].en
11000 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
11010 45 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  E );.      sqlit
11020 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76  e3VdbeChangeP4(v
11030 2c 20 2d 31 2c 20 65 6e 63 6e 61 6d 65 73 5b 45  , -1, encnames[E
11040 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e  NC(pParse->db)].
11050 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43  zName, P4_STATIC
11060 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
11070 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
11080 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
11090 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20 20 20  );.    }else{   
110a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110b0 20 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20       /* "PRAGMA 
110c0 65 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58 22 20  encoding = XXX" 
110d0 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79  */.      /* Only
110e0 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75   change the valu
110f0 65 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e 63 20  e of sqlite.enc 
11100 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  if the database 
11110 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a 20 20  handle is not.  
11120 20 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a      ** initializ
11130 65 64 2e 20 49 66 20 74 68 65 20 6d 61 69 6e 20  ed. If the main 
11140 64 61 74 61 62 61 73 65 20 65 78 69 73 74 73 2c  database exists,
11150 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65 2e   the new sqlite.
11160 65 6e 63 20 76 61 6c 75 65 0a 20 20 20 20 20 20  enc value.      
11170 2a 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65 72 77  ** will be overw
11180 72 69 74 74 65 6e 20 77 68 65 6e 20 74 68 65 20  ritten when the 
11190 73 63 68 65 6d 61 20 69 73 20 6e 65 78 74 20 6c  schema is next l
111a0 6f 61 64 65 64 2e 20 49 66 20 69 74 20 64 6f 65  oaded. If it doe
111b0 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61  s not.      ** a
111c0 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 69  lready exists, i
111d0 74 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65  t will be create
111e0 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77  d to use the new
111f0 20 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75 65 2e   encoding value.
11200 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
11210 69 66 28 20 0a 20 20 20 20 20 20 20 20 21 28 44  if( .        !(D
11220 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
11230 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61   0, DB_SchemaLoa
11240 64 65 64 29 29 20 7c 7c 20 0a 20 20 20 20 20 20  ded)) || .      
11250 20 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28    DbHasProperty(
11260 64 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74 79 29  db, 0, DB_Empty)
11270 20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20   .      ){.     
11280 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63     for(pEnc=&enc
11290 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e  names[0]; pEnc->
112a0 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a  zName; pEnc++){.
112b0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 30 3d            if( 0=
112c0 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
112d0 7a 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e  zRight, pEnc->zN
112e0 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ame) ){.        
112f0 20 20 20 20 45 4e 43 28 70 50 61 72 73 65 2d 3e      ENC(pParse->
11300 64 62 29 20 3d 20 70 45 6e 63 2d 3e 65 6e 63 20  db) = pEnc->enc 
11310 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51  ? pEnc->enc : SQ
11320 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
11330 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
11340 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  eak;.          }
11350 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
11360 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e     if( !pEnc->zN
11370 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ame ){.         
11380 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
11390 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70  (pParse, "unsupp
113a0 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20  orted encoding: 
113b0 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  %s", zRight);.  
113c0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
113d0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
113e0 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
113f0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
11400 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
11410 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45  E_OMIT_SCHEMA_VE
11420 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20  RSION_PRAGMAS.  
11430 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
11440 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65   [database.]sche
11450 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20  ma_version.  ** 
11460 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
11470 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69  se.]schema_versi
11480 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  on = <integer>. 
11490 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
114a0 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65  A [database.]use
114b0 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20  r_version.  **  
114c0 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
114d0 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  e.]user_version 
114e0 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a  = <integer>.  **
114f0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
11500 64 61 74 61 62 61 73 65 2e 5d 66 72 65 65 6c 69  database.]freeli
11510 73 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74 65  st_count = <inte
11520 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ger>.  **.  **  
11530 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
11540 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69  e.]application_i
11550 64 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  d.  **   PRAGMA 
11560 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69  [database.]appli
11570 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74  cation_id = <int
11580 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
11590 54 68 65 20 70 72 61 67 6d 61 27 73 20 73 63 68  The pragma's sch
115a0 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema_version and 
115b0 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72 65  user_version are
115c0 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72 20   used to set or 
115d0 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  get.  ** the val
115e0 75 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ue of the schema
115f0 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65  -version and use
11600 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70 65  r-version, respe
11610 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20  ctively. Both.  
11620 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  ** the schema-ve
11630 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75 73  rsion and the us
11640 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20 33  er-version are 3
11650 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  2-bit signed int
11660 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65  egers.  ** store
11670 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
11680 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20  e header..  **. 
11690 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d 63   ** The schema-c
116a0 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c 79  ookie is usually
116b0 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65   only manipulate
116c0 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20  d internally by 
116d0 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20  SQLite. It.  ** 
116e0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
116f0 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76 65  y SQLite wheneve
11700 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
11710 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69 65  chema is modifie
11720 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61 74  d (by.  ** creat
11730 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67 20  ing or dropping 
11740 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  a table or index
11750 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76 65  ). The schema ve
11760 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79  rsion is used by
11770 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61 63  .  ** SQLite eac
11780 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69  h time a query i
11790 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e  s executed to en
117a0 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e  sure that the in
117b0 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a  ternal cache.  *
117c0 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  * of the schema 
117d0 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c  used when compil
117e0 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65 72  ing the SQL quer
117f0 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73 63  y matches the sc
11800 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65  hema of.  ** the
11810 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e 73   database agains
11820 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70  t which the comp
11830 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61 63  iled query is ac
11840 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e  tually executed.
11850 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e 67  .  ** Subverting
11860 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20   this mechanism 
11870 62 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d 41  by using "PRAGMA
11880 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22   schema_version"
11890 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20   to modify.  ** 
118a0 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
118b0 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c  on is potentiall
118c0 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64 20  y dangerous and 
118d0 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f 67  may lead to prog
118e0 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65 73  ram.  ** crashes
118f0 20 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f 72   or database cor
11900 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69 74  ruption. Use wit
11910 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a  h caution!.  **.
11920 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76 65    ** The user-ve
11930 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65  rsion is not use
11940 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20  d internally by 
11950 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20 62  SQLite. It may b
11960 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 61  e used by.  ** a
11970 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20  pplications for 
11980 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a  any purpose..  *
11990 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
119a0 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a 20 7b  _HEADER_VALUE: {
119b0 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  .    int iCookie
119c0 3b 20 20 20 2f 2a 20 43 6f 6f 6b 69 65 20 69 6e  ;   /* Cookie in
119d0 64 65 78 2e 20 31 20 66 6f 72 20 73 63 68 65 6d  dex. 1 for schem
119e0 61 2d 63 6f 6f 6b 69 65 2c 20 36 20 66 6f 72 20  a-cookie, 6 for 
119f0 75 73 65 72 2d 63 6f 6f 6b 69 65 2e 20 2a 2f 0a  user-cookie. */.
11a00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
11a10 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29  sesBtree(v, iDb)
11a20 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 7a 4c  ;.    switch( zL
11a30 65 66 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  eft[0] ){.      
11a40 63 61 73 65 20 27 61 27 3a 20 63 61 73 65 20 27  case 'a': case '
11a50 41 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f  A':.        iCoo
11a60 6b 69 65 20 3d 20 42 54 52 45 45 5f 41 50 50 4c  kie = BTREE_APPL
11a70 49 43 41 54 49 4f 4e 5f 49 44 3b 0a 20 20 20 20  ICATION_ID;.    
11a80 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
11a90 20 63 61 73 65 20 27 66 27 3a 20 63 61 73 65 20   case 'f': case 
11aa0 27 46 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f  'F':.        iCo
11ab0 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 46 52 45  okie = BTREE_FRE
11ac0 45 5f 50 41 47 45 5f 43 4f 55 4e 54 3b 0a 20 20  E_PAGE_COUNT;.  
11ad0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
11ae0 20 20 20 63 61 73 65 20 27 73 27 3a 20 63 61 73     case 's': cas
11af0 65 20 27 53 27 3a 0a 20 20 20 20 20 20 20 20 69  e 'S':.        i
11b00 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 53  Cookie = BTREE_S
11b10 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 3b 0a 20  CHEMA_VERSION;. 
11b20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
11b30 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20      default:.   
11b40 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42       iCookie = B
11b50 54 52 45 45 5f 55 53 45 52 5f 56 45 52 53 49 4f  TREE_USER_VERSIO
11b60 4e 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  N;.        break
11b70 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
11b80 20 7a 52 69 67 68 74 20 26 26 20 69 43 6f 6f 6b   zRight && iCook
11b90 69 65 21 3d 42 54 52 45 45 5f 46 52 45 45 5f 50  ie!=BTREE_FREE_P
11ba0 41 47 45 5f 43 4f 55 4e 54 20 29 7b 0a 20 20 20  AGE_COUNT ){.   
11bb0 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20     /* Write the 
11bc0 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65  specified cookie
11bd0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20   value */.      
11be0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
11bf0 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69  eOpList setCooki
11c00 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  e[] = {.        
11c10 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  { OP_Transaction
11c20 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c  ,    0,  1,  0},
11c30 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
11c40 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
11c50 2c 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c 20  ,        0,  1, 
11c60 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
11c70 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74          { OP_Set
11c80 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20  Cookie,      0, 
11c90 20 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32   0,  1},    /* 2
11ca0 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20   */.      };.   
11cb0 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71     int addr = sq
11cc0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
11cd0 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
11ce0 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43  setCookie), setC
11cf0 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71  ookie);.      sq
11d00 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
11d10 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b  1(v, addr, iDb);
11d20 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11d30 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
11d40 64 72 2b 31 2c 20 73 71 6c 69 74 65 33 41 74 6f  dr+1, sqlite3Ato
11d50 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
11d60 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
11d70 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 32 2c  ngeP1(v, addr+2,
11d80 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
11d90 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32  ite3VdbeChangeP2
11da0 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f  (v, addr+2, iCoo
11db0 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  kie);.    }else{
11dc0 0a 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74  .      /* Read t
11dd0 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f  he specified coo
11de0 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20  kie value */.   
11df0 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
11e00 56 64 62 65 4f 70 4c 69 73 74 20 72 65 61 64 43  VdbeOpList readC
11e10 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  ookie[] = {.    
11e20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63      { OP_Transac
11e30 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c  tion,     0,  0,
11e40 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
11e50 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  .        { OP_Re
11e60 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30  adCookie,      0
11e70 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  1,  0},    /*
11e80 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   1 */.        { 
11e90 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
11ea0 20 20 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20      1,  1,  0}. 
11eb0 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e       };.      in
11ec0 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33  t addr = sqlite3
11ed0 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
11ee0 20 41 72 72 61 79 53 69 7a 65 28 72 65 61 64 43   ArraySize(readC
11ef0 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b  ookie), readCook
11f00 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ie);.      sqlit
11f10 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
11f20 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
11f30 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
11f40 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
11f50 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  1, iDb);.      s
11f60 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
11f70 50 33 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 43  P3(v, addr+1, iC
11f80 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71  ookie);.      sq
11f90 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
11fa0 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20  ols(v, 1);.     
11fb0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
11fc0 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
11fd0 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74  NAME_NAME, zLeft
11fe0 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
11ff0 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  NT);.    }.  }. 
12000 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
12010 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  * SQLITE_OMIT_SC
12020 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
12030 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
12040 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
12050 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
12060 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
12070 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69  GMA compile_opti
12080 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  ons.  **.  ** Re
12090 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f  turn the names o
120a0 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69  f all compile-ti
120b0 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20  me options used 
120c0 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20  in this build,. 
120d0 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70   ** one option p
120e0 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63  er row..  */.  c
120f0 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4d 50  ase PragTyp_COMP
12100 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20  ILE_OPTIONS: {. 
12110 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20     int i = 0;.  
12120 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f    const char *zO
12130 70 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  pt;.    sqlite3V
12140 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
12150 20 31 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   1);.    pParse-
12160 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73  >nMem = 1;.    s
12170 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
12180 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
12190 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70 69 6c  ME_NAME, "compil
121a0 65 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c 49 54  e_option", SQLIT
121b0 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 77  E_STATIC);.    w
121c0 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71  hile( (zOpt = sq
121d0 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
121e0 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30  ion_get(i++))!=0
121f0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
12200 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
12210 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
12220 20 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a 20 20   0, zOpt, 0);.  
12230 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
12240 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
12250 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
12260 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
12270 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
12280 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
12290 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23  TION_DIAGS */..#
122a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
122b0 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a  IT_WAL.  /*.  **
122c0 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
122d0 61 73 65 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f  ase.]wal_checkpo
122e0 69 6e 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75  int = passive|fu
122f0 6c 6c 7c 72 65 73 74 61 72 74 0a 20 20 2a 2a 0a  ll|restart.  **.
12300 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20    ** Checkpoint 
12310 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
12320 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
12330 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54  p_WAL_CHECKPOINT
12340 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20  : {.    int iBt 
12350 3d 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53  = (pId2->z?iDb:S
12360 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
12370 45 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f  ED);.    int eMo
12380 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
12390 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a  KPOINT_PASSIVE;.
123a0 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
123b0 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
123c0 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
123d0 74 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b  t, "full")==0 ){
123e0 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
123f0 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
12400 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d  NT_FULL;.      }
12410 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
12420 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  StrICmp(zRight, 
12430 22 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b  "restart")==0 ){
12440 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
12450 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
12460 4e 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20  NT_RESTART;.    
12470 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
12480 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
12490 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70  ols(v, 3);.    p
124a0 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
124b0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
124c0 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
124d0 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
124e0 62 75 73 79 22 2c 20 53 51 4c 49 54 45 5f 53 54  busy", SQLITE_ST
124f0 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
12500 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
12510 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
12520 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c 49  AME, "log", SQLI
12530 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
12540 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
12550 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
12560 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63 6b  AME_NAME, "check
12570 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49 54 45  pointed", SQLITE
12580 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 73  _STATIC);..    s
12590 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
125a0 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  (v, OP_Checkpoin
125b0 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31  t, iBt, eMode, 1
125c0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
125d0 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
125e0 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b  esultRow, 1, 3);
125f0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
12600 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
12610 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  A wal_autocheckp
12620 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  oint.  **   PRAG
12630 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  MA wal_autocheck
12640 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20  point = N.  **. 
12650 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20   ** Configure a 
12660 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12670 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  ion to automatic
12680 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20  ally checkpoint 
12690 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
126a0 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69  after accumulati
126b0 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74  ng N frames in t
126c0 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79  he log. Or query
126d0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
126e0 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e   value.  ** of N
126f0 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
12700 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48  agTyp_WAL_AUTOCH
12710 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20  ECKPOINT: {.    
12720 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
12730 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f      sqlite3_wal_
12740 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64  autocheckpoint(d
12750 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  b, sqlite3Atoi(z
12760 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20  Right));.    }. 
12770 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
12780 6e 74 28 70 50 61 72 73 65 2c 20 22 77 61 6c 5f  nt(pParse, "wal_
12790 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c  autocheckpoint",
127a0 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61   .       db->xWa
127b0 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74  lCallback==sqlit
127c0 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
127d0 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 53   ? .           S
127e0 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
127f0 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20  (db->pWalArg) : 
12800 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  0);.  }.  break;
12810 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20  .#endif..  /*.  
12820 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e  **  PRAGMA shrin
12830 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20  k_memory.  **.  
12840 2a 2a 20 54 68 69 73 20 70 72 61 67 6d 61 20 61  ** This pragma a
12850 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20  ttempts to free 
12860 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61  as much memory a
12870 73 20 70 6f 73 73 69 62 6c 65 20 66 72 6f 6d 20  s possible from 
12880 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74  the.  ** current
12890 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
128a0 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  tion..  */.  cas
128b0 65 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e 4b  e PragTyp_SHRINK
128c0 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20 20 73  _MEMORY: {.    s
128d0 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73  qlite3_db_releas
128e0 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20  e_memory(db);.  
128f0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
12900 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
12910 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20   busy_timeout.  
12920 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79  **   PRAGMA busy
12930 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a  _timeout = N.  *
12940 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69  *.  ** Call sqli
12950 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
12960 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e  (db, N).  Return
12970 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d   the current tim
12980 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20  eout value.  ** 
12990 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20 20  if one is set.  
129a0 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c  If no busy handl
129b0 65 72 20 6f 72 20 61 20 64 69 66 66 65 72 65 6e  er or a differen
129c0 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 69  t busy handler i
129d0 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20  s set.  ** then 
129e0 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  0 is returned.  
129f0 53 65 74 74 69 6e 67 20 74 68 65 20 62 75 73 79  Setting the busy
12a00 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72  _timeout to 0 or
12a10 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20 64   negative.  ** d
12a20 69 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d 65  isables the time
12a30 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61  out..  */.  /*ca
12a40 73 65 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f  se PragTyp_BUSY_
12a50 54 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61 75 6c  TIMEOUT*/ defaul
12a60 74 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28  t: {.    assert(
12a70 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69   aPragmaNames[mi
12a80 64 5d 2e 65 50 72 61 67 54 79 70 3d 3d 50 72 61  d].ePragTyp==Pra
12a90 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
12aa0 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  T );.    if( zRi
12ab0 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
12ac0 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
12ad0 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f  t(db, sqlite3Ato
12ae0 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
12af0 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
12b00 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74  leInt(pParse, "t
12b10 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75  imeout",  db->bu
12b20 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20  syTimeout);.    
12b30 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
12b40 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73  .  **   PRAGMA s
12b50 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20  oft_heap_limit. 
12b60 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66   **   PRAGMA sof
12b70 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e  t_heap_limit = N
12b80 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20  .  **.  ** Call 
12b90 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
12ba0 70 5f 6c 69 6d 69 74 36 34 28 4e 29 2e 20 20 52  p_limit64(N).  R
12bb0 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74  eturn the result
12bc0 2e 20 20 49 66 20 4e 20 69 73 20 6f 6d 69 74 74  .  If N is omitt
12bd0 65 64 2c 0a 20 20 2a 2a 20 75 73 65 20 2d 31 2e  ed,.  ** use -1.
12be0 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
12bf0 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c  gTyp_SOFT_HEAP_L
12c00 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69  IMIT: {.    sqli
12c10 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20  te3_int64 N;.   
12c20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 73   if( zRight && s
12c30 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 52 69  qlite3Atoi64(zRi
12c40 67 68 74 2c 20 26 4e 2c 20 31 30 30 30 30 30 30  ght, &N, 1000000
12c50 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3d 3d  , SQLITE_UTF8)==
12c60 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
12c70 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f     sqlite3_soft_
12c80 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b  heap_limit64(N);
12c90 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
12ca0 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
12cb0 65 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69  e, "soft_heap_li
12cc0 6d 69 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73  mit",  sqlite3_s
12cd0 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34  oft_heap_limit64
12ce0 28 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b  (-1));.    break
12cf0 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e  ;.  }..#if defin
12d00 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
12d10 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
12d20 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20  TE_TEST).  /*.  
12d30 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63 75  ** Report the cu
12d40 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66  rrent state of f
12d50 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c  ile logs for all
12d60 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a   databases.  */.
12d70 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c    case PragTyp_L
12d80 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20  OCK_STATUS: {.  
12d90 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
12da0 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63  har *const azLoc
12db0 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  kName[] = {.    
12dc0 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73    "unlocked", "s
12dd0 68 61 72 65 64 22 2c 20 22 72 65 73 65 72 76 65  hared", "reserve
12de0 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22  d", "pending", "
12df0 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d  exclusive".    }
12e00 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  ;.    int i;.   
12e10 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
12e20 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20  umCols(v, 2);.  
12e30 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
12e40 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   2;.    sqlite3V
12e50 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
12e60 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
12e70 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20 53 51  , "database", SQ
12e80 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
12e90 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
12ea0 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
12eb0 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74 61  LNAME_NAME, "sta
12ec0 74 75 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  tus", SQLITE_STA
12ed0 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  TIC);.    for(i=
12ee0 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
12ef0 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20  +){.      Btree 
12f00 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73  *pBt;.      cons
12f10 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d  t char *zState =
12f20 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20   "unknown";.    
12f30 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69    int j;.      i
12f40 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  f( db->aDb[i].zN
12f50 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ame==0 ) continu
12f60 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
12f70 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
12f80 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20  _String8, 0, 1, 
12f90 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  0, db->aDb[i].zN
12fa0 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b  ame, P4_STATIC);
12fb0 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d  .      pBt = db-
12fc0 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20  >aDb[i].pBt;.   
12fd0 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c     if( pBt==0 ||
12fe0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
12ff0 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20  er(pBt)==0 ){.  
13000 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22        zState = "
13010 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d  closed";.      }
13020 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
13030 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
13040 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d  , i ? db->aDb[i]
13050 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20  .zName : 0, .   
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13080 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c    SQLITE_FCNTL_L
13090 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53  OCKSTATE, &j)==S
130a0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
130b0 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61 7a       zState = az
130c0 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20  LockName[j];.   
130d0 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
130e0 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
130f0 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
13100 2c 20 30 2c 20 7a 53 74 61 74 65 2c 20 50 34 5f  , 0, zState, P4_
13110 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
13120 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
13130 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
13140 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 2);.    }. 
13150 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
13160 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
13170 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
13180 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59  case PragTyp_KEY
13190 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
131a0 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79  ht ) sqlite3_key
131b0 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69  _v2(db, zDb, zRi
131c0 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  ght, sqlite3Strl
131d0 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20  en30(zRight));. 
131e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
131f0 63 61 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b  case PragTyp_REK
13200 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
13210 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72  ight ) sqlite3_r
13220 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
13230 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33   zRight, sqlite3
13240 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29  Strlen30(zRight)
13250 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
13260 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  }.  case PragTyp
13270 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69  _HEXKEY: {.    i
13280 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
13290 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20     u8 iByte;.   
132a0 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20     int i;.      
132b0 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20  char zKey[40];. 
132c0 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42       for(i=0, iB
132d0 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28  yte=0; i<sizeof(
132e0 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74  zKey)*2 && sqlit
132f0 65 33 49 73 78 64 69 67 69 74 28 7a 52 69 67 68  e3Isxdigit(zRigh
13300 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20  t[i]); i++){.   
13310 20 20 20 20 20 69 42 79 74 65 20 3d 20 28 69 42       iByte = (iB
13320 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65  yte<<4) + sqlite
13330 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74  3HexToInt(zRight
13340 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66  [i]);.        if
13350 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65  ( (i&1)!=0 ) zKe
13360 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a  y[i/2] = iByte;.
13370 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
13380 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78  ( (zLeft[3] & 0x
13390 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20  f)==0xb ){.     
133a0 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76     sqlite3_key_v
133b0 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c  2(db, zDb, zKey,
133c0 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c   i/2);.      }el
133d0 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
133e0 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c  te3_rekey_v2(db,
133f0 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29   zDb, zKey, i/2)
13400 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
13410 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
13420 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
13430 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44  d(SQLITE_HAS_COD
13440 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  EC) || defined(S
13450 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52  QLITE_ENABLE_CER
13460 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61 67 54  OD).  case PragT
13470 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45  yp_ACTIVATE_EXTE
13480 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67  NSIONS: if( zRig
13490 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c  ht ){.#ifdef SQL
134a0 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20  ITE_HAS_CODEC.  
134b0 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
134c0 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73  NICmp(zRight, "s
134d0 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20  ee-", 4)==0 ){. 
134e0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74       sqlite3_act
134f0 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68  ivate_see(&zRigh
13500 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  t[4]);.    }.#en
13510 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
13520 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20  E_ENABLE_CEROD. 
13530 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
13540 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  rNICmp(zRight, "
13550 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29  cerod-", 6)==0 )
13560 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
13570 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26  activate_cerod(&
13580 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20  zRight[6]);.    
13590 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
135a0 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
135b0 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20  } /* End of the 
135c0 50 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f  PRAGMA switch */
135d0 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20  ..pragma_out:.  
135e0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
135f0 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69  , zLeft);.  sqli
13600 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 52  te3DbFree(db, zR
13610 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66  ight);.}..#endif
13620 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
13630 50 52 41 47 4d 41 20 2a 2f 0a                    PRAGMA */.