/ Hex Artifact Content
Login

Artifact 21f9e61ca8a3ccf699d28d4a5ec04ef33824624a:


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 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
0f80: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
0f90: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d 41  LITE_OMIT_AUTOMA
0fa0: 54 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b 20 2f  TIC_INDEX).  { /
0fb0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
0fc0: 22 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78  "automatic_index
0fd0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
0fe0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
0ff0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
1000: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1010: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1020: 2a 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  */ SQLITE_AutoIn
1030: 64 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65  dex },.#endif.#e
1040: 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ndif.  { /* zNam
1050: 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79 5f  e:     */ "busy_
1060: 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f 2a  timeout",.    /*
1070: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1080: 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
1090: 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  OUT,.    /* ePra
10a0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
10b0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
10c0: 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66 69  / 0 },.#if !defi
10d0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
10e0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
10f0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1100: 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65 22   */ "cache_size"
1110: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1120: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43  p:  */ PragTyp_C
1130: 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  ACHE_SIZE,.    /
1140: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1150: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1160: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1170: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1180: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1190: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
11a0: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
11b0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
11c0: 2f 20 22 63 61 63 68 65 5f 73 70 69 6c 6c 22 2c  / "cache_spill",
11d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
11e0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
11f0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1200: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1210: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1220: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
1230: 6c 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b  ll },.#endif.  {
1240: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1250: 2f 20 22 63 61 73 65 5f 73 65 6e 73 69 74 69 76  / "case_sensitiv
1260: 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f 2a 20  e_like",.    /* 
1270: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1280: 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49  agTyp_CASE_SENSI
1290: 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20 20 2f  TIVE_LIKE,.    /
12a0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
12b0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
12c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66       */ 0 },.#if
12d0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
12e0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
12f0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1300: 3a 20 20 20 20 20 2a 2f 20 22 63 68 65 63 6b 70  :     */ "checkp
1310: 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63 22 2c  oint_fullfsync",
1320: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1330: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1340: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1350: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1360: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1370: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
1380: 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66 0a  FSync },.#endif.
1390: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
13a0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
13b0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
13c0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
13d0: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22 2c 0a  ollation_list",.
13e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
13f0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f 4c    */ PragTyp_COL
1400: 4c 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20 20 20  LATION_LIST,.   
1410: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1420: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
1430: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1440: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1450: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
1460: 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
1470: 47 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  GS).  { /* zName
1480: 3a 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70 69 6c  :     */ "compil
1490: 65 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20 20 20  e_options",.    
14a0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
14b0: 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45   PragTyp_COMPILE
14c0: 5f 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a  _OPTIONS,.    /*
14d0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
14e0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
14f0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1500: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1510: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
1520: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
1530: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1540: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a  count_changes",.
1550: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1560: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1570: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1580: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1590: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
15a0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
15b0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
15c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
15d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
15e0: 53 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f  S) && SQLITE_OS_
15f0: 57 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  WIN.  { /* zName
1600: 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61 5f 73  :     */ "data_s
1610: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c  tore_directory",
1620: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1630: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44 41  :  */ PragTyp_DA
1640: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
1650: 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  RY,.    /* ePrag
1660: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1670: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1680: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1690: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
16a0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
16b0: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
16c0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61  me:     */ "data
16d0: 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20  base_list",.    
16e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
16f0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53   PragTyp_DATABAS
1700: 45 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a 20 65  E_LIST,.    /* e
1710: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
1720: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
1730: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1740: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1750: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1760: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
1770: 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21 64  R_PRAGMAS) && !d
1780: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1790: 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20  IT_DEPRECATED). 
17a0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
17b0: 20 2a 2f 20 22 64 65 66 61 75 6c 74 5f 63 61 63   */ "default_cac
17c0: 68 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f 2a  he_size",.    /*
17d0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
17e0: 72 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43  ragTyp_DEFAULT_C
17f0: 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  ACHE_SIZE,.    /
1800: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1810: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1820: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1830: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1840: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1850: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
1860: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66  LAG_PRAGMAS).#if
1870: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1880: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
1890: 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
18a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
18b0: 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  ER).  { /* zName
18c0: 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65 72 5f  :     */ "defer_
18d0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20  foreign_keys",. 
18e0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
18f0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
1900: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1910: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1920: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1930: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 7d  QLITE_DeferFKs }
1940: 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ,.#endif.#endif.
1950: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1960: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
1970: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
1980: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65 6d 70  ame:     */ "emp
1990: 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61  ty_result_callba
19a0: 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  cks",.    /* ePr
19b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
19c0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
19d0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
19e0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
19f0: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e 75 6c     */ SQLITE_Nul
1a00: 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23 65 6e  lCallback },.#en
1a10: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1a20: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46  (SQLITE_OMIT_UTF
1a30: 31 36 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  16).  { /* zName
1a40: 3a 20 20 20 20 20 2a 2f 20 22 65 6e 63 6f 64 69  :     */ "encodi
1a50: 6e 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ng",.    /* ePra
1a60: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1a70: 70 5f 45 4e 43 4f 44 49 4e 47 2c 0a 20 20 20 20  p_ENCODING,.    
1a80: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1a90: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1aa0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
1ab0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1ac0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
1ad0: 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
1ae0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1af0: 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 7b 20  IT_TRIGGER).  { 
1b00: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1b10: 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68   "foreign_key_ch
1b20: 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  eck",.    /* ePr
1b30: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1b40: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43  yp_FOREIGN_KEY_C
1b50: 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50 72  HECK,.    /* ePr
1b60: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
1b70: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
1b80: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
1b90: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
1ba0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
1bc0: 4e 5f 4b 45 59 29 0a 20 20 7b 20 2f 2a 20 7a 4e  N_KEY).  { /* zN
1bd0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72  ame:     */ "for
1be0: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 2c 0a  eign_key_list",.
1bf0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1c00: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f 52    */ PragTyp_FOR
1c10: 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 2c 0a 20  EIGN_KEY_LIST,. 
1c20: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1c30: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
1c40: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
1c50: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
1c60: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
1c70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1c80: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
1c90: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1ca0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
1cb0: 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
1cc0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
1cd0: 52 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a  RIGGER).  { /* z
1ce0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f  Name:     */ "fo
1cf0: 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20 20 20  reign_keys",.   
1d00: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1d10: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
1d20: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1d30: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
1d40: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
1d50: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
1d60: 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  },.#endif.#endif
1d70: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1d80: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
1d90: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
1da0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1db0: 20 20 20 20 2a 2f 20 22 66 72 65 65 6c 69 73 74      */ "freelist
1dc0: 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a 20  _count",.    /* 
1dd0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1de0: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
1df0: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
1e00: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1e10: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1e20: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1e30: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1e40: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
1e50: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1e60: 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 5f 63  :     */ "full_c
1e70: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20  olumn_names",.  
1e80: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1e90: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
1ea0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1eb0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
1ec0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
1ed0: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
1ee0: 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  s },.  { /* zNam
1ef0: 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 66  e:     */ "fullf
1f00: 73 79 6e 63 22 2c 0a 20 20 20 20 2f 2a 20 65 50  sync",.    /* eP
1f10: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1f20: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
1f30: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1f40: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1f50: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46 75      */ SQLITE_Fu
1f60: 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69  llFSync },.#endi
1f70: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
1f80: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a  LITE_HAS_CODEC).
1f90: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1fa0: 20 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a 20    */ "hexkey",. 
1fb0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1fc0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 58 4b   */ PragTyp_HEXK
1fd0: 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  EY,.    /* ePrag
1fe0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1ff0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2000: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
2010: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 68 65 78 72  me:     */ "hexr
2020: 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ekey",.    /* eP
2030: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2040: 54 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20 20  Typ_HEXKEY,.    
2050: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2060: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2070: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
2080: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
2090: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
20a0: 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20  AG_PRAGMAS).#if 
20b0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
20c0: 4f 4d 49 54 5f 43 48 45 43 4b 29 0a 20 20 7b 20  OMIT_CHECK).  { 
20d0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
20e0: 20 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f 63   "ignore_check_c
20f0: 6f 6e 73 74 72 61 69 6e 74 73 22 2c 0a 20 20 20  onstraints",.   
2100: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2110: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
2120: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2130: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
2140: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
2150: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
2160: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69   },.#endif.#endi
2170: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2180: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
2190: 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20 7a 4e  ACUUM).  { /* zN
21a0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 63  ame:     */ "inc
21b0: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 22  remental_vacuum"
21c0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
21d0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
21e0: 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55  NCREMENTAL_VACUU
21f0: 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  M,.    /* ePragF
2200: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2210: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2220: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2230: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
2240: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2250: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
2260: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
2270: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64  ame:     */ "ind
2280: 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a  ex_info",.    /*
2290: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
22a0: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46  ragTyp_INDEX_INF
22b0: 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  O,.    /* ePragF
22c0: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
22d0: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
22e0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
22f0: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2300: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64  ame:     */ "ind
2310: 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f 2a  ex_list",.    /*
2320: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2330: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53  ragTyp_INDEX_LIS
2340: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
2350: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2360: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2370: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2380: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
2390: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
23a0: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
23b0: 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a  _CHECK).  { /* z
23c0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
23d0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
23e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
23f0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54    */ PragTyp_INT
2400: 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20  EGRITY_CHECK,.  
2410: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2420: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
2430: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
2440: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
2450: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
2460: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2470: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
2480: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2490: 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f 6d     */ "journal_m
24a0: 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ode",.    /* ePr
24b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
24c0: 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 2c  yp_JOURNAL_MODE,
24d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
24e0: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
24f0: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2500: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2510: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
2520: 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e  e:     */ "journ
2530: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 0a  al_size_limit",.
2540: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2550: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f 55    */ PragTyp_JOU
2560: 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 2c  RNAL_SIZE_LIMIT,
2570: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2580: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2590: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
25a0: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  },.#endif.#if de
25b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
25c0: 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20 7a  _CODEC).  { /* z
25d0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6b 65  Name:     */ "ke
25e0: 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  y",.    /* ePrag
25f0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2600: 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72  _KEY,.    /* ePr
2610: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2620: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2630: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2640: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2650: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
2660: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
2670: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 65 67 61  me:     */ "lega
2680: 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 22 2c  cy_file_format",
2690: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
26a0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
26b0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
26c0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
26d0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
26e0: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
26f0: 6c 65 46 6d 74 20 7d 2c 0a 23 65 6e 64 69 66 0a  leFmt },.#endif.
2700: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2710: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
2720: 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c 49 54  RAGMAS) && SQLIT
2730: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
2740: 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a 20 7a 4e  _STYLE.  { /* zN
2750: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
2760: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 0a 20  k_proxy_file",. 
2770: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2780: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b   */ PragTyp_LOCK
2790: 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a 20 20 20  _PROXY_FILE,.   
27a0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
27b0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
27c0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
27d0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
27e0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
27f0: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2800: 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f 2a 20 7a  E_TEST).  { /* z
2810: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f  Name:     */ "lo
2820: 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20 20 20 20  ck_status",.    
2830: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2840: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54   PragTyp_LOCK_ST
2850: 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ATUS,.    /* ePr
2860: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2870: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2880: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2890: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
28a0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
28b0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
28c0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
28d0: 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20 20 20  king_mode",.    
28e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
28f0: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47   PragTyp_LOCKING
2900: 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _MODE,.    /* eP
2910: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2920: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2930: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2940: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6d  zName:     */ "m
2950: 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a  ax_page_count",.
2960: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2970: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47    */ PragTyp_PAG
2980: 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20  E_COUNT,.    /* 
2990: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
29a0: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
29b0: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
29c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b       */ 0 },.  {
29d0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
29e0: 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 0a 20  / "mmap_size",. 
29f0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2a00: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d 4d 41 50   */ PragTyp_MMAP
2a10: 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _SIZE,.    /* eP
2a20: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2a30: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2a40: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2a50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2a60: 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  age_count",.    
2a70: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2a80: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f   PragTyp_PAGE_CO
2a90: 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  UNT,.    /* ePra
2aa0: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2ab0: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2ac0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2ad0: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2ae0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2af0: 61 67 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f  age_size",.    /
2b00: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2b10: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
2b20: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
2b30: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2b40: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2b50: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2b60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
2b70: 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  EBUG).  { /* zNa
2b80: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 72 73  me:     */ "pars
2b90: 65 72 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f  er_trace",.    /
2ba0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2bb0: 50 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54  PragTyp_PARSER_T
2bc0: 52 41 43 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  RACE,.    /* ePr
2bd0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2be0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2bf0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2c00: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2c10: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
2c20: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
2c30: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 71 75 65 72  me:     */ "quer
2c40: 79 5f 6f 6e 6c 79 22 2c 0a 20 20 20 20 2f 2a 20  y_only",.    /* 
2c50: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2c60: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
2c70: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2c80: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2c90: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
2ca0: 51 75 65 72 79 4f 6e 6c 79 20 7d 2c 0a 23 65 6e  QueryOnly },.#en
2cb0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
2cc0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54  (SQLITE_OMIT_INT
2cd0: 45 47 52 49 54 59 5f 43 48 45 43 4b 29 0a 20 20  EGRITY_CHECK).  
2ce0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2cf0: 2a 2f 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22  */ "quick_check"
2d00: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2d10: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
2d20: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a  NTEGRITY_CHECK,.
2d30: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2d40: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
2d50: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
2d60: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
2d70: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
2d80: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2d90: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
2da0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2db0: 20 20 20 20 2a 2f 20 22 72 65 61 64 5f 75 6e 63      */ "read_unc
2dc0: 6f 6d 6d 69 74 74 65 64 22 2c 0a 20 20 20 20 2f  ommitted",.    /
2dd0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2de0: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
2df0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2e00: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
2e10: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
2e20: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
2e30: 64 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  d },.  { /* zNam
2e40: 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 63 75 72  e:     */ "recur
2e50: 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 2c 0a  sive_triggers",.
2e60: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2e70: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
2e80: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
2e90: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2ea0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2eb0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
2ec0: 72 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  rs },.#endif.#if
2ed0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2ee0: 48 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f  HAS_CODEC).  { /
2ef0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2f00: 22 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20  "rekey",.    /* 
2f10: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2f20: 61 67 54 79 70 5f 52 45 4b 45 59 2c 0a 20 20 20  agTyp_REKEY,.   
2f30: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2f40: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
2f50: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
2f60: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
2f70: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
2f80: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
2f90: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2fa0: 2f 20 22 72 65 76 65 72 73 65 5f 75 6e 6f 72 64  / "reverse_unord
2fb0: 65 72 65 64 5f 73 65 6c 65 63 74 73 22 2c 0a 20  ered_selects",. 
2fc0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2fd0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2fe0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2ff0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3000: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
3010: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
3020: 65 72 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  er },.#endif.#if
3030: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3040: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
3050: 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20  SION_PRAGMAS).  
3060: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3070: 2a 2f 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69  */ "schema_versi
3080: 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  on",.    /* ePra
3090: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
30a0: 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a  p_HEADER_VALUE,.
30b0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
30c0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
30d0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
30e0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
30f0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3100: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
3110: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3120: 20 20 20 2a 2f 20 22 73 65 63 75 72 65 5f 64 65     */ "secure_de
3130: 6c 65 74 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  lete",.    /* eP
3140: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3150: 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45 54  Typ_SECURE_DELET
3160: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
3170: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3180: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3190: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
31a0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
31b0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
31c0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
31d0: 20 20 20 20 20 2a 2f 20 22 73 68 6f 72 74 5f 63       */ "short_c
31e0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20  olumn_names",.  
31f0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3200: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
3210: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
3220: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3230: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
3240: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
3250: 65 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b  es },.#endif.  {
3260: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3270: 2f 20 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79  / "shrink_memory
3280: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3290: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
32a0: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 2c 0a 20  SHRINK_MEMORY,. 
32b0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
32c0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
32d0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
32e0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
32f0: 20 20 20 2a 2f 20 22 73 6f 66 74 5f 68 65 61 70     */ "soft_heap
3300: 5f 6c 69 6d 69 74 22 2c 0a 20 20 20 20 2f 2a 20  _limit",.    /* 
3310: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3320: 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f  agTyp_SOFT_HEAP_
3330: 4c 49 4d 49 54 2c 0a 20 20 20 20 2f 2a 20 65 50  LIMIT,.    /* eP
3340: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3350: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3360: 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65   */ 0 },.#if !de
3370: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3380: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
3390: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
33a0: 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a  TE_DEBUG).  { /*
33b0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
33c0: 73 71 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  sql_trace",.    
33d0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
33e0: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
33f0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3400: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3410: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
3420: 54 45 5f 53 71 6c 54 72 61 63 65 20 7d 2c 0a 23  TE_SqlTrace },.#
3430: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3440: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3450: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
3460: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
3470: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 74 61 74  me:     */ "stat
3480: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
3490: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
34a0: 5f 53 54 41 54 53 2c 0a 20 20 20 20 2f 2a 20 65  _STATS,.    /* e
34b0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
34c0: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
34d0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
34e0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
34f0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
3500: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3510: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  R_PRAGMAS).  { /
3520: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3530: 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a 20  "synchronous",. 
3540: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3550: 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 59 4e 43   */ PragTyp_SYNC
3560: 48 52 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a 20  HRONOUS,.    /* 
3570: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3580: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3590: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
35a0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
35b0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
35c0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48  (SQLITE_OMIT_SCH
35d0: 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  EMA_PRAGMAS).  {
35e0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
35f0: 2f 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c 0a  / "table_info",.
3600: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3610: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 41 42    */ PragTyp_TAB
3620: 4c 45 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20  LE_INFO,.    /* 
3630: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3640: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3650: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
3660: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3670: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
3680: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
3690: 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  ER_PRAGMAS).  { 
36a0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
36b0: 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a 20   "temp_store",. 
36c0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
36d0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d 50   */ PragTyp_TEMP
36e0: 5f 53 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20 65  _STORE,.    /* e
36f0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3700: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3710: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
3720: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3730: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
3740: 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  tory",.    /* eP
3750: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3760: 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44  Typ_TEMP_STORE_D
3770: 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f 2a  IRECTORY,.    /*
3780: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3790: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
37a0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
37b0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
37c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
37d0: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
37e0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
37f0: 3a 20 20 20 20 20 2a 2f 20 22 75 73 65 72 5f 76  :     */ "user_v
3800: 65 72 73 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20  ersion",.    /* 
3810: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3820: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
3830: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
3840: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3850: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3860: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
3870: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3880: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
3890: 41 53 29 0a 23 69 66 20 64 65 66 69 6e 65 64 28  AS).#if defined(
38a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
38b0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
38c0: 2a 2f 20 22 76 64 62 65 5f 61 64 64 6f 70 74 72  */ "vdbe_addoptr
38d0: 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ace",.    /* ePr
38e0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
38f0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3900: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3910: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3920: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62     */ SQLITE_Vdb
3930: 65 41 64 64 6f 70 54 72 61 63 65 20 7d 2c 0a 20  eAddopTrace },. 
3940: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
3950: 20 2a 2f 20 22 76 64 62 65 5f 64 65 62 75 67 22   */ "vdbe_debug"
3960: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3970: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
3980: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
3990: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
39a0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
39b0: 2f 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  / SQLITE_SqlTrac
39c0: 65 7c 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e|SQLITE_VdbeLis
39d0: 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65  ting|SQLITE_Vdbe
39e0: 54 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20  Trace },.  { /* 
39f0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76  zName:     */ "v
3a00: 64 62 65 5f 6c 69 73 74 69 6e 67 22 2c 0a 20 20  dbe_listing",.  
3a10: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3a20: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
3a30: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
3a40: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3a50: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
3a60: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
3a70: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
3a80: 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65 5f 74  :     */ "vdbe_t
3a90: 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  race",.    /* eP
3aa0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3ab0: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
3ac0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3ad0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3ae0: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64      */ SQLITE_Vd
3af0: 62 65 54 72 61 63 65 20 7d 2c 0a 23 65 6e 64 69  beTrace },.#endi
3b00: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  f.#endif.#if !de
3b10: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3b20: 54 5f 57 41 4c 29 0a 20 20 7b 20 2f 2a 20 7a 4e  T_WAL).  { /* zN
3b30: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61 6c  ame:     */ "wal
3b40: 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22  _autocheckpoint"
3b50: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3b60: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 57  p:  */ PragTyp_W
3b70: 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e  AL_AUTOCHECKPOIN
3b80: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
3b90: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3ba0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3bb0: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
3bc0: 65 3a 20 20 20 20 20 2a 2f 20 22 77 61 6c 5f 63  e:     */ "wal_c
3bd0: 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20 20 20 20  heckpoint",.    
3be0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
3bf0: 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45   PragTyp_WAL_CHE
3c00: 43 4b 50 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a 20  CKPOINT,.    /* 
3c10: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3c20: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3c30: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
3c40: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3c50: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
3c60: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41  (SQLITE_OMIT_FLA
3c70: 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  G_PRAGMAS).  { /
3c80: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3c90: 22 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61  "writable_schema
3ca0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3cb0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3cc0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
3cd0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3ce0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3cf0: 2a 2f 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  */ SQLITE_WriteS
3d00: 63 68 65 6d 61 7c 53 51 4c 49 54 45 5f 52 65 63  chema|SQLITE_Rec
3d10: 6f 76 65 72 79 4d 6f 64 65 20 7d 2c 0a 23 65 6e  overyMode },.#en
3d20: 64 69 66 0a 7d 3b 0a 2f 2a 20 4e 75 6d 62 65 72  dif.};./* Number
3d30: 20 6f 66 20 70 72 61 67 6d 61 73 3a 20 35 36 20   of pragmas: 56 
3d40: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2c 20 36  on by default, 6
3d50: 38 20 74 6f 74 61 6c 2e 20 2a 2f 0a 2f 2a 20 45  8 total. */./* E
3d60: 6e 64 20 6f 66 20 74 68 65 20 61 75 74 6f 6d 61  nd of the automa
3d70: 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  tically generate
3d80: 64 20 70 72 61 67 6d 61 20 74 61 62 6c 65 2e 0a  d pragma table..
3d90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3da0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3db0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3dc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3dd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
3de0: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
3df0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
3e00: 73 20 61 20 73 61 66 65 74 79 20 6c 65 76 65 6c  s a safety level
3e10: 2e 20 20 52 65 74 75 72 6e 20 30 20 66 6f 72 20  .  Return 0 for 
3e20: 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72 20 4f 4e  OFF,.** 1 for ON
3e30: 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e 64 20 32   or NORMAL and 2
3e40: 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52 65 74 75   for FULL.  Retu
3e50: 72 6e 20 31 20 66 6f 72 20 61 6e 20 65 6d 70 74  rn 1 for an empt
3e60: 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65 63 6f 67  y or .** unrecog
3e70: 6e 69 7a 65 64 20 73 74 72 69 6e 67 20 61 72 67  nized string arg
3e80: 75 6d 65 6e 74 2e 20 20 54 68 65 20 46 55 4c 4c  ument.  The FULL
3e90: 20 6f 70 74 69 6f 6e 20 69 73 20 64 69 73 61 6c   option is disal
3ea0: 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74 68 65 20  lowed.** if the 
3eb0: 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61 6d 65 74  omitFull paramet
3ec0: 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e  er it 1..**.** N
3ed0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 76 61 6c  ote that the val
3ee0: 75 65 73 20 72 65 74 75 72 6e 65 64 20 61 72 65  ues returned are
3ef0: 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 74 20 74   one less that t
3f00: 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 2a  he values that.*
3f10: 2a 20 73 68 6f 75 6c 64 20 62 65 20 70 61 73 73  * should be pass
3f20: 65 64 20 69 6e 74 6f 20 73 71 6c 69 74 65 33 42  ed into sqlite3B
3f30: 74 72 65 65 53 65 74 53 61 66 65 74 79 4c 65 76  treeSetSafetyLev
3f40: 65 6c 28 29 2e 20 20 54 68 65 20 69 73 20 64 6f  el().  The is do
3f50: 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74  ne.** to support
3f60: 20 6c 65 67 61 63 79 20 53 51 4c 20 63 6f 64 65   legacy SQL code
3f70: 2e 20 20 54 68 65 20 73 61 66 65 74 79 20 6c 65  .  The safety le
3f80: 76 65 6c 20 75 73 65 64 20 74 6f 20 62 65 20 62  vel used to be b
3f90: 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c  oolean.** and ol
3fa0: 64 65 72 20 73 63 72 69 70 74 73 20 6d 61 79 20  der scripts may 
3fb0: 68 61 76 65 20 75 73 65 64 20 6e 75 6d 62 65 72  have used number
3fc0: 73 20 30 20 66 6f 72 20 4f 46 46 20 61 6e 64 20  s 0 for OFF and 
3fd0: 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61  1 for ON..*/.sta
3fe0: 74 69 63 20 75 38 20 67 65 74 53 61 66 65 74 79  tic u8 getSafety
3ff0: 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63 68 61 72  Level(const char
4000: 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c   *z, int omitFul
4010: 6c 2c 20 69 6e 74 20 64 66 6c 74 29 7b 0a 20 20  l, int dflt){.  
4020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 32             /* 12
4040: 33 34 35 36 37 38 39 20 31 32 33 34 35 36 37 38  3456789 12345678
4050: 39 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  9 */.  static co
4060: 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b 5d  nst char zText[]
4070: 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73   = "onoffalseyes
4080: 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20 73 74 61  truefull";.  sta
4090: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 4f 66  tic const u8 iOf
40a0: 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20 31 2c 20  fset[] = {0, 1, 
40b0: 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20 31 36 7d  2, 4, 9, 12, 16}
40c0: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
40d0: 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20   u8 iLength[] = 
40e0: 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20 33 2c 20  {2, 2, 3, 5, 3, 
40f0: 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74 69 63 20  4, 4};.  static 
4100: 63 6f 6e 73 74 20 75 38 20 69 56 61 6c 75 65 5b  const u8 iValue[
4110: 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20 30  ] =  {1, 0, 0, 0
4120: 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20 20 69 6e  , 1, 1, 2};.  in
4130: 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20 73 71  t i, n;.  if( sq
4140: 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a 7a 29  lite3Isdigit(*z)
4150: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28   ){.    return (
4160: 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  u8)sqlite3Atoi(z
4170: 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73 71 6c  );.  }.  n = sql
4180: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 29 3b  ite3Strlen30(z);
4190: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72  .  for(i=0; i<Ar
41a0: 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74 68 29  raySize(iLength)
41b0: 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b 2b 29 7b  -omitFull; i++){
41c0: 0a 20 20 20 20 69 66 28 20 69 4c 65 6e 67 74 68  .    if( iLength
41d0: 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c 69 74 65  [i]==n && sqlite
41e0: 33 53 74 72 4e 49 43 6d 70 28 26 7a 54 65 78 74  3StrNICmp(&zText
41f0: 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c 7a 2c 6e  [iOffset[i]],z,n
4200: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65  )==0 ){.      re
4210: 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b 0a  turn iValue[i];.
4220: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
4230: 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn dflt;.}../*.*
4240: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
4250: 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20  given string as 
4260: 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
4270: 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47 65  .*/.u8 sqlite3Ge
4280: 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
4290: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64 66 6c 74  har *z, int dflt
42a0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53  ){.  return getS
42b0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64  afetyLevel(z,1,d
42c0: 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54  flt)!=0;.}../* T
42d0: 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  he sqlite3GetBoo
42e0: 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  lean() function 
42f0: 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  is used by other
4300: 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65   modules but the
4310: 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  .** remainder of
4320: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70   this file is sp
4330: 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41  ecific to PRAGMA
4340: 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f   processing.  So
4350: 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73   omit.** the res
4360: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66  t of the file if
4370: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
4380: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
4390: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
43a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
43b0: 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20  _PRAGMA)../*.** 
43c0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
43d0: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
43e0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c  locking mode val
43f0: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
4400: 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65  t getLockingMode
4410: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
4420: 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20  .  if( z ){.    
4430: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
4440: 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73  rICmp(z, "exclus
4450: 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50  ive") ) return P
4460: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
4470: 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  _EXCLUSIVE;.    
4480: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
4490: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c  rICmp(z, "normal
44a0: 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45  ") ) return PAGE
44b0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
44c0: 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RMAL;.  }.  retu
44d0: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
44e0: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23  MODE_QUERY;.}..#
44f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4500: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a  IT_AUTOVACUUM./*
4510: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
4520: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
4530: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
4540: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a   mode value..**.
4550: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4560: 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22   strings, "none"
4570: 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e  , "full" and "in
4580: 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a  cremental" are .
4590: 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61  ** acceptable, a
45a0: 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65  s are their nume
45b0: 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a  ric equivalents:
45c0: 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70   0, 1 and 2 resp
45d0: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61  ectively..*/.sta
45e0: 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56  tic int getAutoV
45f0: 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72  acuum(const char
4600: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
4610: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
4620: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22  trICmp(z, "none"
4630: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
4640: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45  _AUTOVACUUM_NONE
4650: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
4660: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75  e3StrICmp(z, "fu
4670: 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ll") ) return BT
4680: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46  REE_AUTOVACUUM_F
4690: 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ULL;.  if( 0==sq
46a0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
46b0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29  "incremental") )
46c0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
46d0: 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20  TOVACUUM_INCR;. 
46e0: 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69   i = sqlite3Atoi
46f0: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  (z);.  return (u
4700: 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f  8)((i>=0&&i<=2)?
4710: 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  i:0);.}.#endif /
4720: 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
4730: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20  OMIT_AUTOVACUUM 
4740: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
4750: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
4760: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  AGMAS./*.** Inte
4770: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
4780: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
4790: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
47a0: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
47b0: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
47c0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
47d0: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
47e0: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
47f0: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
4800: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
4810: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
4820: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
4830: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
4840: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
4850: 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20    if( z[0]>='0' 
4860: 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a  && z[0]<='2' ){.
4870: 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20      return z[0] 
4880: 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69  - '0';.  }else i
4890: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
48a0: 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20  p(z, "file")==0 
48b0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  ){.    return 1;
48c0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
48d0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
48e0: 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20  memory")==0 ){. 
48f0: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
4900: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
4910: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
4920: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
4930: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
4940: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4950: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
4960: 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20  *.** Invalidate 
4970: 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69  temp storage, ei
4980: 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65  ther when the te
4990: 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68  mp storage is ch
49a0: 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65  anged.** from de
49b0: 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27  fault, or when '
49c0: 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65  file' and the te
49d0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
49e0: 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ry has changed.*
49f0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76  /.static int inv
4a00: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
4a10: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
4a20: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
4a30: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
4a40: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e   if( db->aDb[1].
4a50: 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  pBt!=0 ){.    if
4a60: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
4a70: 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  t || sqlite3Btre
4a80: 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64  eIsInReadTrans(d
4a90: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29  b->aDb[1].pBt) )
4aa0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
4ab0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
4ac0: 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  "temporary stora
4ad0: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
4ae0: 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22  nged ".        "
4af0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
4b00: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
4b10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4b20: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
4b30: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
4b40: 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ose(db->aDb[1].p
4b50: 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62  Bt);.    db->aDb
4b60: 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20  [1].pBt = 0;.   
4b70: 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
4b80: 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
4b90: 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72  ion(db);.  }.  r
4ba0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
4bb0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
4bc0: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
4bd0: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
4be0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
4bf0: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
4c00: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
4c10: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
4c20: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
4c30: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
4c40: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
4c50: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
4c60: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
4c70: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  en using the SQL
4c80: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  ITE_TEMP_STORE.*
4c90: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
4ca0: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
4cb0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
4cc0: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
4cd0: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
4ce0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
4cf0: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
4d00: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
4d10: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
4d20: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
4d30: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
4d40: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
4d50: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
4d60: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
4d70: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
4d80: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
4d90: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
4da0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4db0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
4dc0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
4dd0: 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72   (u8)ts;.  retur
4de0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
4df0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
4e00: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
4e10: 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65  ../*.** Generate
4e20: 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20   code to return 
4e30: 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  a single integer
4e40: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69   value..*/.stati
4e50: 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69 6e  c void returnSin
4e60: 67 6c 65 49 6e 74 28 50 61 72 73 65 20 2a 70 50  gleInt(Parse *pP
4e70: 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
4e80: 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34 20 76 61   *zLabel, i64 va
4e90: 6c 75 65 29 7b 0a 20 20 56 64 62 65 20 2a 76 20  lue){.  Vdbe *v 
4ea0: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
4eb0: 28 70 50 61 72 73 65 29 3b 0a 20 20 69 6e 74 20  (pParse);.  int 
4ec0: 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  mem = ++pParse->
4ed0: 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a 70 49 36  nMem;.  i64 *pI6
4ee0: 34 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  4 = sqlite3DbMal
4ef0: 6c 6f 63 52 61 77 28 70 50 61 72 73 65 2d 3e 64  locRaw(pParse->d
4f00: 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75 65 29  b, sizeof(value)
4f10: 29 3b 0a 20 20 69 66 28 20 70 49 36 34 20 29 7b  );.  if( pI64 ){
4f20: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 49 36 34  .    memcpy(pI64
4f30: 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a 65 6f 66  , &value, sizeof
4f40: 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d 0a 20 20  (value));.  }.  
4f50: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
4f60: 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20 30  4(v, OP_Int64, 0
4f70: 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68 61 72 2a  , mem, 0, (char*
4f80: 29 70 49 36 34 2c 20 50 34 5f 49 4e 54 36 34 29  )pI64, P4_INT64)
4f90: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  ;.  sqlite3VdbeS
4fa0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
4fb0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
4fc0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
4fd0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 61  OLNAME_NAME, zLa
4fe0: 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  bel, SQLITE_STAT
4ff0: 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  IC);.  sqlite3Vd
5000: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
5010: 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31  esultRow, mem, 1
5020: 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  );.}.../*.** Set
5030: 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65   the safety_leve
5040: 6c 20 61 6e 64 20 70 61 67 65 72 20 66 6c 61 67  l and pager flag
5050: 73 20 66 6f 72 20 70 61 67 65 72 20 69 44 62 2e  s for pager iDb.
5060: 20 20 4f 72 20 69 66 20 69 44 62 3c 30 0a 2a 2a    Or if iDb<0.**
5070: 20 73 65 74 20 74 68 65 73 65 20 76 61 6c 75 65   set these value
5080: 73 20 66 6f 72 20 61 6c 6c 20 70 61 67 65 72 73  s for all pagers
5090: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
50a0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
50b0: 52 41 47 4d 41 53 0a 73 74 61 74 69 63 20 76 6f  RAGMAS.static vo
50c0: 69 64 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c  id setAllPagerFl
50d0: 61 67 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ags(sqlite3 *db)
50e0: 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f  {.  if( db->auto
50f0: 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 44 62  Commit ){.    Db
5100: 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61 44 62 3b   *pDb = db->aDb;
5110: 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 64 62 2d  .    int n = db-
5120: 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73 65 72 74  >nDb;.    assert
5130: 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  ( SQLITE_FullFSy
5140: 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c 4c 46 53  nc==PAGER_FULLFS
5150: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
5160: 74 28 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  t( SQLITE_CkptFu
5170: 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 43  llFSync==PAGER_C
5180: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b  KPT_FULLFSYNC );
5190: 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c  .    assert( SQL
51a0: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3d 3d  ITE_CacheSpill==
51b0: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
51c0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
51d0: 28 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43  (PAGER_FULLFSYNC
51e0: 20 7c 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55   | PAGER_CKPT_FU
51f0: 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f  LLFSYNC | PAGER_
5200: 43 41 43 48 45 53 50 49 4c 4c 29 0a 20 20 20 20  CACHESPILL).    
5210: 20 20 20 20 20 20 20 20 20 3d 3d 20 20 50 41 47           ==  PAG
5220: 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 20 29 3b  ER_FLAGS_MASK );
5230: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 44  .    assert( (pD
5240: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
5250: 26 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  & PAGER_SYNCHRON
5260: 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44 62 2d 3e  OUS_MASK)==pDb->
5270: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 29 3b 0a  safety_level );.
5280: 20 20 20 20 77 68 69 6c 65 28 20 28 6e 2d 2d 29      while( (n--)
5290: 20 3e 20 30 20 29 7b 0a 20 20 20 20 20 20 69 66   > 0 ){.      if
52a0: 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20  ( pDb->pBt ){.  
52b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
52c0: 65 65 53 65 74 50 61 67 65 72 46 6c 61 67 73 28  eeSetPagerFlags(
52d0: 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20 20 20 20  pDb->pBt,.      
52e0: 20 20 20 20 20 20 20 20 20 20 20 70 44 62 2d 3e             pDb->
52f0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 7c 20 28  safety_level | (
5300: 64 62 2d 3e 66 6c 61 67 73 20 26 20 50 41 47 45  db->flags & PAGE
5310: 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29 20 29 3b  R_FLAGS_MASK) );
5320: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
5330: 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Db++;.    }.  }.
5340: 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  }.#else.# define
5350: 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67   setAllPagerFlag
5360: 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  s(X)  /* no-op *
5370: 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  /.#endif.../*.**
5380: 20 52 65 74 75 72 6e 20 61 20 68 75 6d 61 6e 2d   Return a human-
5390: 72 65 61 64 61 62 6c 65 20 6e 61 6d 65 20 66 6f  readable name fo
53a0: 72 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 72  r a constraint r
53b0: 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74 69 6f 6e  esolution action
53c0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
53d0: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
53e0: 5f 4b 45 59 0a 73 74 61 74 69 63 20 63 6f 6e 73  _KEY.static cons
53f0: 74 20 63 68 61 72 20 2a 61 63 74 69 6f 6e 4e 61  t char *actionNa
5400: 6d 65 28 75 38 20 61 63 74 69 6f 6e 29 7b 0a 20  me(u8 action){. 
5410: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
5420: 6d 65 3b 0a 20 20 73 77 69 74 63 68 28 20 61 63  me;.  switch( ac
5430: 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63 61 73 65  tion ){.    case
5440: 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20 20 7a 4e   OE_SetNull:  zN
5450: 61 6d 65 20 3d 20 22 53 45 54 20 4e 55 4c 4c 22  ame = "SET NULL"
5460: 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ;        break;.
5470: 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74 44      case OE_SetD
5480: 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53  flt:  zName = "S
5490: 45 54 20 44 45 46 41 55 4c 54 22 3b 20 20 20 20  ET DEFAULT";    
54a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
54b0: 20 4f 45 5f 43 61 73 63 61 64 65 3a 20 20 7a 4e   OE_Cascade:  zN
54c0: 61 6d 65 20 3d 20 22 43 41 53 43 41 44 45 22 3b  ame = "CASCADE";
54d0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
54e0: 20 20 20 20 63 61 73 65 20 4f 45 5f 52 65 73 74      case OE_Rest
54f0: 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d 20 22 52  rict: zName = "R
5500: 45 53 54 52 49 43 54 22 3b 20 20 20 20 20 20 20  ESTRICT";       
5510: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
5520: 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20 7a 4e  ult:          zN
5530: 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54 49 4f 4e  ame = "NO ACTION
5540: 22 3b 20 20 0a 20 20 20 20 20 20 20 20 20 20 20  ";  .           
5550: 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72             asser
5560: 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45 5f 4e 6f  t( action==OE_No
5570: 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a 20 20 7d  ne ); break;.  }
5580: 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65 3b  .  return zName;
5590: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
55a0: 2a 20 50 61 72 61 6d 65 74 65 72 20 65 4d 6f 64  * Parameter eMod
55b0: 65 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66  e must be one of
55c0: 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e   the PAGER_JOURN
55d0: 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74  ALMODE_XXX const
55e0: 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e 65 64 20  ants.** defined 
55f0: 69 6e 20 70 61 67 65 72 2e 68 2e 20 54 68 69 73  in pager.h. This
5600: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
5610: 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  s the associated
5620: 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a 20 6a 6f   lowercase.** jo
5630: 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61 6d 65 2e  urnal-mode name.
5640: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
5650: 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
5660: 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d 6f 64 65  dename(int eMode
5670: 29 7b 0a 20 20 73 74 61 74 69 63 20 63 68 61 72  ){.  static char
5680: 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f 64 65 4e   * const azModeN
5690: 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 22 64  ame[] = {.    "d
56a0: 65 6c 65 74 65 22 2c 20 22 70 65 72 73 69 73 74  elete", "persist
56b0: 22 2c 20 22 6f 66 66 22 2c 20 22 74 72 75 6e 63  ", "off", "trunc
56c0: 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79 22 0a 23  ate", "memory".#
56d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
56e0: 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c 20 22 77  IT_WAL.     , "w
56f0: 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20 7d 3b 0a  al".#endif.  };.
5700: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
5710: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
5720: 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  TE==0 );.  asser
5730: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
5740: 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d 3d 31 20  MODE_PERSIST==1 
5750: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
5760: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
5770: 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73 73 65 72  FF==2 );.  asser
5780: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
5790: 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 3d 3d 33  MODE_TRUNCATE==3
57a0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   );.  assert( PA
57b0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
57c0: 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a 20 20 61  MEMORY==4 );.  a
57d0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
57e0: 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d 3d 35 20  RNALMODE_WAL==5 
57f0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4d 6f  );.  assert( eMo
5800: 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64 65 3c 3d  de>=0 && eMode<=
5810: 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65  ArraySize(azMode
5820: 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69 66 28 20  Name) );..  if( 
5830: 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53 69 7a 65  eMode==ArraySize
5840: 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 20 72  (azModeName) ) r
5850: 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75 72  eturn 0;.  retur
5860: 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 65 4d 6f  n azModeName[eMo
5870: 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  de];.}../*.** Pr
5880: 6f 63 65 73 73 20 61 20 70 72 61 67 6d 61 20 73  ocess a pragma s
5890: 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a 2a 0a 2a  tatement.  .**.*
58a0: 2a 20 50 72 61 67 6d 61 73 20 61 72 65 20 6f 66  * Pragmas are of
58b0: 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a 2a 0a 2a   this form:.**.*
58c0: 2a 20 20 20 20 20 20 50 52 41 47 4d 41 20 5b 64  *      PRAGMA [d
58d0: 61 74 61 62 61 73 65 2e 5d 69 64 20 5b 3d 20 76  atabase.]id [= v
58e0: 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  alue].**.** The 
58f0: 69 64 65 6e 74 69 66 69 65 72 20 6d 69 67 68 74  identifier might
5900: 20 61 6c 73 6f 20 62 65 20 61 20 73 74 72 69 6e   also be a strin
5910: 67 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  g.  The value is
5920: 20 61 20 73 74 72 69 6e 67 2c 20 61 6e 64 0a 2a   a string, and.*
5930: 2a 20 69 64 65 6e 74 69 66 69 65 72 2c 20 6f 72  * identifier, or
5940: 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 6d   a number.  If m
5950: 69 6e 75 73 46 6c 61 67 20 69 73 20 74 72 75 65  inusFlag is true
5960: 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
5970: 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62 65 72 20   is.** a number 
5980: 74 68 61 74 20 77 61 73 20 70 72 65 63 65 64 65  that was precede
5990: 64 20 62 79 20 61 20 6d 69 6e 75 73 20 73 69 67  d by a minus sig
59a0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  n..**.** If the 
59b0: 6c 65 66 74 20 73 69 64 65 20 69 73 20 22 64 61  left side is "da
59c0: 74 61 62 61 73 65 2e 69 64 22 20 74 68 65 6e 20  tabase.id" then 
59d0: 70 49 64 31 20 69 73 20 74 68 65 20 64 61 74 61  pId1 is the data
59e0: 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20 61 6e 64  base name.** and
59f0: 20 70 49 64 32 20 69 73 20 74 68 65 20 69 64 2e   pId2 is the id.
5a00: 20 20 49 66 20 74 68 65 20 6c 65 66 74 20 73 69    If the left si
5a10: 64 65 20 69 73 20 6a 75 73 74 20 22 69 64 22 20  de is just "id" 
5a20: 74 68 65 6e 20 70 49 64 31 20 69 73 20 74 68 65  then pId1 is the
5a30: 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49 64 32 20  .** id and pId2 
5a40: 69 73 20 61 6e 79 20 65 6d 70 74 79 20 73 74 72  is any empty str
5a50: 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ing..*/.void sql
5a60: 69 74 65 33 50 72 61 67 6d 61 28 0a 20 20 50 61  ite3Pragma(.  Pa
5a70: 72 73 65 20 2a 70 50 61 72 73 65 2c 20 0a 20 20  rse *pParse, .  
5a80: 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20 20 20 20  Token *pId1,    
5a90: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 70 61 72      /* First par
5aa0: 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e 5d  t of [database.]
5ab0: 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20 54 6f  id field */.  To
5ac0: 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20 20 20  ken *pId2,      
5ad0: 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61 72 74    /* Second part
5ae0: 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e 5d 69   of [database.]i
5af0: 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c  d field, or NULL
5b00: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61   */.  Token *pVa
5b10: 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b  lue,      /* Tok
5b20: 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20  en for <value>, 
5b30: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
5b40: 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20 20   minusFlag      
5b50: 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27 2d   /* True if a '-
5b60: 27 20 73 69 67 6e 20 70 72 65 63 65 64 65 64 20  ' sign preceded 
5b70: 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20  <value> */.){.  
5b80: 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b  char *zLeft = 0;
5b90: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65         /* Nul-te
5ba0: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
5bb0: 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20  tring <id> */.  
5bc0: 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20 30  char *zRight = 0
5bd0: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65  ;      /* Nul-te
5be0: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
5bf0: 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f  tring <value>, o
5c00: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73  r NULL */.  cons
5c10: 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b  t char *zDb = 0;
5c20: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
5c30: 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  se name */.  Tok
5c40: 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20 20  en *pId;        
5c50: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
5c60: 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a  o <id> token */.
5c70: 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b 34    char *aFcntl[4
5c80: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75  ];       /* Argu
5c90: 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f 46  ment to SQLITE_F
5ca0: 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20  CNTL_PRAGMA */. 
5cb0: 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
5cc0: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
5cd0: 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64  ase index for <d
5ce0: 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69 6e  atabase> */.  in
5cf0: 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64 3b  t lwr, upr, mid;
5d00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 69             /* Bi
5d10: 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f 75 6e  nary search boun
5d20: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ds */.  int rc; 
5d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d40: 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 76       /* return v
5d50: 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54 45  alue form SQLITE
5d60: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
5d70: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
5d80: 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20 20   pParse->db;    
5d90: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
5da0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
5db0: 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20 20  Db *pDb;        
5dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5dd0: 54 68 65 20 73 70 65 63 69 66 69 63 20 64 61 74  The specific dat
5de0: 61 62 61 73 65 20 62 65 69 6e 67 20 70 72 61 67  abase being prag
5df0: 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20 2a  maed */.  Vdbe *
5e00: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
5e10: 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a 20  be(pParse);  /* 
5e20: 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  Prepared stateme
5e30: 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20 76 3d 3d  nt */..  if( v==
5e40: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 73 71  0 ) return;.  sq
5e50: 6c 69 74 65 33 56 64 62 65 52 75 6e 4f 6e 6c 79  lite3VdbeRunOnly
5e60: 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50 61 72 73  Once(v);.  pPars
5e70: 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 0a 20 20  e->nMem = 2;..  
5e80: 2f 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  /* Interpret the
5e90: 20 5b 64 61 74 61 62 61 73 65 2e 5d 20 70 61 72   [database.] par
5ea0: 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20  t of the pragma 
5eb0: 73 74 61 74 65 6d 65 6e 74 2e 20 69 44 62 20 69  statement. iDb i
5ec0: 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78  s the.  ** index
5ed0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
5ee0: 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20   this pragma is 
5ef0: 62 65 69 6e 67 20 61 70 70 6c 69 65 64 20 74 6f  being applied to
5f00: 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e 20 2a 2f   in db.aDb[]. */
5f10: 0a 20 20 69 44 62 20 3d 20 73 71 6c 69 74 65 33  .  iDb = sqlite3
5f20: 54 77 6f 50 61 72 74 4e 61 6d 65 28 70 50 61 72  TwoPartName(pPar
5f30: 73 65 2c 20 70 49 64 31 2c 20 70 49 64 32 2c 20  se, pId1, pId2, 
5f40: 26 70 49 64 29 3b 0a 20 20 69 66 28 20 69 44 62  &pId);.  if( iDb
5f50: 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 70  <0 ) return;.  p
5f60: 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
5f70: 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65  b];..  /* If the
5f80: 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 20 68   temp database h
5f90: 61 73 20 62 65 65 6e 20 65 78 70 6c 69 63 69 74  as been explicit
5fa0: 6c 79 20 6e 61 6d 65 64 20 61 73 20 70 61 72 74  ly named as part
5fb0: 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 70 72   of the .  ** pr
5fc0: 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75 72 65 20  agma, make sure 
5fd0: 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a 20 20 2a  it is open. .  *
5fe0: 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d 31 20 26  /.  if( iDb==1 &
5ff0: 26 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  & sqlite3OpenTem
6000: 70 44 61 74 61 62 61 73 65 28 70 50 61 72 73 65  pDatabase(pParse
6010: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b  ) ){.    return;
6020: 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74 20 3d 20  .  }..  zLeft = 
6030: 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
6040: 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29 3b 0a 20  oken(db, pId);. 
6050: 20 69 66 28 20 21 7a 4c 65 66 74 20 29 20 72 65   if( !zLeft ) re
6060: 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d 69 6e 75  turn;.  if( minu
6070: 73 46 6c 61 67 20 29 7b 0a 20 20 20 20 7a 52 69  sFlag ){.    zRi
6080: 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  ght = sqlite3MPr
6090: 69 6e 74 66 28 64 62 2c 20 22 2d 25 54 22 2c 20  intf(db, "-%T", 
60a0: 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65  pValue);.  }else
60b0: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73  {.    zRight = s
60c0: 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
60d0: 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75 65 29 3b  ken(db, pValue);
60e0: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
60f0: 70 49 64 32 20 29 3b 0a 20 20 7a 44 62 20 3d 20  pId2 );.  zDb = 
6100: 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70 44 62 2d  pId2->n>0 ? pDb-
6110: 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20 20 69 66  >zName : 0;.  if
6120: 28 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  ( sqlite3AuthChe
6130: 63 6b 28 70 50 61 72 73 65 2c 20 53 51 4c 49 54  ck(pParse, SQLIT
6140: 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65 66 74 2c  E_PRAGMA, zLeft,
6150: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 20 29 7b   zRight, zDb) ){
6160: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
6170: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
6180: 53 65 6e 64 20 61 6e 20 53 51 4c 49 54 45 5f 46  Send an SQLITE_F
6190: 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65  CNTL_PRAGMA file
61a0: 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20  -control to the 
61b0: 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 0a 20  underlying VFS. 
61c0: 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20   ** connection. 
61d0: 20 49 66 20 69 74 20 72 65 74 75 72 6e 73 20 53   If it returns S
61e0: 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65 6e 20 61  QLITE_OK, then a
61f0: 73 73 75 6d 65 20 74 68 61 74 20 74 68 65 20 56  ssume that the V
6200: 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c 65 64 20  FS.  ** handled 
6210: 74 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 67  the pragma and g
6220: 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d 6f 70 20  enerate a no-op 
6230: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
6240: 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74  nt..  */.  aFcnt
6250: 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e  l[0] = 0;.  aFcn
6260: 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20  tl[1] = zLeft;. 
6270: 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69   aFcntl[2] = zRi
6280: 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d  ght;.  aFcntl[3]
6290: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
62a0: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
62b0: 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
62c0: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
62d0: 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46  b, zDb, SQLITE_F
62e0: 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f  CNTL_PRAGMA, (vo
62f0: 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69  id*)aFcntl);.  i
6300: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
6310: 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e   ){.    if( aFcn
6320: 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 69  tl[0] ){.      i
6330: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
6340: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 20 20 73  e->nMem;.      s
6350: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
6360: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
6370: 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46 63 6e 74  0, mem, 0, aFcnt
6380: 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20  l[0], 0);.      
6390: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
63a0: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
63b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
63c0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
63d0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 65  OLNAME_NAME, "re
63e0: 73 75 6c 74 22 2c 20 53 51 4c 49 54 45 5f 53 54  sult", SQLITE_ST
63f0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
6400: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
6410: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
6420: 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  mem, 1);.      s
6430: 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e  qlite3_free(aFcn
6440: 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  tl[0]);.    }.  
6450: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
6460: 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21  t;.  }.  if( rc!
6470: 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44  =SQLITE_NOTFOUND
6480: 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e   ){.    if( aFcn
6490: 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 73  tl[0] ){.      s
64a0: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
64b0: 50 61 72 73 65 2c 20 22 25 73 22 2c 20 61 46 63  Parse, "%s", aFc
64c0: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20 73  ntl[0]);.      s
64d0: 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e  qlite3_free(aFcn
64e0: 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  tl[0]);.    }.  
64f0: 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b    pParse->nErr++
6500: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63  ;.    pParse->rc
6510: 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f 74 6f 20   = rc;.    goto 
6520: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
6530: 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65  .  /* Locate the
6540: 20 70 72 61 67 6d 61 20 69 6e 20 74 68 65 20 6c   pragma in the l
6550: 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a 2f 0a 20  ookup table */. 
6560: 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20   lwr = 0;.  upr 
6570: 3d 20 41 72 72 61 79 53 69 7a 65 28 61 50 72 61  = ArraySize(aPra
6580: 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a 20 20 77  gmaNames)-1;.  w
6590: 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70 72 20 29  hile( lwr<=upr )
65a0: 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28 6c 77 72  {.    mid = (lwr
65b0: 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20 72 63 20  +upr)/2;.    rc 
65c0: 3d 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  = sqlite3_stricm
65d0: 70 28 7a 4c 65 66 74 2c 20 61 50 72 61 67 6d 61  p(zLeft, aPragma
65e0: 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65  Names[mid].zName
65f0: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30  );.    if( rc==0
6600: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66   ) break;.    if
6610: 28 20 72 63 3c 30 20 29 7b 0a 20 20 20 20 20 20  ( rc<0 ){.      
6620: 75 70 72 20 3d 20 6d 69 64 20 2d 20 31 3b 0a 20  upr = mid - 1;. 
6630: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
6640: 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31 3b 0a 20  lwr = mid + 1;. 
6650: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6c     }.  }.  if( l
6660: 77 72 3e 75 70 72 20 29 20 67 6f 74 6f 20 70 72  wr>upr ) goto pr
6670: 61 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20 2f 2a 20  agma_out;..  /* 
6680: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61  Make sure the da
6690: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
66a0: 20 6c 6f 61 64 65 64 20 69 66 20 74 68 65 20 70   loaded if the p
66b0: 72 61 67 6d 61 20 72 65 71 75 69 72 65 73 20 74  ragma requires t
66c0: 68 61 74 20 2a 2f 0a 20 20 69 66 28 20 28 61 50  hat */.  if( (aP
66d0: 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e  ragmaNames[mid].
66e0: 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67  mPragFlag & Prag
66f0: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 29  Flag_NeedSchema)
6700: 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73  !=0 ){.    if( s
6710: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
6720: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
6730: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
6740: 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74 68  .  /* Jump to th
6750: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 72  e appropriate pr
6760: 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f 0a  agma handler */.
6770: 20 20 73 77 69 74 63 68 28 20 61 50 72 61 67 6d    switch( aPragm
6780: 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65 50 72 61  aNames[mid].ePra
6790: 67 54 79 70 20 29 7b 0a 20 20 0a 23 69 66 20 21  gTyp ){.  .#if !
67a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
67b0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
67c0: 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  S) && !defined(S
67d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
67e0: 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20 20 2a 2a  CATED).  /*.  **
67f0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
6800: 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68  se.]default_cach
6810: 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41  e_size.  **  PRA
6820: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64  GMA [database.]d
6830: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
6840: 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  e=N.  **.  ** Th
6850: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
6860: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
6870: 20 70 65 72 73 69 73 74 65 6e 74 20 73 65 74 74   persistent sett
6880: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
6890: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
68a0: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72 65 74  .  The value ret
68b0: 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d 61 78  urned is the max
68c0: 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 20  imum number of. 
68d0: 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74 68 65   ** pages in the
68e0: 20 70 61 67 65 20 63 61 63 68 65 2e 20 20 54 68   page cache.  Th
68f0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
6900: 74 73 20 62 6f 74 68 20 74 68 65 20 63 75 72 72  ts both the curr
6910: 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  ent.  ** page ca
6920: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 20 61  che size value a
6930: 6e 64 20 74 68 65 20 70 65 72 73 69 73 74 65 6e  nd the persisten
6940: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
6950: 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73 74 6f  e value.  ** sto
6960: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
6970: 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a 20  ase file..  **. 
6980: 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f   ** Older versio
6990: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 6f 75  ns of SQLite wou
69a0: 6c 64 20 73 65 74 20 74 68 65 20 64 65 66 61 75  ld set the defau
69b0: 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20 74 6f  lt cache size to
69c0: 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69 76 65   a.  ** negative
69d0: 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64 69 63   number to indic
69e0: 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  ate synchronous=
69f0: 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61 79 73  OFF.  These days
6a00: 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20  , synchronous.  
6a10: 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f 6e 20  ** is always on 
6a20: 62 79 20 64 65 66 61 75 6c 74 20 72 65 67 61 72  by default regar
6a30: 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73 69 67  dless of the sig
6a40: 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  n of the default
6a50: 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65   cache.  ** size
6a60: 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75 65 20  .  But continue 
6a70: 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62 73 6f  to take the abso
6a80: 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68  lute value of th
6a90: 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a  e default cache.
6aa0: 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68 69 73    ** size of his
6ab0: 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74 69 62  torical compatib
6ac0: 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20 63 61  ility..  */.  ca
6ad0: 73 65 20 50 72 61 67 54 79 70 5f 44 45 46 41 55  se PragTyp_DEFAU
6ae0: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b  LT_CACHE_SIZE: {
6af0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
6b00: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 67 65 74  t VdbeOpList get
6b10: 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a  CacheSize[] = {.
6b20: 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73        { OP_Trans
6b30: 61 63 74 69 6f 6e 2c 20 30 2c 20 30 2c 20 20 20  action, 0, 0,   
6b40: 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20       0},        
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b60: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 0 */.      {
6b70: 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20   OP_ReadCookie, 
6b80: 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 42 54   0, 1,        BT
6b90: 52 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48  REE_DEFAULT_CACH
6ba0: 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20 31 20 2a  E_SIZE},  /* 1 *
6bb0: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50  /.      { OP_IfP
6bc0: 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20  os,       1, 8, 
6bd0: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
6be0: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
6bf0: 20 20 20 30 2c 20 32 2c 20 20 20 20 20 20 20 20     0, 2,        
6c00: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53  0},.      { OP_S
6c10: 75 62 74 72 61 63 74 2c 20 20 20 20 31 2c 20 32  ubtract,    1, 2
6c20: 2c 20 20 20 20 20 20 20 20 31 7d 2c 0a 20 20 20  ,        1},.   
6c30: 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20     { OP_IfPos,  
6c40: 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20 20       1, 8,      
6c50: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
6c60: 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c  _Integer,     0,
6c70: 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   1,        0},  
6c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c90: 20 20 20 20 20 20 20 2f 2a 20 36 20 2a 2f 0a 20         /* 6 */. 
6ca0: 20 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f 70 2c 20       { OP_Noop, 
6cb0: 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20         0, 0,    
6cc0: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
6cd0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
6ce0: 31 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 1,        0},
6cf0: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
6d00: 61 64 64 72 3b 0a 20 20 20 20 73 71 6c 69 74 65  addr;.    sqlite
6d10: 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76  3VdbeUsesBtree(v
6d20: 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , iDb);.    if( 
6d30: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
6d40: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
6d50: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
6d60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6d70: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
6d80: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
6d90: 61 63 68 65 5f 73 69 7a 65 22 2c 20 53 51 4c 49  ache_size", SQLI
6da0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
6db0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b    pParse->nMem +
6dc0: 3d 20 32 3b 0a 20 20 20 20 20 20 61 64 64 72 20  = 2;.      addr 
6dd0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
6de0: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
6df0: 69 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a 65  ize(getCacheSize
6e00: 29 2c 20 67 65 74 43 61 63 68 65 53 69 7a 65 29  ), getCacheSize)
6e10: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6e20: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
6e30: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
6e40: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
6e50: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
6e60: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
6e70: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
6e80: 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49 54  v, addr+6, SQLIT
6e90: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
6ea0: 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73 65  SIZE);.    }else
6eb0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
6ec0: 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74   = sqlite3AbsInt
6ed0: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
6ee0: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
6ef0: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
6f00: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
6f10: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  , 0, iDb);.     
6f20: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
6f30: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
6f40: 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20 20  , size, 1);.    
6f50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
6f60: 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  Op3(v, OP_SetCoo
6f70: 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f  kie, iDb, BTREE_
6f80: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
6f90: 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73  ZE, 1);.      as
6fa0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
6fb0: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
6fc0: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
6fd0: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
6fe0: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
6ff0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
7000: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
7010: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
7020: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
7030: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  size);.    }.   
7040: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
7050: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
7060: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
7070: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
7080: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
7090: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
70a0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
70b0: 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a  RAGMAS).  /*.  *
70c0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
70d0: 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ase.]page_size. 
70e0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
70f0: 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65  abase.]page_size
7100: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
7110: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
7120: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
7130: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
7140: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
7150: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
7160: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
7170: 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a  rm sets the.  **
7180: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
7190: 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ize value.  The 
71a0: 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62  value can only b
71b0: 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68  e set if.  ** th
71c0: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  e database has n
71d0: 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61  ot yet been crea
71e0: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
71f0: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49   PragTyp_PAGE_SI
7200: 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  ZE: {.    Btree 
7210: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
7220: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
7230: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
7240: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
7250: 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59  int size = ALWAY
7260: 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33  S(pBt) ? sqlite3
7270: 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65  BtreeGetPageSize
7280: 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20  (pBt) : 0;.     
7290: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
72a0: 28 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f 73  (pParse, "page_s
72b0: 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20  ize", size);.   
72c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
72d0: 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c   Malloc may fail
72e0: 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68   when setting th
72f0: 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20  e page-size, as 
7300: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
7310: 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75  rnal.      ** bu
7320: 66 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61  ffer that the pa
7330: 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a  ger module resiz
7340: 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  es using sqlite3
7350: 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20  _realloc()..    
7360: 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e    */.      db->n
7370: 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71  extPagesize = sq
7380: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
7390: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c  );.      if( SQL
73a0: 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74  ITE_NOMEM==sqlit
73b0: 65 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69  e3BtreeSetPageSi
73c0: 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74  ze(pBt, db->next
73d0: 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29  Pagesize,-1,0) )
73e0: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 61  {.        db->ma
73f0: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
7400: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
7410: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
7420: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
7430: 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72  [database.]secur
7440: 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50  e_delete.  **  P
7450: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
7460: 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f  ]secure_delete=O
7470: 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20  N/OFF.  **.  ** 
7480: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
7490: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
74a0: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
74b0: 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f 64  he.  ** secure_d
74c0: 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68 65  elete flag.  The
74d0: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61   second form cha
74e0: 6e 67 65 73 20 74 68 65 20 73 65 63 75 72 65 5f  nges the secure_
74f0: 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67  delete.  ** flag
7500: 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65 70   setting and rep
7510: 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c 75  orts thenew valu
7520: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
7530: 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45  ragTyp_SECURE_DE
7540: 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72 65  LETE: {.    Btre
7550: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
7560: 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20 2d  t;.    int b = -
7570: 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
7580: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
7590: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
75a0: 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74 42   b = sqlite3GetB
75b0: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
75c0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
75d0: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62   pId2->n==0 && b
75e0: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  >=0 ){.      int
75f0: 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69   ii;.      for(i
7600: 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
7610: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
7620: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75  sqlite3BtreeSecu
7630: 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62  reDelete(db->aDb
7640: 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20  [ii].pBt, b);.  
7650: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
7660: 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  b = sqlite3Btree
7670: 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74  SecureDelete(pBt
7680: 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , b);.    return
7690: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
76a0: 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65  , "secure_delete
76b0: 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b  ", b);.    break
76c0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
76d0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
76e0: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
76f0: 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  nt.  **  PRAGMA 
7700: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70  [database.]max_p
7710: 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a  age_count=N.  **
7720: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
7730: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
7740: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
7750: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61   for the.  ** ma
7760: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
7770: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
7780: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
7790: 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f   .  ** second fo
77a0: 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63  rm attempts to c
77b0: 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69  hange this setti
77c0: 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66  ng.  Both.  ** f
77d0: 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20  orms return the 
77e0: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e  current setting.
77f0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61  .  **.  ** The a
7800: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
7810: 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69   N is used.  Thi
7820: 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s is undocumente
7830: 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a  d and might.  **
7840: 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e   change.  The on
7850: 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f  ly purpose is to
7860: 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79   provide an easy
7870: 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a   way to test.  *
7880: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73  * the sqlite3Abs
7890: 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e  Int32() function
78a0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  **.  **  PRA
78b0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70  GMA [database.]p
78c0: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20  age_count.  **. 
78d0: 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
78e0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
78f0: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
7900: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
7910: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41   case PragTyp_PA
7920: 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20  GE_COUNT: {.    
7930: 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71  int iReg;.    sq
7940: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
7950: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
7960: 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b  b);.    iReg = +
7970: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
7980: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f     if( sqlite3To
7990: 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d  lower(zLeft[0])=
79a0: 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71  ='p' ){.      sq
79b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
79c0: 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c  v, OP_Pagecount,
79d0: 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20   iDb, iReg);.   
79e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
79f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
7a00: 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20  v, OP_MaxPgcnt, 
7a10: 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20  iDb, iReg, .    
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a30: 20 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e      sqlite3AbsIn
7a40: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
7a50: 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d  zRight)));.    }
7a60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7a70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
7a80: 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29  ultRow, iReg, 1)
7a90: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7aa0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
7ab0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
7ac0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
7ad0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
7ae0: 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
7af0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62  RANSIENT);.    b
7b00: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
7b10: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7b20: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f  tabase.]locking_
7b30: 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  mode.  **  PRAGM
7b40: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
7b50: 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72  king_mode = (nor
7b60: 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a 20  mal|exclusive). 
7b70: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
7b80: 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a  yp_LOCKING_MODE:
7b90: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
7ba0: 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61  r *zRet = "norma
7bb0: 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  l";.    int eMod
7bc0: 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f  e = getLockingMo
7bd0: 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20  de(zRight);..   
7be0: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
7bf0: 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  && eMode==PAGER_
7c00: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52  LOCKINGMODE_QUER
7c10: 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69  Y ){.      /* Si
7c20: 6d 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f 63  mple "PRAGMA loc
7c30: 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74  king_mode;" stat
7c40: 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20 61  ement. This is a
7c50: 20 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20 20   query for.     
7c60: 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
7c70: 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20  default locking 
7c80: 6d 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79 20  mode (which may 
7c90: 62 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f 0a  be different to.
7ca0: 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63        ** the loc
7cb0: 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65  king-mode of the
7cc0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29 2e   main database).
7cd0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
7ce0: 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74  eMode = db->dflt
7cf0: 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65  LockMode;.    }e
7d00: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
7d10: 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20 20   *pPager;.      
7d20: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29  if( pId2->n==0 )
7d30: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69  {.        /* Thi
7d40: 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  s indicates that
7d50: 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d   no database nam
7d60: 65 20 77 61 73 20 73 70 65 63 69 66 69 65 64 20  e was specified 
7d70: 61 73 20 70 61 72 74 0a 20 20 20 20 20 20 20 20  as part.        
7d80: 2a 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  ** of the PRAGMA
7d90: 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69   command. In thi
7da0: 73 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b 69  s case the locki
7db0: 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a  ng-mode must be.
7dc0: 20 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20 6f          ** set o
7dd0: 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
7de0: 61 74 61 62 61 73 65 73 2c 20 61 73 20 77 65 6c  atabases, as wel
7df0: 6c 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 62  l as the main db
7e00: 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a   file..        *
7e10: 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73  *.        ** Als
7e20: 6f 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  o, the sqlite3.d
7e30: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69  fltLockMode vari
7e40: 61 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20 74  able is set so t
7e50: 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  hat.        ** a
7e60: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20  ny subsequently 
7e70: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
7e80: 65 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65 20  es also use the 
7e90: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
7ea0: 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64    ** locking mod
7eb0: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
7ec0: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
7ed0: 20 20 20 20 20 20 61 73 73 65 72 74 28 70 44 62        assert(pDb
7ee0: 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a  ==&db->aDb[0]);.
7ef0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 32          for(ii=2
7f00: 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
7f10: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
7f20: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
7f30: 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
7f40: 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20  b[ii].pBt);.    
7f50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
7f60: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
7f70: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
7f80: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
7f90: 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  db->dfltLockMode
7fa0: 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20   = (u8)eMode;.  
7fb0: 20 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61 67      }.      pPag
7fc0: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
7fd0: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
7fe0: 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  ;.      eMode = 
7ff0: 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b  sqlite3PagerLock
8000: 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  ingMode(pPager, 
8010: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20  eMode);.    }.. 
8020: 20 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64 65     assert( eMode
8030: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
8040: 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20 20  ODE_NORMAL.     
8050: 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65 3d         || eMode=
8060: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
8070: 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b 0a  DE_EXCLUSIVE );.
8080: 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50      if( eMode==P
8090: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
80a0: 5f 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20 20  _EXCLUSIVE ){.  
80b0: 20 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63 6c      zRet = "excl
80c0: 75 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20  usive";.    }.  
80d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
80e0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
80f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8100: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
8110: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f  OLNAME_NAME, "lo
8120: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c  cking_mode", SQL
8130: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
8140: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8150: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
8160: 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c  , 0, 1, 0, zRet,
8170: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
8180: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8190: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
81a0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
81b0: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
81c0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
81d0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a  journal_mode.  *
81e0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
81f0: 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ase.]journal_mod
8200: 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  e =.  **        
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
8220: 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66  elete|persist|of
8230: 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72  f|truncate|memor
8240: 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a  y|wal|off).  */.
8250: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a    case PragTyp_J
8260: 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20  OURNAL_MODE: {. 
8270: 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20     int eMode;   
8280: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74       /* One of t
8290: 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  he PAGER_JOURNAL
82a0: 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73  MODE_XXX symbols
82b0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20   */.    int ii; 
82c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
82d0: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20  p counter */..  
82e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
82f0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
8300: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8310: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
8320: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f  OLNAME_NAME, "jo
8330: 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c  urnal_mode", SQL
8340: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20  ITE_STATIC);..  
8350: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
8360: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ){.      /* If t
8370: 68 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44  here is no "=MOD
8380: 45 22 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  E" part of the p
8390: 72 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65 72  ragma, do a quer
83a0: 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20  y for the.      
83b0: 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 20  ** current mode 
83c0: 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  */.      eMode =
83d0: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
83e0: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d 65  DE_QUERY;.    }e
83f0: 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  lse{.      const
8400: 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20   char *zMode;.  
8410: 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69      int n = sqli
8420: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67  te3Strlen30(zRig
8430: 68 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 65  ht);.      for(e
8440: 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d  Mode=0; (zMode =
8450: 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d   sqlite3JournalM
8460: 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21  odename(eMode))!
8470: 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20  =0; eMode++){.  
8480: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
8490: 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
84a0: 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29  , zMode, n)==0 )
84b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
84c0: 20 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64 65        if( !zMode
84d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
84e0: 66 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70 61  f the "=MODE" pa
84f0: 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  rt does not matc
8500: 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72  h any known jour
8510: 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20  nal mode,.      
8520: 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20 71    ** then do a q
8530: 75 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 20  uery */.        
8540: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
8550: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
8560: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
8570: 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41     if( eMode==PA
8580: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
8590: 51 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e 6e  QUERY && pId2->n
85a0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
85b0: 43 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41 20  Convert "PRAGMA 
85c0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e  journal_mode" in
85d0: 74 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e  to "PRAGMA main.
85e0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f  journal_mode" */
85f0: 0a 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b 0a  .      iDb = 0;.
8600: 20 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20        pId2->n = 
8610: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  1;.    }.    for
8620: 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69  (ii=db->nDb-1; i
8630: 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20  i>=0; ii--){.   
8640: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
8650: 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69  i].pBt && (ii==i
8660: 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30  Db || pId2->n==0
8670: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
8680: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
8690: 65 28 76 2c 20 69 69 29 3b 0a 20 20 20 20 20 20  e(v, ii);.      
86a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
86b0: 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61  Op3(v, OP_Journa
86c0: 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c 20 65 4d  lMode, ii, 1, eM
86d0: 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ode);.      }.  
86e0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
86f0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8700: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
8710: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
8720: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
8730: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a  GMA [database.]j
8740: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
8750: 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  t.  **  PRAGMA [
8760: 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61  database.]journa
8770: 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a 20  l_size_limit=N. 
8780: 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20   **.  ** Get or 
8790: 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69 6d  set the size lim
87a0: 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 6a  it on rollback j
87b0: 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20 20  ournal files..  
87c0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
87d0: 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c  p_JOURNAL_SIZE_L
87e0: 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67 65  IMIT: {.    Page
87f0: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
8800: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
8810: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36 34  b->pBt);.    i64
8820: 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20 20   iLimit = -2;.  
8830: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
8840: 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 74 6f        sqlite3Ato
8850: 69 36 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69  i64(zRight, &iLi
8860: 6d 69 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  mit, sqlite3Strl
8870: 65 6e 33 30 28 7a 52 69 67 68 74 29 2c 20 53 51  en30(zRight), SQ
8880: 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20  LITE_UTF8);.    
8890: 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d 31 20    if( iLimit<-1 
88a0: 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20  ) iLimit = -1;. 
88b0: 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69 74 20     }.    iLimit 
88c0: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 4a 6f  = sqlite3PagerJo
88d0: 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74 28 70  urnalSizeLimit(p
88e0: 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29 3b 0a  Pager, iLimit);.
88f0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
8900: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6a 6f 75  Int(pParse, "jou
8910: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22  rnal_size_limit"
8920: 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62  , iLimit);.    b
8930: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69  reak;.  }..#endi
8940: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
8950: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a  _PAGER_PRAGMAS *
8960: 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  /..  /*.  **  PR
8970: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
8980: 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a  auto_vacuum.  **
8990: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
89a0: 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d  se.]auto_vacuum=
89b0: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
89c0: 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  or set the value
89d0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
89e0: 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27 20 70   'auto-vacuum' p
89f0: 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54  arameter..  ** T
8a00: 68 65 20 76 61 6c 75 65 20 69 73 20 6f 6e 65 20  he value is one 
8a10: 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46 55  of:  0 NONE 1 FU
8a20: 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c  LL 2 INCREMENTAL
8a30: 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .  */.#ifndef SQ
8a40: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
8a50: 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67  CUUM.  case Prag
8a60: 54 79 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 3a  Typ_AUTO_VACUUM:
8a70: 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42   {.    Btree *pB
8a80: 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  t = pDb->pBt;.  
8a90: 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30    assert( pBt!=0
8aa0: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
8ab0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
8ac0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
8ad0: 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63 75 75  rse, "auto_vacuu
8ae0: 6d 22 2c 20 73 71 6c 69 74 65 33 42 74 72 65 65  m", sqlite3Btree
8af0: 47 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42  GetAutoVacuum(pB
8b00: 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  t));.    }else{.
8b10: 20 20 20 20 20 20 69 6e 74 20 65 41 75 74 6f 20        int eAuto 
8b20: 3d 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d 28  = getAutoVacuum(
8b30: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 61  zRight);.      a
8b40: 73 73 65 72 74 28 20 65 41 75 74 6f 3e 3d 30 20  ssert( eAuto>=0 
8b50: 26 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b 0a 20  && eAuto<=2 );. 
8b60: 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 41 75 74       db->nextAut
8b70: 6f 76 61 63 20 3d 20 28 75 38 29 65 41 75 74 6f  ovac = (u8)eAuto
8b80: 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20  ;.      /* Call 
8b90: 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 29 20  SetAutoVacuum() 
8ba0: 74 6f 20 73 65 74 20 69 6e 69 74 69 61 6c 69 7a  to set initializ
8bb0: 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 61  e the internal a
8bc0: 75 74 6f 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  uto and.      **
8bd0: 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66 6c 61   incr-vacuum fla
8be0: 67 73 2e 20 54 68 69 73 20 69 73 20 72 65 71 75  gs. This is requ
8bf0: 69 72 65 64 20 69 6e 20 63 61 73 65 20 74 68 69  ired in case thi
8c00: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20  s connection.   
8c10: 20 20 20 2a 2a 20 63 72 65 61 74 65 73 20 74 68     ** creates th
8c20: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
8c30: 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
8c40: 20 74 68 61 74 20 69 74 20 69 73 20 63 72 65 61   that it is crea
8c50: 74 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ted.      ** as 
8c60: 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63  an auto-vacuum c
8c70: 61 70 61 62 6c 65 20 64 62 2e 0a 20 20 20 20 20  apable db..     
8c80: 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d 20 73   */.      rc = s
8c90: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 41 75  qlite3BtreeSetAu
8ca0: 74 6f 56 61 63 75 75 6d 28 70 42 74 2c 20 65 41  toVacuum(pBt, eA
8cb0: 75 74 6f 29 3b 0a 20 20 20 20 20 20 69 66 28 20  uto);.      if( 
8cc0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
8cd0: 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c 20 65 41   (eAuto==1 || eA
8ce0: 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20 20 20 20  uto==2) ){.     
8cf0: 20 20 20 2f 2a 20 57 68 65 6e 20 73 65 74 74 69     /* When setti
8d00: 6e 67 20 74 68 65 20 61 75 74 6f 5f 76 61 63 75  ng the auto_vacu
8d10: 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69 74 68 65  um mode to eithe
8d20: 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a 20 20 20  r "full" or .   
8d30: 20 20 20 20 20 2a 2a 20 22 69 6e 63 72 65 6d 65       ** "increme
8d40: 6e 74 61 6c 22 2c 20 77 72 69 74 65 20 74 68 65  ntal", write the
8d50: 20 76 61 6c 75 65 20 6f 66 20 6d 65 74 61 5b 36   value of meta[6
8d60: 5d 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  ] in the databas
8d70: 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c  e.        ** fil
8d80: 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74 69 6e  e. Before writin
8d90: 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20 63 68  g to meta[6], ch
8da0: 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b 33 5d  eck that meta[3]
8db0: 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20 20 20   indicates.     
8dc0: 20 20 20 2a 2a 20 74 68 61 74 20 74 68 69 73 20     ** that this 
8dd0: 72 65 61 6c 6c 79 20 69 73 20 61 6e 20 61 75 74  really is an aut
8de0: 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65  o-vacuum capable
8df0: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20   database..     
8e00: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 74     */.        st
8e10: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
8e20: 70 4c 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d  pList setMeta6[]
8e30: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b   = {.          {
8e40: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
8e50: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31      0,         1
8e60: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
8e70: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
8e80: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
8e90: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20  ReadCookie,     
8ea0: 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20  0,         1,   
8eb0: 20 20 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47        BTREE_LARG
8ec0: 45 53 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a  EST_ROOT_PAGE},.
8ed0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49            { OP_I
8ee0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 31  f,             1
8ef0: 2c 20 20 20 20 20 20 20 20 20 30 2c 20 20 20 20  ,         0,    
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c               0},
8f10: 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20      /* 2 */.    
8f20: 20 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c        { OP_Halt,
8f30: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
8f40: 45 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20  E_OK, OE_Abort, 
8f50: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
8f60: 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 3 */.        
8f70: 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20    { OP_Integer, 
8f80: 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20         0,       
8f90: 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20    1,            
8fa0: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34       0},    /* 4
8fb0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
8fc0: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20  OP_SetCookie,   
8fd0: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 42 54     0,         BT
8fe0: 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c  REE_INCR_VACUUM,
8ff0: 20 31 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a   1},    /* 5 */.
9000: 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20          };.     
9010: 20 20 20 69 6e 74 20 69 41 64 64 72 3b 0a 20 20     int iAddr;.  
9020: 20 20 20 20 20 20 69 41 64 64 72 20 3d 20 73 71        iAddr = sq
9030: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
9040: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
9050: 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65  setMeta6), setMe
9060: 74 61 36 29 3b 0a 20 20 20 20 20 20 20 20 73 71  ta6);.        sq
9070: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
9080: 31 28 76 2c 20 69 41 64 64 72 2c 20 69 44 62 29  1(v, iAddr, iDb)
9090: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
90a0: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
90b0: 20 69 41 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a   iAddr+1, iDb);.
90c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
90d0: 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 69  dbeChangeP2(v, i
90e0: 41 64 64 72 2b 32 2c 20 69 41 64 64 72 2b 34 29  Addr+2, iAddr+4)
90f0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9100: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
9110: 20 69 41 64 64 72 2b 34 2c 20 65 41 75 74 6f 2d   iAddr+4, eAuto-
9120: 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  1);.        sqli
9130: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
9140: 76 2c 20 69 41 64 64 72 2b 35 2c 20 69 44 62 29  v, iAddr+5, iDb)
9150: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9160: 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76  3VdbeUsesBtree(v
9170: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 7d 0a  , iDb);.      }.
9180: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
9190: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
91a0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
91b0: 64 61 74 61 62 61 73 65 2e 5d 69 6e 63 72 65 6d  database.]increm
91c0: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e 29 0a  ental_vacuum(N).
91d0: 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20 73    **.  ** Do N s
91e0: 74 65 70 73 20 6f 66 20 69 6e 63 72 65 6d 65 6e  teps of incremen
91f0: 74 61 6c 20 76 61 63 75 75 6d 69 6e 67 20 6f 6e  tal vacuuming on
9200: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a   a database..  *
9210: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
9220: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
9230: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
9240: 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55  INCREMENTAL_VACU
9250: 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 4c  UM: {.    int iL
9260: 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20 20 20  imit, addr;.    
9270: 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c  if( zRight==0 ||
9280: 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33   !sqlite3GetInt3
9290: 32 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69  2(zRight, &iLimi
92a0: 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20  t) || iLimit<=0 
92b0: 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69 74 20  ){.      iLimit 
92c0: 3d 20 30 78 37 66 66 66 66 66 66 66 3b 0a 20 20  = 0x7fffffff;.  
92d0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42    }.    sqlite3B
92e0: 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
92f0: 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44  on(pParse, 0, iD
9300: 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  b);.    sqlite3V
9310: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
9320: 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69 74 2c  Integer, iLimit,
9330: 20 31 29 3b 0a 20 20 20 20 61 64 64 72 20 3d 20   1);.    addr = 
9340: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9350: 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61 63 75  1(v, OP_IncrVacu
9360: 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71  um, iDb);.    sq
9370: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
9380: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
9390: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
93a0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
93b0: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
93c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
93d0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50  AddOp2(v, OP_IfP
93e0: 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b 0a 20 20  os, 1, addr);.  
93f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
9400: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
9410: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
9420: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
9430: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
9440: 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
9450: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
9460: 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65  base.]cache_size
9470: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
9480: 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73  atabase.]cache_s
9490: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
94a0: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
94b0: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
94c0: 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67  nt local setting
94d0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61   for the.  ** pa
94e0: 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54  ge cache size. T
94f0: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73  he second form s
9500: 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20  ets the local.  
9510: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
9520: 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20  ze value.  If N 
9530: 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e  is positive then
9540: 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a   that is the.  *
9550: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
9560: 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20  s in the cache. 
9570: 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76   If N is negativ
9580: 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  e, then the.  **
9590: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
95a0: 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20   is adjusted so 
95b0: 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75  that the cache u
95c0: 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73  ses -N kibibytes
95d0: 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e  .  ** of memory.
95e0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
95f0: 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a  gTyp_CACHE_SIZE:
9600: 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73   {.    assert( s
9610: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
9620: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
9630: 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  ) );.    if( !zR
9640: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
9650: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
9660: 61 72 73 65 2c 20 22 63 61 63 68 65 5f 73 69 7a  arse, "cache_siz
9670: 65 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  e", pDb->pSchema
9680: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
9690: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
96a0: 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74  int size = sqlit
96b0: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
96c0: 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65        pDb->pSche
96d0: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d  ma->cache_size =
96e0: 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c   size;.      sql
96f0: 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
9700: 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20  eSize(pDb->pBt, 
9710: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
9720: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
9730: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
9740: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
9750: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 6d  MA [database.]mm
9760: 61 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a  ap_size(N).  **.
9770: 20 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74    ** Used to set
9780: 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69   mapping size li
9790: 6d 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67  mit. The mapping
97a0: 20 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20   size limit is. 
97b0: 20 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69   ** used to limi
97c0: 74 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  t the aggregate 
97d0: 73 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f  size of all memo
97e0: 72 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e  ry mapped region
97f0: 73 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61  s of the.  ** da
9800: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20  tabase file. If 
9810: 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 69  this parameter i
9820: 73 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74  s set to zero, t
9830: 68 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69  hen memory mappi
9840: 6e 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75  ng.  ** is not u
9850: 73 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20  sed at all.  If 
9860: 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74  N is negative, t
9870: 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20  hen the default 
9880: 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20  memory map.  ** 
9890: 6c 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64  limit determined
98a0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66   by sqlite3_conf
98b0: 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
98c0: 5f 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73  _MMAP_SIZE) is s
98d0: 65 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72  et..  ** The par
98e0: 61 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73  ameter N is meas
98f0: 75 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20  ured in bytes.. 
9900: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61   **.  ** This va
9910: 6c 75 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e  lue is advisory.
9920: 20 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67    The underlying
9930: 20 56 46 53 20 69 73 20 66 72 65 65 20 74 6f 20   VFS is free to 
9940: 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20  memory map.  ** 
9950: 61 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20  as little or as 
9960: 6d 75 63 68 20 61 73 20 69 74 20 77 61 6e 74 73  much as it wants
9970: 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20  .  Except, if N 
9980: 69 73 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e  is set to 0 then
9990: 20 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20   the.  ** upper 
99a0: 6c 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65  layers will neve
99b0: 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65  r invoke the xFe
99c0: 74 63 68 20 69 6e 74 65 72 66 61 63 65 73 20 74  tch interfaces t
99d0: 6f 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a  o the VFS..  */.
99e0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d    case PragTyp_M
99f0: 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20  MAP_SIZE: {.    
9a00: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
9a10: 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ;.#if SQLITE_MAX
9a20: 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20  _MMAP_SIZE>0.   
9a30: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
9a40: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
9a50: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
9a60: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
9a70: 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20  .      int ii;. 
9a80: 20 20 20 20 20 73 71 6c 69 74 65 33 41 74 6f 69       sqlite3Atoi
9a90: 36 34 28 7a 52 69 67 68 74 2c 20 26 73 7a 2c 20  64(zRight, &sz, 
9aa0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
9ab0: 7a 52 69 67 68 74 29 2c 20 53 51 4c 49 54 45 5f  zRight), SQLITE_
9ac0: 55 54 46 38 29 3b 0a 20 20 20 20 20 20 69 66 28  UTF8);.      if(
9ad0: 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c   sz<0 ) sz = sql
9ae0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
9af0: 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69  .szMmap;.      i
9b00: 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20  f( pId2->n==0 ) 
9b10: 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b  db->szMmap = sz;
9b20: 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62  .      for(ii=db
9b30: 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20  ->nDb-1; ii>=0; 
9b40: 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69  ii--){.        i
9b50: 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  f( db->aDb[ii].p
9b60: 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c  Bt && (ii==iDb |
9b70: 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b  | pId2->n==0) ){
9b80: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
9b90: 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69  e3BtreeSetMmapLi
9ba0: 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  mit(db->aDb[ii].
9bb0: 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20  pBt, sz);.      
9bc0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
9bd0: 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20  }.    sz = -1;. 
9be0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
9bf0: 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
9c00: 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e   zDb, SQLITE_FCN
9c10: 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73  TL_MMAP_SIZE, &s
9c20: 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a  z);.#else.    sz
9c30: 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 0;.    rc = S
9c40: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66  QLITE_OK;.#endif
9c50: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
9c60: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
9c70: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
9c80: 70 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f 73 69  pParse, "mmap_si
9c90: 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65  ze", sz);.    }e
9ca0: 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49  lse if( rc!=SQLI
9cb0: 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20  TE_NOTFOUND ){. 
9cc0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72       pParse->nEr
9cd0: 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61 72 73  r++;.      pPars
9ce0: 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20  e->rc = rc;.    
9cf0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
9d00: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
9d10: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a  AGMA temp_store.
9d20: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65    **   PRAGMA te
9d30: 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61  mp_store = "defa
9d40: 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66  ult"|"memory"|"f
9d50: 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ile".  **.  ** R
9d60: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
9d70: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
9d80: 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66  the temp_store f
9d90: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
9da0: 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61   ** the local va
9db0: 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b  lue does not mak
9dc0: 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
9dd0: 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74   disk file and t
9de0: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20  he default.  ** 
9df0: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65  value will be re
9e00: 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20  stored the next 
9e10: 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73  time the databas
9e20: 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a  e is opened..  *
9e30: 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74  *.  ** Note that
9e40: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
9e50: 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72 79 20  for the library 
9e60: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
9e70: 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65  ions to.  ** ove
9e80: 72 72 69 64 65 20 74 68 69 73 20 73 65 74 74 69  rride this setti
9e90: 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  ng.  */.  case P
9ea0: 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52  ragTyp_TEMP_STOR
9eb0: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  E: {.    if( !zR
9ec0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
9ed0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
9ee0: 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74 6f 72  arse, "temp_stor
9ef0: 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  e", db->temp_sto
9f00: 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  re);.    }else{.
9f10: 20 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70        changeTemp
9f20: 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20  Storage(pParse, 
9f30: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20  zRight);.    }. 
9f40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
9f50: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
9f60: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
9f70: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
9f80: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
9f90: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
9fa0: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
9fb0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
9fc0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
9fd0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74  l value of the t
9fe0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
9ff0: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
a000: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
a010: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
a020: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
a030: 62 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  be used for temp
a040: 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a  orary files..  *
a050: 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e  * Setting to a n
a060: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
a070: 74 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  ts to the defaul
a080: 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  t temporary dire
a090: 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20  ctory search..  
a0a0: 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20  ** If temporary 
a0b0: 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61  directory is cha
a0c0: 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c  nged, then inval
a0d0: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
a0e0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
a0f0: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
a100: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a  STORE_DIRECTORY:
a110: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
a120: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
a130: 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
a140: 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20  ectory ){.      
a150: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a160: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
a170: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a180: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
a190: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
a1a0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 74   .            "t
a1b0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
a1c0: 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ory", SQLITE_STA
a1d0: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
a1e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
a1f0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
a200: 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f  , 1, 0, sqlite3_
a210: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20  temp_directory, 
a220: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
a230: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
a240: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
a250: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
a260: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66    }else{.#ifndef
a270: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
a280: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
a290: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
a2a0: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20  int res;.       
a2b0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
a2c0: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
a2d0: 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41  zRight, SQLITE_A
a2e0: 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c  CCESS_READWRITE,
a2f0: 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
a300: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
a310: 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K || res==0 ){. 
a320: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a330: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
a340: 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65   "not a writable
a350: 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20   directory");.  
a360: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
a370: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  gma_out;.       
a380: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
a390: 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45 4d 50   if( SQLITE_TEMP
a3a0: 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20  _STORE==0.      
a3b0: 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50   || (SQLITE_TEMP
a3c0: 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d  _STORE==1 && db-
a3d0: 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a  >temp_store<=1).
a3e0: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
a3f0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20  E_TEMP_STORE==2 
a400: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
a410: 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a 20  e==1).      ){. 
a420: 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 61 74         invalidat
a430: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
a440: 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rse);.      }.  
a450: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
a460: 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69  (sqlite3_temp_di
a470: 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20  rectory);.      
a480: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
a490: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a4a0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
a4b0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
a4c0: 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b  f("%s", zRight);
a4d0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
a4e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65        sqlite3_te
a4f0: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30  mp_directory = 0
a500: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
a510: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
a520: 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  WSD */.    }.   
a530: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
a540: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20   SQLITE_OS_WIN. 
a550: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
a560: 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  A data_store_dir
a570: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
a580: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
a590: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
a5a0: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
a5b0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
a5c0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
a5d0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  l value of the d
a5e0: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
a5f0: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
a600: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
a610: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
a620: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
a630: 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61  be used for data
a640: 62 61 73 65 20 66 69 6c 65 73 20 74 68 61 74 0a  base files that.
a650: 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63 69 66    ** were specif
a660: 69 65 64 20 77 69 74 68 20 61 20 72 65 6c 61 74  ied with a relat
a670: 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20 20 53  ive pathname.  S
a680: 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c  etting to a null
a690: 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 0a   string reverts.
a6a0: 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65 66 61    ** to the defa
a6b0: 75 6c 74 20 64 61 74 61 62 61 73 65 20 64 69 72  ult database dir
a6c0: 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20 66 6f  ectory, which fo
a6d0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
a6e0: 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 0a   specified with.
a6f0: 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76 65 20    ** a relative 
a700: 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62 61 62  path will probab
a710: 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74  ly be based on t
a720: 68 65 20 63 75 72 72 65 6e 74 20 64 69 72 65 63  he current direc
a730: 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20 20 2a  tory for the.  *
a740: 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61 74 61  * process.  Data
a750: 62 61 73 65 20 66 69 6c 65 20 73 70 65 63 69 66  base file specif
a760: 69 65 64 20 77 69 74 68 20 61 6e 20 61 62 73 6f  ied with an abso
a770: 6c 75 74 65 20 70 61 74 68 20 61 72 65 20 6e 6f  lute path are no
a780: 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a 20  t impacted.  ** 
a790: 62 79 20 74 68 69 73 20 73 65 74 74 69 6e 67 2c  by this setting,
a7a0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 69   regardless of i
a7b0: 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20  ts value..  **. 
a7c0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
a7d0: 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44 49  yp_DATA_STORE_DI
a7e0: 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69  RECTORY: {.    i
a7f0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
a800: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
a810: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 29  data_directory )
a820: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
a830: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
a840: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  v, 1);.        s
a850: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
a860: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
a870: 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20  ME_NAME, .      
a880: 20 20 20 20 20 20 22 64 61 74 61 5f 73 74 6f 72        "data_stor
a890: 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51  e_directory", SQ
a8a0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
a8b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a8c0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
a8d0: 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20  ring8, 0, 1, 0, 
a8e0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
a8f0: 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20  ectory, 0);.    
a900: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a910: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
a920: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
a930: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
a940: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a950: 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69  OMIT_WSD.      i
a960: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
a970: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b          int res;
a980: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
a990: 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62  lite3OsAccess(db
a9a0: 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20  ->pVfs, zRight, 
a9b0: 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45  SQLITE_ACCESS_RE
a9c0: 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a  ADWRITE, &res);.
a9d0: 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
a9e0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
a9f0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
aa00: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
aa10: 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20  (pParse, "not a 
aa20: 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f  writable directo
aa30: 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ry");.          
aa40: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
aa50: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
aa60: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
aa70: 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61  _free(sqlite3_da
aa80: 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20  ta_directory);. 
aa90: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
aaa0: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0] ){.        sq
aab0: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
aac0: 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  tory = sqlite3_m
aad0: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69  printf("%s", zRi
aae0: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ght);.      }els
aaf0: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
ab00: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
ab10: 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23  y = 0;.      }.#
ab20: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ab30: 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20  OMIT_WSD */.    
ab40: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
ab50: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
ab60: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
ab70: 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20  NG_STYLE.  /*.  
ab80: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
ab90: 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78  abase.]lock_prox
aba0: 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52  y_file.  **   PR
abb0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
abc0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20  lock_proxy_file 
abd0: 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b  = ":auto:"|"lock
abe0: 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a 2a  _file_path".  **
abf0: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
ac00: 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  set the value of
ac10: 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f   the lock_proxy_
ac20: 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  file flag.  Chan
ac30: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61  ging.  ** the va
ac40: 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69  lue sets a speci
ac50: 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20 75  fic file to be u
ac60: 73 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65  sed for database
ac70: 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a 20   access locks.. 
ac80: 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   **.  */.  case 
ac90: 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f  PragTyp_LOCK_PRO
aca0: 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20 69  XY_FILE: {.    i
acb0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
acc0: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
acd0: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
ace0: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
acf0: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f  .      char *pro
ad00: 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e  xy_file_path = N
ad10: 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ULL;.      sqlit
ad20: 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d  e3_file *pFile =
ad30: 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
ad40: 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  e(pPager);.     
ad50: 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f   sqlite3OsFileCo
ad60: 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c  ntrolHint(pFile,
ad70: 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b   SQLITE_GET_LOCK
ad80: 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20  PROXYFILE, .    
ad90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ada0: 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66 69         &proxy_fi
adb0: 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20 20  le_path);.      
adc0: 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f 78 79  .      if( proxy
add0: 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a 20 20  _file_path ){.  
ade0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
adf0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
ae00: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
ae10: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
ae20: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
ae30: 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  AME, .          
ae40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae50: 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f      "lock_proxy_
ae60: 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  file", SQLITE_ST
ae70: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
ae80: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
ae90: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
aea0: 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79 5f 66  0, 1, 0, proxy_f
aeb0: 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a 20 20  ile_path, 0);.  
aec0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
aed0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
aee0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
aef0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
af00: 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a  e{.      Pager *
af10: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
af20: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
af30: 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  pBt);.      sqli
af40: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
af50: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
af60: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
af70: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
af80: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
af90: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
afa0: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
afb0: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
afc0: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
afd0: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aff0: 20 20 20 20 20 20 20 20 20 20 7a 52 69 67 68 74            zRight
b000: 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  );.      } else 
b010: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
b020: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
b030: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
b040: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
b050: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b070: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 29 3b            NULL);
b080: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
b090: 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f  f( res!=SQLITE_O
b0a0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  K ){.        sql
b0b0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
b0c0: 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  rse, "failed to 
b0d0: 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66  set lock proxy f
b0e0: 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67  ile");.        g
b0f0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
b100: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
b110: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
b120: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e  dif /* SQLITE_EN
b130: 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59  ABLE_LOCKING_STY
b140: 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20 20 20  LE */      .    
b150: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
b160: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
b170: 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20  ynchronous.  ** 
b180: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
b190: 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  se.]synchronous=
b1a0: 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55  OFF|ON|NORMAL|FU
b1b0: 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  LL.  **.  ** Ret
b1c0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
b1d0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
b1e0: 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c  e synchronous fl
b1f0: 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20  ag.  Changing.  
b200: 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  ** the local val
b210: 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65  ue does not make
b220: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
b230: 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68  disk file and th
b240: 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76  e.  ** default v
b250: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73  alue will be res
b260: 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74  tored the next t
b270: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
b280: 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e   is.  ** opened.
b290: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
b2a0: 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  gTyp_SYNCHRONOUS
b2b0: 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  : {.    if( !zRi
b2c0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
b2d0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
b2e0: 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75  rse, "synchronou
b2f0: 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f  s", pDb->safety_
b300: 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65  level-1);.    }e
b310: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21  lse{.      if( !
b320: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
b330: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
b340: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
b350: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
b360: 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79  Safety level may
b370: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
b380: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
b390: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65  tion");.      }e
b3a0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 62  lse{.        pDb
b3b0: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ->safety_level =
b3c0: 20 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28   getSafetyLevel(
b3d0: 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31 3b 0a 20  zRight,0,1)+1;. 
b3e0: 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67         setAllPag
b3f0: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
b400: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
b410: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
b420: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
b430: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
b440: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b450: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
b460: 41 53 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  AS.  case PragTy
b470: 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66  p_FLAG: {.    if
b480: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
b490: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
b4a0: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 61 50 72  eInt(pParse, aPr
b4b0: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a  agmaNames[mid].z
b4c0: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
b4d0: 20 20 20 20 20 20 20 20 20 20 20 28 64 62 2d 3e             (db->
b4e0: 66 6c 61 67 73 20 26 20 61 50 72 61 67 6d 61 4e  flags & aPragmaN
b4f0: 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 29 21  ames[mid].iArg)!
b500: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
b510: 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20  .      int mask 
b520: 3d 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  = aPragmaNames[m
b530: 69 64 5d 2e 69 41 72 67 3b 20 20 20 20 2f 2a 20  id].iArg;    /* 
b540: 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74 6f 20  Mask of bits to 
b550: 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f  set or clear. */
b560: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
b570: 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a  utoCommit==0 ){.
b580: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65 69          /* Forei
b590: 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20 6d  gn key support m
b5a0: 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65  ay not be enable
b5b0: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77 68  d or disabled wh
b5c0: 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20 20  ile not.        
b5d0: 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69  ** in auto-commi
b5e0: 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20  t mode.  */.    
b5f0: 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51      mask &= ~(SQ
b600: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
b610: 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
b620: 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74    if( sqlite3Get
b630: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
b640: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62  0) ){.        db
b650: 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b  ->flags |= mask;
b660: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
b670: 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
b680: 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20  &= ~mask;.      
b690: 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49    if( mask==SQLI
b6a0: 54 45 5f 44 65 66 65 72 46 4b 73 20 29 20 64 62  TE_DeferFKs ) db
b6b0: 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
b6c0: 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ns = 0;.      }.
b6d0: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f  .      /* Many o
b6e0: 66 20 74 68 65 20 66 6c 61 67 2d 70 72 61 67 6d  f the flag-pragm
b6f0: 61 73 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f  as modify the co
b700: 64 65 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  de generated by 
b710: 74 68 65 20 53 51 4c 20 0a 20 20 20 20 20 20 2a  the SQL .      *
b720: 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20  * compiler (eg. 
b730: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20  count_changes). 
b740: 53 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f 64 65  So add an opcode
b750: 20 74 6f 20 65 78 70 69 72 65 20 61 6c 6c 0a 20   to expire all. 
b760: 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64       ** compiled
b770: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
b780: 61 66 74 65 72 20 6d 6f 64 69 66 79 69 6e 67 20  after modifying 
b790: 61 20 70 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a  a pragma value..
b7a0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
b7b0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
b7c0: 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 2c 20 30  (v, OP_Expire, 0
b7d0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 65 74 41  , 0);.      setA
b7e0: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62 29  llPagerFlags(db)
b7f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
b800: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;.  }.#endif /*
b810: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41   SQLITE_OMIT_FLA
b820: 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  G_PRAGMAS */..#i
b830: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b840: 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53  T_SCHEMA_PRAGMAS
b850: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
b860: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c  GMA table_info(<
b870: 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a  table>).  **.  *
b880: 2a 20 52 65 74 75 72 6e 20 61 20 73 69 6e 67 6c  * Return a singl
b890: 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 63  e row for each c
b8a0: 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d  olumn of the nam
b8b0: 65 64 20 74 61 62 6c 65 2e 20 54 68 65 20 63 6f  ed table. The co
b8c0: 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68  lumns of.  ** th
b8d0: 65 20 72 65 74 75 72 6e 65 64 20 64 61 74 61 20  e returned data 
b8e0: 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20  set are:.  **.  
b8f0: 2a 2a 20 63 69 64 3a 20 20 20 20 20 20 20 20 43  ** cid:        C
b900: 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72  olumn id (number
b910: 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ed from left to 
b920: 72 69 67 68 74 2c 20 73 74 61 72 74 69 6e 67 20  right, starting 
b930: 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a  at 0).  ** name:
b940: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61         Column na
b950: 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20 20 20  me.  ** type:   
b960: 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61      Column decla
b970: 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a  ration type..  *
b980: 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72  * notnull:    Tr
b990: 75 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27  ue if 'NOT NULL'
b9a0: 20 69 73 20 70 61 72 74 20 6f 66 20 63 6f 6c 75   is part of colu
b9b0: 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20  mn declaration. 
b9c0: 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20   ** dflt_value: 
b9d0: 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  The default valu
b9e0: 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  e for the column
b9f0: 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20  , if any..  */. 
ba00: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 41   case PragTyp_TA
ba10: 42 4c 45 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52  BLE_INFO: if( zR
ba20: 69 67 68 74 20 29 7b 0a 20 20 20 20 54 61 62 6c  ight ){.    Tabl
ba30: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61  e *pTab;.    pTa
ba40: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
ba50: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
ba60: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
ba70: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  Tab ){.      int
ba80: 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74   i, k;.      int
ba90: 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20   nHidden = 0;.  
baa0: 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c      Column *pCol
bab0: 3b 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70  ;.      Index *p
bac0: 50 6b 20 3d 20 73 71 6c 69 74 65 33 50 72 69 6d  Pk = sqlite3Prim
bad0: 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62  aryKeyIndex(pTab
bae0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
baf0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
bb00: 2c 20 36 29 3b 0a 20 20 20 20 20 20 70 50 61 72  , 6);.      pPar
bb10: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20  se->nMem = 6;.  
bb20: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
bb30: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
bb40: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
bb50: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
bb60: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
bb70: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c  AME_NAME, "cid",
bb80: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
bb90: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bba0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
bbb0: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
bbc0: 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f   "name", SQLITE_
bbd0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
bbe0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
bbf0: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
bc00: 4d 45 5f 4e 41 4d 45 2c 20 22 74 79 70 65 22 2c  ME_NAME, "type",
bc10: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
bc20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bc30: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
bc40: 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  3, COLNAME_NAME,
bc50: 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 53 51 4c 49   "notnull", SQLI
bc60: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
bc70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
bc80: 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f  ColName(v, 4, CO
bc90: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 66 6c  LNAME_NAME, "dfl
bca0: 74 5f 76 61 6c 75 65 22 2c 20 53 51 4c 49 54 45  t_value", SQLITE
bcb0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
bcc0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
bcd0: 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e  lName(v, 5, COLN
bce0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 6b 22 2c 20  AME_NAME, "pk", 
bcf0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
bd00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 69 65        sqlite3Vie
bd10: 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
bd20: 70 50 61 72 73 65 2c 20 70 54 61 62 29 3b 0a 20  pParse, pTab);. 
bd30: 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 70 43       for(i=0, pC
bd40: 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69  ol=pTab->aCol; i
bd50: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b  <pTab->nCol; i++
bd60: 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20  , pCol++){.     
bd70: 20 20 20 69 66 28 20 49 73 48 69 64 64 65 6e 43     if( IsHiddenC
bd80: 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20  olumn(pCol) ){. 
bd90: 20 20 20 20 20 20 20 20 20 6e 48 69 64 64 65 6e           nHidden
bda0: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6f  ++;.          co
bdb0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
bdc0: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
bdd0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
bde0: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d 6e 48 69  P_Integer, i-nHi
bdf0: 64 64 65 6e 2c 20 31 29 3b 0a 20 20 20 20 20 20  dden, 1);.      
be00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
be10: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
be20: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c  8, 0, 2, 0, pCol
be30: 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ->zName, 0);.   
be40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
be50: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
be60: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20  ing8, 0, 3, 0,. 
be70: 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e            pCol->
be80: 7a 54 79 70 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54  zType ? pCol->zT
be90: 79 70 65 20 3a 20 22 22 2c 20 30 29 3b 0a 20 20  ype : "", 0);.  
bea0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
beb0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
bec0: 74 65 67 65 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f  teger, (pCol->no
bed0: 74 4e 75 6c 6c 20 3f 20 31 20 3a 20 30 29 2c 20  tNull ? 1 : 0), 
bee0: 34 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  4);.        if( 
bef0: 70 43 6f 6c 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20  pCol->zDflt ){. 
bf00: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
bf10: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
bf20: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 35 2c 20  _String8, 0, 5, 
bf30: 30 2c 20 28 63 68 61 72 2a 29 70 43 6f 6c 2d 3e  0, (char*)pCol->
bf40: 7a 44 66 6c 74 2c 20 30 29 3b 0a 20 20 20 20 20  zDflt, 0);.     
bf50: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
bf60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
bf70: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c  ddOp2(v, OP_Null
bf80: 2c 20 30 2c 20 35 29 3b 0a 20 20 20 20 20 20 20  , 0, 5);.       
bf90: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28   }.        if( (
bfa0: 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  pCol->colFlags &
bfb0: 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
bfc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
bfd0: 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    k = 0;.       
bfe0: 20 7d 65 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d   }else if( pPk==
bff0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  0 ){.          k
c000: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
c010: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66  lse{.          f
c020: 6f 72 28 6b 3d 31 3b 20 41 4c 57 41 59 53 28 6b  or(k=1; ALWAYS(k
c030: 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 29 20 26 26  <=pTab->nCol) &&
c040: 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b   pPk->aiColumn[k
c050: 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20  -1]!=i; k++){}. 
c060: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
c070: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c080: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
c090: 2c 20 6b 2c 20 36 29 3b 0a 20 20 20 20 20 20 20  , k, 6);.       
c0a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c0b0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
c0c0: 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20 20  ow, 1, 6);.     
c0d0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
c0e0: 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72  reak;..  case Pr
c0f0: 61 67 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20  agTyp_STATS: {. 
c100: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
c110: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b      HashElem *i;
c120: 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33  .    v = sqlite3
c130: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
c140: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c150: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29  SetNumCols(v, 4)
c160: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
c170: 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71 6c 69  em = 4;.    sqli
c180: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
c190: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
c1a0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
c1b0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
c1c0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
c1d0: 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f  "table", SQLITE_
c1e0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
c1f0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c200: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
c210: 5f 4e 41 4d 45 2c 20 22 69 6e 64 65 78 22 2c 20  _NAME, "index", 
c220: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
c230: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c240: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
c250: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 77  COLNAME_NAME, "w
c260: 69 64 74 68 22 2c 20 53 51 4c 49 54 45 5f 53 54  idth", SQLITE_ST
c270: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
c280: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c290: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
c2a0: 41 4d 45 2c 20 22 68 65 69 67 68 74 22 2c 20 53  AME, "height", S
c2b0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c2c0: 20 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48     for(i=sqliteH
c2d0: 61 73 68 46 69 72 73 74 28 26 70 44 62 2d 3e 70  ashFirst(&pDb->p
c2e0: 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29  Schema->tblHash)
c2f0: 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73  ; i; i=sqliteHas
c300: 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20 20  hNext(i)){.     
c310: 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73   Table *pTab = s
c320: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69 29  qliteHashData(i)
c330: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c340: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
c350: 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
c360: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 30  , pTab->zName, 0
c370: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c380: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c390: 5f 4e 75 6c 6c 2c 20 30 2c 20 32 29 3b 0a 20 20  _Null, 0, 2);.  
c3a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c3b0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
c3c0: 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3e0: 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45  (int)sqlite3LogE
c3f0: 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e 73 7a  stToInt(pTab->sz
c400: 54 61 62 52 6f 77 29 2c 20 33 29 3b 0a 20 20 20  TabRow), 3);.   
c410: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c420: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c430: 65 72 2c 20 28 69 6e 74 29 70 54 61 62 2d 3e 6e  er, (int)pTab->n
c440: 52 6f 77 45 73 74 2c 20 34 29 3b 0a 20 20 20 20  RowEst, 4);.    
c450: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c460: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
c470: 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20  Row, 1, 4);.    
c480: 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d    for(pIdx=pTab-
c490: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
c4a0: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29  Idx=pIdx->pNext)
c4b0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
c4c0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
c4d0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
c4e0: 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c   0, pIdx->zName,
c4f0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
c500: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c510: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20  , OP_Integer,.  
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c530: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
c540: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
c550: 6e 74 28 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f  nt(pIdx->szIdxRo
c560: 77 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20  w), 3);.        
c570: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c580: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c590: 20 28 69 6e 74 29 70 49 64 78 2d 3e 61 69 52 6f   (int)pIdx->aiRo
c5a0: 77 45 73 74 5b 30 5d 2c 20 34 29 3b 0a 20 20 20  wEst[0], 4);.   
c5b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c5c0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
c5d0: 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20  ultRow, 1, 4);. 
c5e0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
c5f0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
c600: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
c610: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
c620: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
c630: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
c640: 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d  pTab;.    pIdx =
c650: 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65   sqlite3FindInde
c660: 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  x(db, zRight, zD
c670: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  b);.    if( pIdx
c680: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
c690: 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20 70 49  .      pTab = pI
c6a0: 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20  dx->pTable;.    
c6b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c6c0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20  NumCols(v, 3);. 
c6d0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
c6e0: 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 73 71 6c  m = 3;.      sql
c6f0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
c700: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
c710: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c720: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
c730: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
c740: 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51 4c 49  E, "seqno", SQLI
c750: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
c760: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c770: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
c780: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64  LNAME_NAME, "cid
c790: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
c7a0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c7b0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
c7c0: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
c7d0: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
c7e0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
c7f0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 49 64 78   for(i=0; i<pIdx
c800: 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 69 2b 2b 29 7b  ->nKeyCol; i++){
c810: 0a 20 20 20 20 20 20 20 20 69 31 36 20 63 6e 75  .        i16 cnu
c820: 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75  m = pIdx->aiColu
c830: 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73  mn[i];.        s
c840: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c850: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c860: 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  i, 1);.        s
c870: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c880: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c890: 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20 20 20 20  cnum, 2);.      
c8a0: 20 20 61 73 73 65 72 74 28 20 70 54 61 62 2d 3e    assert( pTab->
c8b0: 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20 20 20  nCol>cnum );.   
c8c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c8d0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
c8e0: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70  ing8, 0, 3, 0, p
c8f0: 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e  Tab->aCol[cnum].
c900: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
c910: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c920: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
c930: 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20  tRow, 1, 3);.   
c940: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
c950: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
c960: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49  PragTyp_INDEX_LI
c970: 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  ST: if( zRight )
c980: 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
c990: 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  x;.    Table *pT
c9a0: 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20  ab;.    int i;. 
c9b0: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
c9c0: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
c9d0: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
c9e0: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
c9f0: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
ca00: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
ca10: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ca20: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29  SetNumCols(v, 3)
ca30: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
ca40: 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20  nMem = 3;.      
ca50: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
ca60: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
ca70: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
ca80: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
ca90: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
caa0: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
cab0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
cac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
cad0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
cae0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
caf0: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
cb00: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
cb10: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
cb20: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
cb30: 41 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c 20 53  AME, "unique", S
cb40: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
cb50: 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54       for(pIdx=pT
cb60: 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d 30 3b  ab->pIndex, i=0;
cb70: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
cb80: 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a 20  ->pNext, i++){. 
cb90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cba0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
cbb0: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
cbc0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cbd0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
cbe0: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
cbf0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29   pIdx->zName, 0)
cc00: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
cc10: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cc20: 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d  P_Integer, pIdx-
cc30: 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e  >onError!=OE_Non
cc40: 65 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73  e, 3);.        s
cc50: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cc60: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
cc70: 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 7d  , 1, 3);.      }
cc80: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
cc90: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
cca0: 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53  Typ_DATABASE_LIS
ccb0: 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  T: {.    int i;.
ccc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
ccd0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b  etNumCols(v, 3);
cce0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
ccf0: 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74  m = 3;.    sqlit
cd00: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
cd10: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
cd20: 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49  AME, "seq", SQLI
cd30: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
cd40: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
cd50: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
cd60: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
cd70: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
cd80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
cd90: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
cda0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
cdb0: 22 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53  "file", SQLITE_S
cdc0: 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
cdd0: 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
cde0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
cdf0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d  db->aDb[i].pBt==
ce00: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
ce10: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
ce20: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20  aDb[i].zName!=0 
ce30: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
ce40: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ce50: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
ce60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
ce70: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
ce80: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
ce90: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
cea0: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
ceb0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
cec0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
ced0: 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   3, 0,.         
cee0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
cef0: 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44  tFilename(db->aD
cf00: 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20  b[i].pBt), 0);. 
cf10: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cf20: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
cf30: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
cf40: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
cf50: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
cf60: 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54  p_COLLATION_LIST
cf70: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20  : {.    int i = 
cf80: 30 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20  0;.    HashElem 
cf90: 2a 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  *p;.    sqlite3V
cfa0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
cfb0: 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   2);.    pParse-
cfc0: 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73  >nMem = 2;.    s
cfd0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
cfe0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
cff0: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20  ME_NAME, "seq", 
d000: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
d010: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d020: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
d030: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
d040: 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ame", SQLITE_STA
d050: 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d  TIC);.    for(p=
d060: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
d070: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20  &db->aCollSeq); 
d080: 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e  p; p=sqliteHashN
d090: 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43  ext(p)){.      C
d0a0: 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20  ollSeq *pColl = 
d0b0: 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74  (CollSeq *)sqlit
d0c0: 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20  eHashData(p);.  
d0d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d0e0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
d0f0: 67 65 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20 20  ger, i++, 1);.  
d100: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d110: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d120: 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43  ng8, 0, 2, 0, pC
d130: 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  oll->zName, 0);.
d140: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d150: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
d160: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a  sultRow, 1, 2);.
d170: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
d180: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
d190: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
d1a0: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
d1b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
d1c0: 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61  FOREIGN_KEY.  ca
d1d0: 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49  se PragTyp_FOREI
d1e0: 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28  GN_KEY_LIST: if(
d1f0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46   zRight ){.    F
d200: 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61  Key *pFK;.    Ta
d210: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70  ble *pTab;.    p
d220: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
d230: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
d240: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
d250: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76   pTab ){.      v
d260: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
d270: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
d280: 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b   pFK = pTab->pFK
d290: 65 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46  ey;.      if( pF
d2a0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  K ){.        int
d2b0: 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20   i = 0; .       
d2c0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
d2d0: 75 6d 43 6f 6c 73 28 76 2c 20 38 29 3b 0a 20 20  umCols(v, 8);.  
d2e0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
d2f0: 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20  em = 8;.        
d300: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
d310: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
d320: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71  iDb);.        sq
d330: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d340: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
d350: 45 5f 4e 41 4d 45 2c 20 22 69 64 22 2c 20 53 51  E_NAME, "id", SQ
d360: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
d370: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d380: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
d390: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
d3a0: 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54  "seq", SQLITE_ST
d3b0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
d3c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
d3d0: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
d3e0: 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22  ME_NAME, "table"
d3f0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d400: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d410: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d420: 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 3, COLNAME_NA
d430: 4d 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49  ME, "from", SQLI
d440: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d450: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d460: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20  etColName(v, 4, 
d470: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74  COLNAME_NAME, "t
d480: 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  o", SQLITE_STATI
d490: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
d4a0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d4b0: 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 5, COLNAME_
d4c0: 4e 41 4d 45 2c 20 22 6f 6e 5f 75 70 64 61 74 65  NAME, "on_update
d4d0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d4e0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
d4f0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d500: 28 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 6, COLNAME_N
d510: 41 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22  AME, "on_delete"
d520: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d530: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d540: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d550: 76 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 7, COLNAME_NA
d560: 4d 45 2c 20 22 6d 61 74 63 68 22 2c 20 53 51 4c  ME, "match", SQL
d570: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d580: 20 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b       while(pFK){
d590: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a  .          int j
d5a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  ;.          for(
d5b0: 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c  j=0; j<pFK->nCol
d5c0: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
d5d0: 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d      char *zCol =
d5e0: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43   pFK->aCol[j].zC
d5f0: 6f 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ol;.            
d600: 63 68 61 72 20 2a 7a 4f 6e 44 65 6c 65 74 65 20  char *zOnDelete 
d610: 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e  = (char *)action
d620: 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f  Name(pFK->aActio
d630: 6e 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  n[0]);.         
d640: 20 20 20 63 68 61 72 20 2a 7a 4f 6e 55 70 64 61     char *zOnUpda
d650: 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74  te = (char *)act
d660: 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63  ionName(pFK->aAc
d670: 74 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20 20 20  tion[1]);.      
d680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d690: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
d6a0: 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20  teger, i, 1);.  
d6b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d6c0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d6d0: 50 5f 49 6e 74 65 67 65 72 2c 20 6a 2c 20 32 29  P_Integer, j, 2)
d6e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d6f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
d700: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
d710: 2c 20 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f  , 3, 0, pFK->zTo
d720: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
d730: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d740: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
d750: 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20  8, 0, 4, 0,.    
d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d770: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
d780: 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a  aCol[pFK->aCol[j
d790: 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20  ].iFrom].zName, 
d7a0: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
d7b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d7c0: 34 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53  4(v, zCol ? OP_S
d7d0: 74 72 69 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c  tring8 : OP_Null
d7e0: 2c 20 30 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c  , 0, 5, 0, zCol,
d7f0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
d800: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d810: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
d820: 2c 20 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55 70  , 0, 6, 0, zOnUp
d830: 64 61 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  date, 0);.      
d840: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d850: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
d860: 72 69 6e 67 38 2c 20 30 2c 20 37 2c 20 30 2c 20  ring8, 0, 7, 0, 
d870: 7a 4f 6e 44 65 6c 65 74 65 2c 20 30 29 3b 0a 20  zOnDelete, 0);. 
d880: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d890: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
d8a0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 38  OP_String8, 0, 8
d8b0: 2c 20 30 2c 20 22 4e 4f 4e 45 22 2c 20 30 29 3b  , 0, "NONE", 0);
d8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d8d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d8e0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
d8f0: 31 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20  1, 8);.         
d900: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69   }.          ++i
d910: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b 20  ;.          pFK 
d920: 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d  = pFK->pNextFrom
d930: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
d940: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
d950: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
d960: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
d970: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
d980: 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  Y) */..#ifndef S
d990: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
d9a0: 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53  GN_KEY.#ifndef S
d9b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
d9c0: 45 52 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ER.  case PragTy
d9d0: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48  p_FOREIGN_KEY_CH
d9e0: 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20  ECK: {.    FKey 
d9f0: 2a 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20  *pFK;           
da00: 20 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b    /* A foreign k
da10: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  ey constraint */
da20: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
da30: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
da40: 68 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61  hild table conta
da50: 69 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22 20  in "REFERENCES" 
da60: 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54  keyword */.    T
da70: 61 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20  able *pParent;  
da80: 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
da90: 74 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64  table that child
daa0: 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20   points to */.  
dab0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20    Index *pIdx;  
dac0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
dad0: 78 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  x in the parent 
dae0: 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
daf0: 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
db00: 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
db10: 74 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65  ter:  Foreign ke
db20: 79 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61  y number for pTa
db30: 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20  b */.    int j; 
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a  /* Loop counter:
db60: 20 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66    Field of the f
db70: 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20  oreign key */.  
db80: 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20    HashElem *k;  
db90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
dba0: 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20   counter:  Next 
dbb0: 74 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20  table in schema 
dbc0: 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20  */.    int x;   
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dbe0: 20 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65   result variable
dbf0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
dc00: 65 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f  esult;         /
dc10: 2a 20 33 20 72 65 67 69 73 74 65 72 73 20 74 6f  * 3 registers to
dc20: 20 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72   hold a result r
dc30: 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ow */.    int re
dc40: 67 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  gKey;           
dc50: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
dc60: 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65  hold key for che
dc70: 63 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a  cking the FK */.
dc80: 20 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20      int regRow; 
dc90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
dca0: 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20  gisters to hold 
dcb0: 61 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20  a row from pTab 
dcc0: 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54  */.    int addrT
dcd0: 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
dce0: 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63   Top of a loop c
dcf0: 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20  hecking foreign 
dd00: 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20  keys */.    int 
dd10: 61 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20  addrOk;         
dd20: 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20     /* Jump here 
dd30: 69 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b  if the key is OK
dd40: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43   */.    int *aiC
dd50: 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ols;           /
dd60: 2a 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e  * child to paren
dd70: 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67  t column mapping
dd80: 20 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65 73 75   */..    regResu
dd90: 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65  lt = pParse->nMe
dda0: 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  m+1;.    pParse-
ddb0: 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20  >nMem += 4;.    
ddc0: 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73  regKey = ++pPars
ddd0: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67  e->nMem;.    reg
dde0: 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Row = ++pParse->
ddf0: 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71  nMem;.    v = sq
de00: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
de10: 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  rse);.    sqlite
de20: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
de30: 76 2c 20 34 29 3b 0a 20 20 20 20 73 71 6c 69 74  v, 4);.    sqlit
de40: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
de50: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
de60: 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51  AME, "table", SQ
de70: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
de80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
de90: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
dea0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f 77  LNAME_NAME, "row
deb0: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
dec0: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
ded0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
dee0: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
def0: 45 2c 20 22 70 61 72 65 6e 74 22 2c 20 53 51 4c  E, "parent", SQL
df00: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
df10: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
df20: 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c  olName(v, 3, COL
df30: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b 69 64  NAME_NAME, "fkid
df40: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
df50: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  );.    sqlite3Co
df60: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
df70: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
df80: 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46   k = sqliteHashF
df90: 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44  irst(&db->aDb[iD
dfa0: 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48  b].pSchema->tblH
dfb0: 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  ash);.    while(
dfc0: 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20   k ){.      if( 
dfd0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
dfe0: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
dff0: 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72  LocateTable(pPar
e000: 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a  se, 0, zRight, z
e010: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d  Db);.        k =
e020: 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
e030: 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20  .        pTab = 
e040: 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61  (Table*)sqliteHa
e050: 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20  shData(k);.     
e060: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
e070: 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20  hNext(k);.      
e080: 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62  }.      if( pTab
e090: 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b  ==0 || pTab->pFK
e0a0: 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ey==0 ) continue
e0b0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  ;.      sqlite3T
e0c0: 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c  ableLock(pParse,
e0d0: 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d   iDb, pTab->tnum
e0e0: 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  , 0, pTab->zName
e0f0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54 61  );.      if( pTa
e100: 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70  b->nCol+regRow>p
e110: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50  Parse->nMem ) pP
e120: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61  arse->nMem = pTa
e130: 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77  b->nCol + regRow
e140: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f  ;.      sqlite3O
e150: 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c  penTable(pParse,
e160: 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f   0, iDb, pTab, O
e170: 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20  P_OpenRead);.   
e180: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e190: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
e1a0: 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74  g8, 0, regResult
e1b0: 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  , 0, pTab->zName
e1c0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
e1d0: 20 20 20 20 20 20 20 20 20 20 50 34 5f 54 52 41            P4_TRA
e1e0: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 66  NSIENT);.      f
e1f0: 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62  or(i=1, pFK=pTab
e200: 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b  ->pFKey; pFK; i+
e210: 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78  +, pFK=pFK->pNex
e220: 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20  tFrom){.        
e230: 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65  pParent = sqlite
e240: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70  3FindTable(db, p
e250: 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20  FK->zTo, zDb);. 
e260: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
e270: 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  nt==0 ) continue
e280: 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d  ;.        pIdx =
e290: 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   0;.        sqli
e2a0: 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61  te3TableLock(pPa
e2b0: 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e  rse, iDb, pParen
e2c0: 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72  t->tnum, 0, pPar
e2d0: 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  ent->zName);.   
e2e0: 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
e2f0: 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50  FkLocateIndex(pP
e300: 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70  arse, pParent, p
e310: 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20  FK, &pIdx, 0);. 
e320: 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20         if( x==0 
e330: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
e340: 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20   pIdx==0 ){.    
e350: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f          sqlite3O
e360: 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c  penTable(pParse,
e370: 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74   i, iDb, pParent
e380: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a  , OP_OpenRead);.
e390: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
e3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4b 65 79  .            Key
e3b0: 49 6e 66 6f 20 2a 70 4b 65 79 20 3d 20 73 71 6c  Info *pKey = sql
e3c0: 69 74 65 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f  ite3IndexKeyinfo
e3d0: 28 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b 0a  (pParse, pIdx);.
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e3f0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
e400: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c   OP_OpenRead, i,
e410: 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62   pIdx->tnum, iDb
e420: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
e430: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
e440: 50 34 28 76 2c 20 2d 31 2c 20 28 63 68 61 72 2a  P4(v, -1, (char*
e450: 29 70 4b 65 79 2c 20 50 34 5f 4b 45 59 49 4e 46  )pKey, P4_KEYINF
e460: 4f 5f 48 41 4e 44 4f 46 46 29 3b 0a 20 20 20 20  O_HANDOFF);.    
e470: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
e480: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
e490: 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   k = 0;.        
e4a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
e4b0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
e4c0: 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d   assert( pParse-
e4d0: 3e 6e 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d  >nErr>0 || pFK==
e4e0: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
e4f0: 46 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  FK ) break;.    
e500: 20 20 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 54    if( pParse->nT
e510: 61 62 3c 69 20 29 20 70 50 61 72 73 65 2d 3e 6e  ab<i ) pParse->n
e520: 54 61 62 20 3d 20 69 3b 0a 20 20 20 20 20 20 61  Tab = i;.      a
e530: 64 64 72 54 6f 70 20 3d 20 73 71 6c 69 74 65 33  ddrTop = sqlite3
e540: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
e550: 5f 52 65 77 69 6e 64 2c 20 30 29 3b 0a 20 20 20  _Rewind, 0);.   
e560: 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d     for(i=1, pFK=
e570: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b  pTab->pFKey; pFK
e580: 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e  ; i++, pFK=pFK->
e590: 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20  pNextFrom){.    
e5a0: 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71      pParent = sq
e5b0: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
e5c0: 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  b, pFK->zTo, zDb
e5d0: 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  );.        pIdx 
e5e0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43  = 0;.        aiC
e5f0: 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ols = 0;.       
e600: 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a   if( pParent ){.
e610: 20 20 20 20 20 20 20 20 20 20 78 20 3d 20 73 71            x = sq
e620: 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
e630: 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65  ex(pParse, pPare
e640: 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20  nt, pFK, &pIdx, 
e650: 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20  &aiCols);.      
e660: 20 20 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30      assert( x==0
e670: 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   );.        }.  
e680: 20 20 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73        addrOk = s
e690: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61  qlite3VdbeMakeLa
e6a0: 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20  bel(v);.        
e6b0: 69 66 28 20 70 50 61 72 65 6e 74 20 26 26 20 70  if( pParent && p
e6c0: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
e6d0: 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70      int iKey = p
e6e0: 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f  FK->aCol[0].iFro
e6f0: 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  m;.          ass
e700: 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20  ert( iKey>=0 && 
e710: 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20  iKey<pTab->nCol 
e720: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
e730: 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b   iKey!=pTab->iPK
e740: 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ey ){.          
e750: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e760: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e  Op3(v, OP_Column
e770: 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f  , 0, iKey, regRo
e780: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  w);.            
e790: 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
e7a0: 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b  ault(v, pTab, iK
e7b0: 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20  ey, regRow);.   
e7c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e7d0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
e7e0: 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c  _IsNull, regRow,
e7f0: 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20   addrOk);.      
e800: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e810: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75  eAddOp2(v, OP_Mu
e820: 73 74 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c  stBeInt, regRow,
e830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e840: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
e850: 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 0a 20 20  ntAddr(v)+3);.  
e860: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
e870: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e880: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
e890: 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67  OP_Rowid, 0, reg
e8a0: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
e8b0: 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  }.          sqli
e8c0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
e8d0: 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69   OP_NotExists, i
e8e0: 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  , 0, regRow);.  
e8f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e900: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
e910: 47 6f 74 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29  Goto, 0, addrOk)
e920: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
e930: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
e940: 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  v, sqlite3VdbeCu
e950: 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b  rrentAddr(v)-2);
e960: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
e970: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d            for(j=
e980: 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20  0; j<pFK->nCol; 
e990: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
e9a0: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
e9b0: 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
e9c0: 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20  e(v, pTab, 0,.  
e9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9e0: 20 20 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73            aiCols
e9f0: 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70   ? aiCols[j] : p
ea00: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f  FK->aCol[j].iFro
ea10: 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20  m, regRow+j);.  
ea20: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ea30: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
ea40: 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77  P_IsNull, regRow
ea50: 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20  +j, addrOk);.   
ea60: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ea70: 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29     if( pParent )
ea80: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
ea90: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
eaa0: 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  v, OP_MakeRecord
eab0: 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e  , regRow, pFK->n
eac0: 43 6f 6c 2c 20 72 65 67 4b 65 79 29 3b 0a 20 20  Col, regKey);.  
ead0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
eae0: 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c  3VdbeChangeP4(v,
eaf0: 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20   -1,.           
eb00: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
eb10: 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
eb20: 72 28 76 2c 70 49 64 78 29 2c 20 50 34 5f 54 52  r(v,pIdx), P4_TR
eb30: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
eb40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
eb50: 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50  eAddOp4Int(v, OP
eb60: 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f  _Found, i, addrO
eb70: 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20  k, regKey, 0);. 
eb80: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
eb90: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
eba0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ebb0: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
ebc0: 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20  egResult+1);.   
ebd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ebe0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
ebf0: 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75  ing8, 0, regResu
ec00: 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20 20 20  lt+2, 0, .      
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec20: 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34      pFK->zTo, P4
ec30: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
ec40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ec50: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
ec60: 65 67 65 72 2c 20 69 2d 31 2c 20 72 65 67 52 65  eger, i-1, regRe
ec70: 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20 20 20  sult+3);.       
ec80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ec90: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
eca0: 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34  ow, regResult, 4
ecb0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
ecc0: 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62  e3VdbeResolveLab
ecd0: 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  el(v, addrOk);. 
ece0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
ecf0: 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29  Free(db, aiCols)
ed00: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
ed10: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ed20: 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c  2(v, OP_Next, 0,
ed30: 20 61 64 64 72 54 6f 70 2b 31 29 3b 0a 20 20 20   addrTop+1);.   
ed40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
ed50: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 54 6f  mpHere(v, addrTo
ed60: 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  p);.    }.  }.  
ed70: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
ed80: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
ed90: 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20 2a  _OMIT_TRIGGER) *
eda0: 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  /.#endif /* !def
edb0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
edc0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f  _FOREIGN_KEY) */
edd0: 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  ..#ifndef NDEBUG
ede0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
edf0: 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a  PARSER_TRACE: {.
ee00: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
ee10: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
ee20: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
ee30: 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20  ight, 0) ){.    
ee40: 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65      sqlite3Parse
ee50: 72 54 72 61 63 65 28 73 74 64 65 72 72 2c 20 22  rTrace(stderr, "
ee60: 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20  parser: ");.    
ee70: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
ee80: 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
ee90: 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20 20  ace(0, 0);.     
eea0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
eeb0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
eec0: 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68 65  /* Reinstall the
eed0: 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66   LIKE and GLOB f
eee0: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 76  unctions.  The v
eef0: 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20  ariant of LIKE. 
ef00: 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62 65   ** used will be
ef10: 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
ef20: 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
ef30: 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20 2a   on the RHS..  *
ef40: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
ef50: 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f  _CASE_SENSITIVE_
ef60: 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28 20  LIKE: {.    if( 
ef70: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
ef80: 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
ef90: 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c  ikeFunctions(db,
efa0: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
efb0: 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a  an(zRight, 0));.
efc0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
efd0: 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  k;..#ifndef SQLI
efe0: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
eff0: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64  CK_ERROR_MAX.# d
f000: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
f010: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
f020: 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64 69  OR_MAX 100.#endi
f030: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
f040: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
f050: 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67  _CHECK.  /* Prag
f060: 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22  ma "quick_check"
f070: 20 69 73 20 72 65 64 75 63 65 64 20 76 65 72 73   is reduced vers
f080: 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74  ion of .  ** int
f090: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65 73  egrity_check des
f0a0: 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74 20  igned to detect 
f0b0: 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20 63 6f  most database co
f0c0: 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69  rruption.  ** wi
f0d0: 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74 68  thout most of th
f0e0: 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61 20  e overhead of a 
f0f0: 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d 63  full integrity-c
f100: 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  heck..  */.  cas
f110: 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47 52  e PragTyp_INTEGR
f120: 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20  ITY_CHECK: {.   
f130: 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c   int i, j, addr,
f140: 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 2f 2a 20   mxErr;..    /* 
f150: 43 6f 64 65 20 74 68 61 74 20 61 70 70 65 61 72  Code that appear
f160: 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
f170: 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 63 68  the integrity ch
f180: 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72 6f  eck.  If no erro
f190: 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61 67 65  r.    ** message
f1a0: 73 20 68 61 76 65 20 62 65 65 6e 20 67 65 6e 65  s have been gene
f1b0: 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20 4f 4b  rated, output OK
f1c0: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f 75 74  .  Otherwise out
f1d0: 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 65  put the.    ** e
f1e0: 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20 20 20  rror message.   
f1f0: 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63   */.    static c
f200: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
f210: 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20  endCode[] = {.  
f220: 20 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c      { OP_AddImm,
f230: 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20        1, 0,     
f240: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a     0},    /* 0 *
f250: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 4e  /.      { OP_IfN
f260: 65 67 2c 20 20 20 20 20 20 20 31 2c 20 30 2c 20  eg,       1, 0, 
f270: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
f280: 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   1 */.      { OP
f290: 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c  _String8,     0,
f2a0: 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   3,        0},  
f2b0: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
f2c0: 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
f2d0: 20 20 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30    3, 1,        0
f2e0: 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 69  },.    };..    i
f2f0: 6e 74 20 69 73 51 75 69 63 6b 20 3d 20 28 73 71  nt isQuick = (sq
f300: 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65  lite3Tolower(zLe
f310: 66 74 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20  ft[0])=='q');.. 
f320: 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 52 41     /* If the PRA
f330: 47 4d 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  GMA command was 
f340: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 50 52 41  of the form "PRA
f350: 47 4d 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69  GMA <db>.integri
f360: 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a  ty_check",.    *
f370: 2a 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65  * then iDb is se
f380: 74 20 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f  t to the index o
f390: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
f3a0: 64 65 6e 74 69 66 69 65 64 20 62 79 20 3c 64 62  dentified by <db
f3b0: 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68 69  >..    ** In thi
f3c0: 73 20 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65  s case, the inte
f3d0: 67 72 69 74 79 20 6f 66 20 64 61 74 61 62 61 73  grity of databas
f3e0: 65 20 69 44 62 20 6f 6e 6c 79 20 69 73 20 76 65  e iDb only is ve
f3f0: 72 69 66 69 65 64 20 62 79 0a 20 20 20 20 2a 2a  rified by.    **
f400: 20 74 68 65 20 56 44 42 45 20 63 72 65 61 74 65   the VDBE create
f410: 64 20 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a  d below..    **.
f420: 20 20 20 20 2a 2a 20 4f 74 68 65 72 77 69 73 65      ** Otherwise
f430: 2c 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64  , if the command
f440: 20 77 61 73 20 73 69 6d 70 6c 79 20 22 50 52 41   was simply "PRA
f450: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
f460: 65 63 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20  eck" (or.    ** 
f470: 22 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68  "PRAGMA quick_ch
f480: 65 63 6b 22 29 2c 20 74 68 65 6e 20 69 44 62 20  eck"), then iDb 
f490: 69 73 20 73 65 74 20 74 6f 20 30 2e 20 49 6e 20  is set to 0. In 
f4a0: 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 69  this case, set i
f4b0: 44 62 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20  Db.    ** to -1 
f4c0: 68 65 72 65 2c 20 74 6f 20 69 6e 64 69 63 61 74  here, to indicat
f4d0: 65 20 74 68 61 74 20 74 68 65 20 56 44 42 45 20  e that the VDBE 
f4e0: 73 68 6f 75 6c 64 20 76 65 72 69 66 79 20 74 68  should verify th
f4f0: 65 20 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20  e integrity.    
f500: 2a 2a 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  ** of all attach
f510: 65 64 20 64 61 74 61 62 61 73 65 73 2e 20 20 2a  ed databases.  *
f520: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  /.    assert( iD
f530: 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  b>=0 );.    asse
f540: 72 74 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49  rt( iDb==0 || pI
f550: 64 32 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28  d2->z );.    if(
f560: 20 70 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44   pId2->z==0 ) iD
f570: 62 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20  b = -1;..    /* 
f580: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56  Initialize the V
f590: 44 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  DBE program */. 
f5a0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
f5b0: 3d 20 36 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 6;.    sqlite3
f5c0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
f5d0: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
f5e0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
f5f0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
f600: 4d 45 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63  ME, "integrity_c
f610: 68 65 63 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54  heck", SQLITE_ST
f620: 41 54 49 43 29 3b 0a 0a 20 20 20 20 2f 2a 20 53  ATIC);..    /* S
f630: 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 65  et the maximum e
f640: 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  rror count */.  
f650: 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45    mxErr = SQLITE
f660: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
f670: 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20  _ERROR_MAX;.    
f680: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
f690: 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 49 6e      sqlite3GetIn
f6a0: 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78 45  t32(zRight, &mxE
f6b0: 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d  rr);.      if( m
f6c0: 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20  xErr<=0 ){.     
f6d0: 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54     mxErr = SQLIT
f6e0: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
f6f0: 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20  K_ERROR_MAX;.   
f700: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
f710: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
f720: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
f730: 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72  mxErr, 1);  /* r
f740: 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f  eg[1] holds erro
f750: 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20  rs left */..    
f760: 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69  /* Do an integri
f770: 74 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68  ty check on each
f780: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a   database file *
f790: 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  /.    for(i=0; i
f7a0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
f7b0: 20 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a        HashElem *
f7c0: 78 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a 70  x;.      Hash *p
f7d0: 54 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74 20  Tbls;.      int 
f7e0: 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  cnt = 0;..      
f7f0: 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  if( OMIT_TEMPDB 
f800: 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e  && i==1 ) contin
f810: 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44  ue;.      if( iD
f820: 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29  b>=0 && i!=iDb )
f830: 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20   continue;..    
f840: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
f850: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
f860: 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72  , i);.      addr
f870: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
f880: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
f890: 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66  , 1); /* Halt if
f8a0: 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a   out of errors *
f8b0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
f8c0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
f8d0: 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Halt, 0, 0);.   
f8e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
f8f0: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
f900: 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e  ..      /* Do an
f910: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
f920: 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20   of the B-Tree. 
f930: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
f940: 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e   Begin by fillin
f950: 67 20 72 65 67 69 73 74 65 72 73 20 32 2c 20 33  g registers 2, 3
f960: 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20 72  , ... with the r
f970: 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72  oot pages number
f980: 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61  s.      ** for a
f990: 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ll tables and in
f9a0: 64 69 63 65 73 20 69 6e 20 74 68 65 20 64 61 74  dices in the dat
f9b0: 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a  abase..      */.
f9c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
f9d0: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
f9e0: 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29  Held(db, i, 0) )
f9f0: 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20  ;.      pTbls = 
fa00: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68  &db->aDb[i].pSch
fa10: 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20  ema->tblHash;.  
fa20: 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65      for(x=sqlite
fa30: 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29  HashFirst(pTbls)
fa40: 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73  ; x; x=sqliteHas
fa50: 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20  hNext(x)){.     
fa60: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
fa70: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
fa80: 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  x);.        Inde
fa90: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20  x *pIdx;.       
faa0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
fab0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
fac0: 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b  , pTab->tnum, 2+
fad0: 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 63 6e  cnt);.        cn
fae0: 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 66 6f 72  t++;.        for
faf0: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
fb00: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
fb10: 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  Idx->pNext){.   
fb20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
fb30: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
fb40: 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 74 6e  nteger, pIdx->tn
fb50: 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20  um, 2+cnt);.    
fb60: 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
fb70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
fb80: 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
fb90: 72 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e 75  re sufficient nu
fba0: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
fbb0: 73 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  s have been allo
fbc0: 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 70  cated */.      p
fbd0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41  Parse->nMem = MA
fbe0: 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c  X( pParse->nMem,
fbf0: 20 63 6e 74 2b 37 20 29 3b 0a 0a 20 20 20 20 20   cnt+7 );..     
fc00: 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74 72 65   /* Do the b-tre
fc10: 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  e integrity chec
fc20: 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  ks */.      sqli
fc30: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
fc40: 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c   OP_IntegrityCk,
fc50: 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20 20   2, cnt, 1);.   
fc60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
fc70: 61 6e 67 65 50 35 28 76 2c 20 28 75 38 29 69 29  angeP5(v, (u8)i)
fc80: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
fc90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
fca0: 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32  (v, OP_IsNull, 2
fcb0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
fcc0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
fcd0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
fce0: 30 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69  0,.         sqli
fcf0: 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22  te3MPrintf(db, "
fd00: 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20  *** in database 
fd10: 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61  %s ***\n", db->a
fd20: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20  Db[i].zName),.  
fd30: 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d 49         P4_DYNAMI
fd40: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
fd50: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
fd60: 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 29 3b 0a 20  P_Move, 2, 4);. 
fd70: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fd80: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
fd90: 63 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20  cat, 4, 3, 2);. 
fda0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fdb0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
fdc0: 75 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20  ultRow, 2, 1);. 
fdd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fde0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
fdf0: 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b  );..      /* Mak
fe00: 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69  e sure all the i
fe10: 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74  ndices are const
fe20: 72 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79  ructed correctly
fe30: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
fe40: 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73   for(x=sqliteHas
fe50: 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78  hFirst(pTbls); x
fe60: 20 26 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d   && !isQuick; x=
fe70: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78  sqliteHashNext(x
fe80: 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c  )){.        Tabl
fe90: 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
fea0: 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20  HashData(x);.   
feb0: 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78       Index *pIdx
fec0: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f  ;.        int lo
fed0: 6f 70 54 6f 70 3b 0a 0a 20 20 20 20 20 20 20 20  opTop;..        
fee0: 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78  if( pTab->pIndex
fef0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
ff00: 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
ff10: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
ff20: 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29  (v, OP_IfPos, 1)
ff30: 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75  ;  /* Stop if ou
ff40: 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20  t of errors */. 
ff50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ff60: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48  beAddOp2(v, OP_H
ff70: 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  alt, 0, 0);.    
ff80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
ff90: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
ffa0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
ffb0: 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
ffc0: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20  pParse);.       
ffd0: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
ffe0: 65 41 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72  eAndIndices(pPar
fff0: 73 65 2c 20 70 54 61 62 2c 20 31 2c 20 2d 31 2c  se, pTab, 1, -1,
10000 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
10010 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20         for(j=0, 
10020 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
10030 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
10040 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b  dx->pNext, j++){
10050 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10060 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
10070 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 37  OP_Integer, 0, 7
10080 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e  +j); /* index en
10090 74 72 69 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f  tries counter */
100a0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
100b0 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
100c0 3d 20 4d 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d  = MAX(pParse->nM
100d0 65 6d 2c 20 37 2b 6a 29 3b 0a 20 20 20 20 20 20  em, 7+j);.      
100e0 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69    loopTop = sqli
100f0 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10100 20 4f 50 5f 52 65 77 69 6e 64 2c 20 31 2c 20 30   OP_Rewind, 1, 0
10110 29 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20 66  ) + 1;.        f
10120 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
10130 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
10140 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
10150 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
10160 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70     int jmp2, jmp
10170 33 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  3;.          int
10180 20 72 31 3b 0a 20 20 20 20 20 20 20 20 20 20 73   r1;.          s
10190 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
101a0 4f 70 4c 69 73 74 20 69 64 78 45 72 72 5b 5d 20  OpList idxErr[] 
101b0 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  = {.            
101c0 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20  { OP_AddImm,    
101d0 20 20 31 2c 20 2d 31 2c 20 20 30 7d 2c 0a 20 20    1, -1,  0},.  
101e0 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53            { OP_S
101f0 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 20  tring8,     0,  
10200 33 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20  3,  0},    /* 1 
10210 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  */.            {
10220 20 4f 50 5f 52 6f 77 69 64 2c 20 20 20 20 20 20   OP_Rowid,      
10230 20 31 2c 20 20 34 2c 20 20 30 7d 2c 0a 20 20 20   1,  4,  0},.   
10240 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74           { OP_St
10250 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 20 35  ring8,     0,  5
10260 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a  ,  0},    /* 3 *
10270 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  /.            { 
10280 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20  OP_String8,     
10290 30 2c 20 20 36 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  6,  0},    /
102a0 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 4 */.         
102b0 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c 20     { OP_Concat, 
102c0 20 20 20 20 20 34 2c 20 20 33 2c 20 20 33 7d 2c       4,  3,  3},
102d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
102e0 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20 20 35  P_Concat,      5
102f0 2c 20 20 33 2c 20 20 33 7d 2c 0a 20 20 20 20 20  ,  3,  3},.     
10300 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63         { OP_Conc
10310 61 74 2c 20 20 20 20 20 20 36 2c 20 20 33 2c 20  at,      6,  3, 
10320 20 33 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20   3},.           
10330 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
10340 20 20 20 33 2c 20 20 31 2c 20 20 30 7d 2c 0a 20     3,  1,  0},. 
10350 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
10360 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20  IfPos,       1, 
10370 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 39   0,  0},    /* 9
10380 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
10390 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20  { OP_Halt,      
103a0 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 0a 20 20    0,  0,  0},.  
103b0 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20          };.     
103c0 20 20 20 20 20 72 31 20 3d 20 73 71 6c 69 74 65       r1 = sqlite
103d0 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65  3GenerateIndexKe
103e0 79 28 70 50 61 72 73 65 2c 20 70 49 64 78 2c 20  y(pParse, pIdx, 
103f0 31 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 29 3b  1, 0, 0, &jmp3);
10400 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10410 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
10420 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2b 6a 2c 20  OP_AddImm, 7+j, 
10430 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65 6e  1);  /* incremen
10440 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a 2f  t entry count */
10450 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20  .          jmp2 
10460 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
10470 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75  Op4Int(v, OP_Fou
10480 6e 64 2c 20 6a 2b 32 2c 20 30 2c 20 72 31 2c 20  nd, j+2, 0, r1, 
10490 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 2b 31 29  pIdx->nKeyCol+1)
104a0 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 72  ;.          addr
104b0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
104c0 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
104d0 53 69 7a 65 28 69 64 78 45 72 72 29 2c 20 69 64  Size(idxErr), id
104e0 78 45 72 72 29 3b 0a 20 20 20 20 20 20 20 20 20  xErr);.         
104f0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
10500 67 65 50 34 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP4(v, addr+1, 
10510 22 72 6f 77 69 64 20 22 2c 20 50 34 5f 53 54 41  "rowid ", P4_STA
10520 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20  TIC);.          
10530 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
10540 65 50 34 28 76 2c 20 61 64 64 72 2b 33 2c 20 22  eP4(v, addr+3, "
10550 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
10560 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43  dex ", P4_STATIC
10570 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10580 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34  ite3VdbeChangeP4
10590 28 76 2c 20 61 64 64 72 2b 34 2c 20 70 49 64 78  (v, addr+4, pIdx
105a0 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e  ->zName, P4_TRAN
105b0 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20  SIENT);.        
105c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
105d0 70 48 65 72 65 28 76 2c 20 61 64 64 72 2b 39 29  pHere(v, addr+9)
105e0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
105f0 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
10600 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20  v, jmp2);.      
10610 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
10620 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 6a  esolveLabel(v, j
10630 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  mp3);.        }.
10640 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10650 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10660 4e 65 78 74 2c 20 31 2c 20 6c 6f 6f 70 54 6f 70  Next, 1, loopTop
10670 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
10680 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
10690 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23 69  , loopTop-1);.#i
106a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
106b0 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 20 20 20  T_BTREECOUNT.   
106c0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
106d0 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
106e0 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 0a  ing8, 0, 2, 0, .
106f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10700 20 20 20 20 20 22 77 72 6f 6e 67 20 23 20 6f 66       "wrong # of
10710 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65   entries in inde
10720 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b  x ", P4_STATIC);
10730 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
10740 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  , pIdx=pTab->pIn
10750 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
10760 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b  pIdx->pNext, j++
10770 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 64 64  ){.          add
10780 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  r = sqlite3VdbeC
10790 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20  urrentAddr(v);. 
107a0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
107b0 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
107c0 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b  _IfPos, 1, addr+
107d0 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  2);.          sq
107e0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
107f0 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30  v, OP_Halt, 0, 0
10800 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10810 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10820 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 6a 2b 32 2c  , OP_Count, j+2,
10830 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
10840 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
10850 28 76 2c 20 4f 50 5f 45 71 2c 20 37 2b 6a 2c 20  (v, OP_Eq, 7+j, 
10860 61 64 64 72 2b 38 2c 20 33 29 3b 0a 20 20 20 20  addr+8, 3);.    
10870 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10880 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
10890 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20  dImm, 1, -1);.  
108a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
108b0 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
108c0 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
108d0 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50  , pIdx->zName, P
108e0 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  4_TRANSIENT);.  
108f0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10900 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
10910 43 6f 6e 63 61 74 2c 20 33 2c 20 32 2c 20 37 29  Concat, 3, 2, 7)
10920 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10930 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10940 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 37   OP_ResultRow, 7
10950 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 1);.        }.
10960 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
10970 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
10980 20 2a 2f 0a 20 20 20 20 20 20 7d 20 0a 20 20 20   */.      } .   
10990 20 7d 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71   }.    addr = sq
109a0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
109b0 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
109c0 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64  endCode), endCod
109d0 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  e);.    sqlite3V
109e0 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61  dbeChangeP2(v, a
109f0 64 64 72 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20  ddr, -mxErr);.  
10a00 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
10a10 70 48 65 72 65 28 76 2c 20 61 64 64 72 2b 31 29  pHere(v, addr+1)
10a20 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
10a30 65 43 68 61 6e 67 65 50 34 28 76 2c 20 61 64 64  eChangeP4(v, add
10a40 72 2b 32 2c 20 22 6f 6b 22 2c 20 50 34 5f 53 54  r+2, "ok", P4_ST
10a50 41 54 49 43 29 3b 0a 20 20 7d 0a 20 20 62 72 65  ATIC);.  }.  bre
10a60 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
10a70 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
10a80 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69  ITY_CHECK */..#i
10a90 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
10aa0 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a  T_UTF16.  /*.  *
10ab0 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64  *   PRAGMA encod
10ac0 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ing.  **   PRAGM
10ad0 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74  A encoding = "ut
10ae0 66 2d 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75  f-8"|"utf-16"|"u
10af0 74 66 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36  tf-16le"|"utf-16
10b00 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  be".  **.  ** In
10b10 20 69 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c   its first form,
10b20 20 74 68 69 73 20 70 72 61 67 6d 61 20 72 65 74   this pragma ret
10b30 75 72 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e  urns the encodin
10b40 67 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20  g of the main.  
10b50 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 49 66 20  ** database. If 
10b60 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
10b70 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c  not initialized,
10b80 20 69 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a   it is initializ
10b90 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a  ed now..  **.  *
10ba0 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  * The second for
10bb0 6d 20 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61  m of this pragma
10bc0 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74   is a no-op if t
10bd0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
10be0 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e   file.  ** has n
10bf0 6f 74 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20  ot already been 
10c00 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20  initialized. In 
10c10 74 68 69 73 20 63 61 73 65 20 69 74 20 73 65 74  this case it set
10c20 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  s the default.  
10c30 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74  ** encoding that
10c40 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f   will be used fo
10c50 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
10c60 61 73 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65  ase file if a ne
10c70 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63  w file.  ** is c
10c80 72 65 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78  reated. If an ex
10c90 69 73 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61  isting main data
10ca0 62 61 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65  base file is ope
10cb0 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20  ned, then the.  
10cc0 2a 2a 20 64 65 66 61 75 6c 74 20 74 65 78 74 20  ** default text 
10cd0 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65  encoding for the
10ce0 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61   existing databa
10cf0 73 65 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a  se is used..  **
10d00 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61   .  ** In all ca
10d10 73 65 73 20 6e 65 77 20 64 61 74 61 62 61 73 65  ses new database
10d20 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20  s created using 
10d30 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61  the ATTACH comma
10d40 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61  nd are.  ** crea
10d50 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 73  ted to use the s
10d60 61 6d 65 20 64 65 66 61 75 6c 74 20 74 65 78 74  ame default text
10d70 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65   encoding as the
10d80 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
10d90 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e  If.  ** the main
10da0 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
10db0 74 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  t been initializ
10dc0 65 64 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65  ed and/or create
10dd0 64 20 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20  d when ATTACH.  
10de0 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 2c 20  ** is executed, 
10df0 74 68 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66  this is done bef
10e00 6f 72 65 20 74 68 65 20 41 54 54 41 43 48 20 6f  ore the ATTACH o
10e10 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20  peration..  **. 
10e20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e   ** In the secon
10e30 64 20 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67  d form this prag
10e40 6d 61 20 73 65 74 73 20 74 68 65 20 74 65 78 74  ma sets the text
10e50 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20   encoding to be 
10e60 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77  used in.  ** new
10e70 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
10e80 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
10e90 69 73 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  is database hand
10ea0 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20  le. It is only. 
10eb0 20 2a 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e   ** useful if in
10ec0 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c  voked immediatel
10ed0 79 20 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e  y after the main
10ee0 20 64 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f   database i.  */
10ef0 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
10f00 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20  ENCODING: {.    
10f10 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72  static const str
10f20 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20  uct EncName {.  
10f30 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
10f40 0a 20 20 20 20 20 20 75 38 20 65 6e 63 3b 0a 20  .      u8 enc;. 
10f50 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20     } encnames[] 
10f60 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 55 54 46  = {.      { "UTF
10f70 38 22 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 55  8",     SQLITE_U
10f80 54 46 38 20 20 20 20 20 20 20 20 7d 2c 0a 20 20  TF8        },.  
10f90 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20      { "UTF-8",  
10fa0 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20    SQLITE_UTF8   
10fb0 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74       },  /* Must
10fc0 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20   be element [1] 
10fd0 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  */.      { "UTF-
10fe0 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  16le", SQLITE_UT
10ff0 46 31 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a  F16LE     },  /*
11000 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74   Must be element
11010 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20   [2] */.      { 
11020 22 55 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49  "UTF-16be", SQLI
11030 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d  TE_UTF16BE     }
11040 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c  ,  /* Must be el
11050 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20  ement [3] */.   
11060 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20     { "UTF16le", 
11070 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
11080 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
11090 55 54 46 31 36 62 65 22 2c 20 20 53 51 4c 49 54  UTF16be",  SQLIT
110a0 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c  E_UTF16BE     },
110b0 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
110c0 22 2c 20 20 20 30 20 20 20 20 20 20 20 20 20 20  ",   0          
110d0 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51          }, /* SQ
110e0 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
110f0 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
11100 31 36 22 2c 20 20 20 20 30 20 20 20 20 20 20 20  16",    0       
11110 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a             }, /*
11120 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
11130 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30  IVE */.      { 0
11140 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20  , 0 }.    };.   
11150 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e   const struct En
11160 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20  cName *pEnc;.   
11170 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 20   if( !zRight ){ 
11180 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e     /* "PRAGMA en
11190 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20  coding" */.     
111a0 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
111b0 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
111c0 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
111d0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
111e0 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
111f0 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
11200 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
11210 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
11220 41 4d 45 2c 20 22 65 6e 63 6f 64 69 6e 67 22 2c  AME, "encoding",
11230 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
11240 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11250 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 53  beAddOp2(v, OP_S
11260 74 72 69 6e 67 38 2c 20 30 2c 20 31 29 3b 0a 20  tring8, 0, 1);. 
11270 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63       assert( enc
11280 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46  names[SQLITE_UTF
11290 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  8].enc==SQLITE_U
112a0 54 46 38 20 29 3b 0a 20 20 20 20 20 20 61 73 73  TF8 );.      ass
112b0 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51  ert( encnames[SQ
112c0 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e  LITE_UTF16LE].en
112d0 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  c==SQLITE_UTF16L
112e0 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  E );.      asser
112f0 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49  t( encnames[SQLI
11300 54 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d  TE_UTF16BE].enc=
11310 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20  =SQLITE_UTF16BE 
11320 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
11330 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20  VdbeChangeP4(v, 
11340 2d 31 2c 20 65 6e 63 6e 61 6d 65 73 5b 45 4e 43  -1, encnames[ENC
11350 28 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e  (pParse->db)].zN
11360 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b  ame, P4_STATIC);
11370 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11380 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
11390 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
113a0 0a 20 20 20 20 7d 65 6c 73 65 7b 20 20 20 20 20  .    }else{     
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113c0 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e     /* "PRAGMA en
113d0 63 6f 64 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f  coding = XXX" */
113e0 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63  .      /* Only c
113f0 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20  hange the value 
11400 6f 66 20 73 71 6c 69 74 65 2e 65 6e 63 20 69 66  of sqlite.enc if
11410 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
11420 6e 64 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20 20  ndle is not.    
11430 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64    ** initialized
11440 2e 20 49 66 20 74 68 65 20 6d 61 69 6e 20 64 61  . If the main da
11450 74 61 62 61 73 65 20 65 78 69 73 74 73 2c 20 74  tabase exists, t
11460 68 65 20 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e  he new sqlite.en
11470 63 20 76 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a  c value.      **
11480 20 77 69 6c 6c 20 62 65 20 6f 76 65 72 77 72 69   will be overwri
11490 74 74 65 6e 20 77 68 65 6e 20 74 68 65 20 73 63  tten when the sc
114a0 68 65 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f 61  hema is next loa
114b0 64 65 64 2e 20 49 66 20 69 74 20 64 6f 65 73 20  ded. If it does 
114c0 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72  not.      ** alr
114d0 65 61 64 79 20 65 78 69 73 74 73 2c 20 69 74 20  eady exists, it 
114e0 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20  will be created 
114f0 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77 20 65  to use the new e
11500 6e 63 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20  ncoding value.. 
11510 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
11520 28 20 0a 20 20 20 20 20 20 20 20 21 28 44 62 48  ( .        !(DbH
11530 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30  asProperty(db, 0
11540 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  , DB_SchemaLoade
11550 64 29 29 20 7c 7c 20 0a 20 20 20 20 20 20 20 20  d)) || .        
11560 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
11570 2c 20 30 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a  , 0, DB_Empty) .
11580 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
11590 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61   for(pEnc=&encna
115a0 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e  mes[0]; pEnc->zN
115b0 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20  ame; pEnc++){.  
115c0 20 20 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73          if( 0==s
115d0 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52  qlite3StrICmp(zR
115e0 69 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d  ight, pEnc->zNam
115f0 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  e) ){.          
11600 20 20 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62    ENC(pParse->db
11610 29 20 3d 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20  ) = pEnc->enc ? 
11620 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49  pEnc->enc : SQLI
11630 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a  TE_UTF16NATIVE;.
11640 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
11650 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
11660 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11670 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d   if( !pEnc->zNam
11680 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
11690 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
116a0 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70 6f 72  Parse, "unsuppor
116b0 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73  ted encoding: %s
116c0 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
116d0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
116e0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
116f0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
11700 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
11710 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
11720 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
11730 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  ION_PRAGMAS.  /*
11740 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
11750 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61  database.]schema
11760 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20  _version.  **   
11770 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
11780 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  .]schema_version
11790 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
117a0 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
117b0 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72 5f  [database.]user_
117c0 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50  version.  **   P
117d0 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
117e0 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20  ]user_version = 
117f0 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
11800 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
11810 74 61 62 61 73 65 2e 5d 66 72 65 65 6c 69 73 74  tabase.]freelist
11820 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74 65 67 65  _count = <intege
11830 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  r>.  **.  **   P
11840 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
11850 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a  ]application_id.
11860 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
11870 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63 61  atabase.]applica
11880 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74 65 67  tion_id = <integ
11890 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  er>.  **.  ** Th
118a0 65 20 70 72 61 67 6d 61 27 73 20 73 63 68 65 6d  e pragma's schem
118b0 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73  a_version and us
118c0 65 72 5f 76 65 72 73 69 6f 6e 20 61 72 65 20 75  er_version are u
118d0 73 65 64 20 74 6f 20 73 65 74 20 6f 72 20 67 65  sed to set or ge
118e0 74 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65  t.  ** the value
118f0 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2d 76   of the schema-v
11900 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d  ersion and user-
11910 76 65 72 73 69 6f 6e 2c 20 72 65 73 70 65 63 74  version, respect
11920 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a  ively. Both.  **
11930 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
11940 69 6f 6e 20 61 6e 64 20 74 68 65 20 75 73 65 72  ion and the user
11950 2d 76 65 72 73 69 6f 6e 20 61 72 65 20 33 32 2d  -version are 32-
11960 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
11970 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20  ers.  ** stored 
11980 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
11990 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a  header..  **.  *
119a0 2a 20 54 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f  * The schema-coo
119b0 6b 69 65 20 69 73 20 75 73 75 61 6c 6c 79 20 6f  kie is usually o
119c0 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65 64 20  nly manipulated 
119d0 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
119e0 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73  Lite. It.  ** is
119f0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
11a00 53 51 4c 69 74 65 20 77 68 65 6e 65 76 65 72 20  SQLite whenever 
11a10 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
11a20 65 6d 61 20 69 73 20 6d 6f 64 69 66 69 65 64 20  ema is modified 
11a30 28 62 79 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e  (by.  ** creatin
11a40 67 20 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20  g or dropping a 
11a50 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e  table or index).
11a60 20 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   The schema vers
11a70 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 0a 20  ion is used by. 
11a80 20 2a 2a 20 53 51 4c 69 74 65 20 65 61 63 68 20   ** SQLite each 
11a90 74 69 6d 65 20 61 20 71 75 65 72 79 20 69 73 20  time a query is 
11aa0 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75  executed to ensu
11ab0 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65  re that the inte
11ac0 72 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20  rnal cache.  ** 
11ad0 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 75 73  of the schema us
11ae0 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  ed when compilin
11af0 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79 20  g the SQL query 
11b00 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68 65  matches the sche
11b10 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64  ma of.  ** the d
11b20 61 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20  atabase against 
11b30 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c  which the compil
11b40 65 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75  ed query is actu
11b50 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20  ally executed.. 
11b60 20 2a 2a 20 53 75 62 76 65 72 74 69 6e 67 20 74   ** Subverting t
11b70 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20 62 79  his mechanism by
11b80 20 75 73 69 6e 67 20 22 50 52 41 47 4d 41 20 73   using "PRAGMA s
11b90 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74  chema_version" t
11ba0 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68  o modify.  ** th
11bb0 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
11bc0 20 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20   is potentially 
11bd0 64 61 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d 61  dangerous and ma
11be0 79 20 6c 65 61 64 20 74 6f 20 70 72 6f 67 72 61  y lead to progra
11bf0 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65 73 20 6f  m.  ** crashes o
11c00 72 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  r database corru
11c10 70 74 69 6f 6e 2e 20 55 73 65 20 77 69 74 68 20  ption. Use with 
11c20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20  caution!.  **.  
11c30 2a 2a 20 54 68 65 20 75 73 65 72 2d 76 65 72 73  ** The user-vers
11c40 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ion is not used 
11c50 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
11c60 4c 69 74 65 2e 20 49 74 20 6d 61 79 20 62 65 20  Lite. It may be 
11c70 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 61 70 70  used by.  ** app
11c80 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e  lications for an
11c90 79 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a  y purpose..  */.
11ca0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 48    case PragTyp_H
11cb0 45 41 44 45 52 5f 56 41 4c 55 45 3a 20 7b 0a 20  EADER_VALUE: {. 
11cc0 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 20     int iCookie; 
11cd0 20 20 2f 2a 20 43 6f 6f 6b 69 65 20 69 6e 64 65    /* Cookie inde
11ce0 78 2e 20 31 20 66 6f 72 20 73 63 68 65 6d 61 2d  x. 1 for schema-
11cf0 63 6f 6f 6b 69 65 2c 20 36 20 66 6f 72 20 75 73  cookie, 6 for us
11d00 65 72 2d 63 6f 6f 6b 69 65 2e 20 2a 2f 0a 20 20  er-cookie. */.  
11d10 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
11d20 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a  sBtree(v, iDb);.
11d30 20 20 20 20 73 77 69 74 63 68 28 20 7a 4c 65 66      switch( zLef
11d40 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 63 61  t[0] ){.      ca
11d50 73 65 20 27 61 27 3a 20 63 61 73 65 20 27 41 27  se 'a': case 'A'
11d60 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69  :.        iCooki
11d70 65 20 3d 20 42 54 52 45 45 5f 41 50 50 4c 49 43  e = BTREE_APPLIC
11d80 41 54 49 4f 4e 5f 49 44 3b 0a 20 20 20 20 20 20  ATION_ID;.      
11d90 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
11da0 61 73 65 20 27 66 27 3a 20 63 61 73 65 20 27 46  ase 'f': case 'F
11db0 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b  ':.        iCook
11dc0 69 65 20 3d 20 42 54 52 45 45 5f 46 52 45 45 5f  ie = BTREE_FREE_
11dd0 50 41 47 45 5f 43 4f 55 4e 54 3b 0a 20 20 20 20  PAGE_COUNT;.    
11de0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
11df0 20 63 61 73 65 20 27 73 27 3a 20 63 61 73 65 20   case 's': case 
11e00 27 53 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f  'S':.        iCo
11e10 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 53 43 48  okie = BTREE_SCH
11e20 45 4d 41 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20  EMA_VERSION;.   
11e30 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
11e40 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20    default:.     
11e50 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52     iCookie = BTR
11e60 45 45 5f 55 53 45 52 5f 56 45 52 53 49 4f 4e 3b  EE_USER_VERSION;
11e70 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
11e80 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 7a      }..    if( z
11e90 52 69 67 68 74 20 26 26 20 69 43 6f 6f 6b 69 65  Right && iCookie
11ea0 21 3d 42 54 52 45 45 5f 46 52 45 45 5f 50 41 47  !=BTREE_FREE_PAG
11eb0 45 5f 43 4f 55 4e 54 20 29 7b 0a 20 20 20 20 20  E_COUNT ){.     
11ec0 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73 70   /* Write the sp
11ed0 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76  ecified cookie v
11ee0 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74  alue */.      st
11ef0 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
11f00 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b  pList setCookie[
11f10 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20  ] = {.        { 
11f20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
11f30 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20     0,  1,  0},  
11f40 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
11f50 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20    { OP_Integer, 
11f60 20 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30         0,  1,  0
11f70 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  },    /* 1 */.  
11f80 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f        { OP_SetCo
11f90 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30  okie,      0,  0
11fa0 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a  ,  1},    /* 2 *
11fb0 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  /.      };.     
11fc0 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69   int addr = sqli
11fd0 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
11fe0 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65  (v, ArraySize(se
11ff0 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f  tCookie), setCoo
12000 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  kie);.      sqli
12010 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
12020 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20  v, addr, iDb);. 
12030 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12040 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
12050 2b 31 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28  +1, sqlite3Atoi(
12060 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20  zRight));.      
12070 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
12080 65 50 31 28 76 2c 20 61 64 64 72 2b 32 2c 20 69  eP1(v, addr+2, i
12090 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
120a0 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  e3VdbeChangeP2(v
120b0 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f 6b 69  , addr+2, iCooki
120c0 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
120d0 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68 65       /* Read the
120e0 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69   specified cooki
120f0 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20  e value */.     
12100 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
12110 62 65 4f 70 4c 69 73 74 20 72 65 61 64 43 6f 6f  beOpList readCoo
12120 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  kie[] = {.      
12130 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
12140 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20  on,     0,  0,  
12150 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
12160 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64         { OP_Read
12170 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20  Cookie,      0, 
12180 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31   1,  0},    /* 1
12190 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50   */.        { OP
121a0 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 20 20  _ResultRow,     
121b0 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20    1,  1,  0}.   
121c0 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20     };.      int 
121d0 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
121e0 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
121f0 72 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f  rraySize(readCoo
12200 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b 69 65  kie), readCookie
12210 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
12220 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
12230 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20  addr, iDb);.    
12240 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
12250 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP1(v, addr+1,
12260 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
12270 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 33  ite3VdbeChangeP3
12280 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 43 6f 6f  (v, addr+1, iCoo
12290 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  kie);.      sqli
122a0 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
122b0 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  s(v, 1);.      s
122c0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
122d0 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
122e0 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20  ME_NAME, zLeft, 
122f0 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
12300 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
12310 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
12320 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
12330 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
12340 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
12350 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
12360 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20  LEOPTION_DIAGS. 
12370 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
12380 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e  A compile_option
12390 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  s.  **.  ** Retu
123a0 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20  rn the names of 
123b0 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  all compile-time
123c0 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 69 6e   options used in
123d0 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a   this build,.  *
123e0 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72  * one option per
123f0 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   row..  */.  cas
12400 65 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c  e PragTyp_COMPIL
12410 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20  E_OPTIONS: {.   
12420 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20   int i = 0;.    
12430 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74  const char *zOpt
12440 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
12450 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
12460 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
12470 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c  Mem = 1;.    sql
12480 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
12490 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
124a0 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70 69 6c 65 5f  _NAME, "compile_
124b0 6f 70 74 69 6f 6e 22 2c 20 53 51 4c 49 54 45 5f  option", SQLITE_
124c0 53 54 41 54 49 43 29 3b 0a 20 20 20 20 77 68 69  STATIC);.    whi
124d0 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69  le( (zOpt = sqli
124e0 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
124f0 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29  n_get(i++))!=0 )
12500 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
12510 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
12520 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
12530 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a 20 20 20 20  , zOpt, 0);.    
12540 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
12550 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
12560 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
12570 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
12580 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
12590 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
125a0 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66  ON_DIAGS */..#if
125b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
125c0 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  _WAL.  /*.  **  
125d0 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
125e0 65 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e  e.]wal_checkpoin
125f0 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c  t = passive|full
12600 7c 72 65 73 74 61 72 74 0a 20 20 2a 2a 0a 20 20  |restart.  **.  
12610 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 74 68  ** Checkpoint th
12620 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f  e database..  */
12630 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
12640 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20  WAL_CHECKPOINT: 
12650 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20 3d 20  {.    int iBt = 
12660 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c  (pId2->z?iDb:SQL
12670 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
12680 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65  );.    int eMode
12690 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50   = SQLITE_CHECKP
126a0 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20 20  OINT_PASSIVE;.  
126b0 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
126c0 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
126d0 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
126e0 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20   "full")==0 ){. 
126f0 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53         eMode = S
12700 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
12710 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c  _FULL;.      }el
12720 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
12730 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 72  rICmp(zRight, "r
12740 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20  estart")==0 ){. 
12750 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53         eMode = S
12760 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54  QLITE_CHECKPOINT
12770 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20 20 20  _RESTART;.      
12780 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
12790 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
127a0 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70 50 61  s(v, 3);.    pPa
127b0 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20  rse->nMem = 3;. 
127c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
127d0 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
127e0 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 62 75  OLNAME_NAME, "bu
127f0 73 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  sy", SQLITE_STAT
12800 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
12810 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
12820 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
12830 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c 49 54 45  E, "log", SQLITE
12840 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
12850 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
12860 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
12870 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63 6b 70 6f  E_NAME, "checkpo
12880 69 6e 74 65 64 22 2c 20 53 51 4c 49 54 45 5f 53  inted", SQLITE_S
12890 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 73 71 6c  TATIC);..    sql
128a0 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
128b0 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c  , OP_Checkpoint,
128c0 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b   iBt, eMode, 1);
128d0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
128e0 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
128f0 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
12900 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f   }.  break;..  /
12910 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
12920 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
12930 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  nt.  **   PRAGMA
12940 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f   wal_autocheckpo
12950 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  int = N.  **.  *
12960 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20 64 61  * Configure a da
12970 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12980 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c  n to automatical
12990 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20 61 20  ly checkpoint a 
129a0 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 61 66  database.  ** af
129b0 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69 6e 67  ter accumulating
129c0 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65   N frames in the
129d0 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79 20 66   log. Or query f
129e0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 76  or the current v
129f0 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a  alue.  ** of N..
12a00 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
12a10 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43  Typ_WAL_AUTOCHEC
12a20 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66  KPOINT: {.    if
12a30 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
12a40 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75    sqlite3_wal_au
12a50 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c  tocheckpoint(db,
12a60 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
12a70 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ght));.    }.   
12a80 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
12a90 28 70 50 61 72 73 65 2c 20 22 77 61 6c 5f 61 75  (pParse, "wal_au
12aa0 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a  tocheckpoint", .
12ab0 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61 6c 43         db->xWalC
12ac0 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33  allback==sqlite3
12ad0 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f  WalDefaultHook ?
12ae0 20 0a 20 20 20 20 20 20 20 20 20 20 20 53 51 4c   .           SQL
12af0 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64  ITE_PTR_TO_INT(d
12b00 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20 30 29  b->pWalArg) : 0)
12b10 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  ;.  }.  break;.#
12b20 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  endif..  /*.  **
12b30 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f    PRAGMA shrink_
12b40 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a  memory.  **.  **
12b50 20 54 68 69 73 20 70 72 61 67 6d 61 20 61 74 74   This pragma att
12b60 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 61 73  empts to free as
12b70 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61 73 20   much memory as 
12b80 70 6f 73 73 69 62 6c 65 20 66 72 6f 6d 20 74 68  possible from th
12b90 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 64  e.  ** current d
12ba0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
12bb0 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  on..  */.  case 
12bc0 50 72 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d  PragTyp_SHRINK_M
12bd0 45 4d 4f 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c  EMORY: {.    sql
12be0 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f  ite3_db_release_
12bf0 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20 20 20  memory(db);.    
12c00 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
12c10 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62  .  **   PRAGMA b
12c20 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a  usy_timeout.  **
12c30 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74     PRAGMA busy_t
12c40 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a  imeout = N.  **.
12c50 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65    ** Call sqlite
12c60 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64  3_busy_timeout(d
12c70 62 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e 20 74  b, N).  Return t
12c80 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d 65 6f  he current timeo
12c90 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66  ut value.  ** if
12ca0 20 6f 6e 65 20 69 73 20 73 65 74 2e 20 20 49 66   one is set.  If
12cb0 20 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c 65 72   no busy handler
12cc0 20 6f 72 20 61 20 64 69 66 66 65 72 65 6e 74 20   or a different 
12cd0 62 75 73 79 20 68 61 6e 64 6c 65 72 20 69 73 20  busy handler is 
12ce0 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20  set.  ** then 0 
12cf0 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 53 65  is returned.  Se
12d00 74 74 69 6e 67 20 74 68 65 20 62 75 73 79 5f 74  tting the busy_t
12d10 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e  imeout to 0 or n
12d20 65 67 61 74 69 76 65 0a 20 20 2a 2a 20 64 69 73  egative.  ** dis
12d30 61 62 6c 65 73 20 74 68 65 20 74 69 6d 65 6f 75  ables the timeou
12d40 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65  t..  */.  /*case
12d50 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49   PragTyp_BUSY_TI
12d60 4d 45 4f 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a  MEOUT*/ default:
12d70 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61   {.    assert( a
12d80 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d  PragmaNames[mid]
12d90 2e 65 50 72 61 67 54 79 70 3d 3d 50 72 61 67 54  .ePragTyp==PragT
12da0 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 20  yp_BUSY_TIMEOUT 
12db0 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
12dc0 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
12dd0 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
12de0 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28  db, sqlite3Atoi(
12df0 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a  zRight));.    }.
12e00 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
12e10 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 69 6d  Int(pParse, "tim
12e20 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79  eout",  db->busy
12e30 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72  Timeout);.    br
12e40 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
12e50 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66   **   PRAGMA sof
12e60 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a  t_heap_limit.  *
12e70 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f  *   PRAGMA soft_
12e80 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20  heap_limit = N. 
12e90 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71   **.  ** Call sq
12ea0 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
12eb0 6c 69 6d 69 74 36 34 28 4e 29 2e 20 20 52 65 74  limit64(N).  Ret
12ec0 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20  urn the result. 
12ed0 20 49 66 20 4e 20 69 73 20 6f 6d 69 74 74 65 64   If N is omitted
12ee0 2c 0a 20 20 2a 2a 20 75 73 65 20 2d 31 2e 0a 20  ,.  ** use -1.. 
12ef0 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
12f00 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d  yp_SOFT_HEAP_LIM
12f10 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  IT: {.    sqlite
12f20 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69  3_int64 N;.    i
12f30 66 28 20 7a 52 69 67 68 74 20 26 26 20 73 71 6c  f( zRight && sql
12f40 69 74 65 33 41 74 6f 69 36 34 28 7a 52 69 67 68  ite3Atoi64(zRigh
12f50 74 2c 20 26 4e 2c 20 31 30 30 30 30 30 30 2c 20  t, &N, 1000000, 
12f60 53 51 4c 49 54 45 5f 55 54 46 38 29 3d 3d 53 51  SQLITE_UTF8)==SQ
12f70 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
12f80 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
12f90 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a 20  ap_limit64(N);. 
12fa0 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
12fb0 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
12fc0 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69   "soft_heap_limi
12fd0 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f 66  t",  sqlite3_sof
12fe0 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d  t_heap_limit64(-
12ff0 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  1));.    break;.
13000 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65 64    }..#if defined
13010 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
13020 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
13030 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a  _TEST).  /*.  **
13040 20 52 65 70 6f 72 74 20 74 68 65 20 63 75 72 72   Report the curr
13050 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69 6c  ent state of fil
13060 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64  e logs for all d
13070 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20  atabases.  */.  
13080 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43  case PragTyp_LOC
13090 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20 20 20  K_STATUS: {.    
130a0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
130b0 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e  r *const azLockN
130c0 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ame[] = {.      
130d0 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68 61  "unlocked", "sha
130e0 72 65 64 22 2c 20 22 72 65 73 65 72 76 65 64 22  red", "reserved"
130f0 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65 78  , "pending", "ex
13100 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b 0a  clusive".    };.
13110 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73      int i;.    s
13120 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
13130 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20  Cols(v, 2);.    
13140 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32  pParse->nMem = 2
13150 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
13160 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
13170 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
13180 22 64 61 74 61 62 61 73 65 22 2c 20 53 51 4c 49  "database", SQLI
13190 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
131a0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
131b0 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
131c0 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74 61 74 75  AME_NAME, "statu
131d0 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  s", SQLITE_STATI
131e0 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  C);.    for(i=0;
131f0 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
13200 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a 70  {.      Btree *p
13210 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  Bt;.      const 
13220 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20 22  char *zState = "
13230 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20  unknown";.      
13240 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66 28  int j;.      if(
13250 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
13260 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  e==0 ) continue;
13270 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
13280 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
13290 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c  tring8, 0, 1, 0,
132a0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
132b0 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  e, P4_STATIC);. 
132c0 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61       pBt = db->a
132d0 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20  Db[i].pBt;.     
132e0 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73   if( pBt==0 || s
132f0 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
13300 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  (pBt)==0 ){.    
13310 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22 63 6c      zState = "cl
13320 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c  osed";.      }el
13330 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f 66  se if( sqlite3_f
13340 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
13350 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  i ? db->aDb[i].z
13360 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20 20  Name : 0, .     
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13390 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43  SQLITE_FCNTL_LOC
133a0 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c  KSTATE, &j)==SQL
133b0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
133c0 20 20 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f     zState = azLo
133d0 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20  ckName[j];.     
133e0 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
133f0 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
13400 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
13410 30 2c 20 7a 53 74 61 74 65 2c 20 50 34 5f 53 54  0, zState, P4_ST
13420 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
13430 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
13440 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
13450 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20  1, 2);.    }.   
13460 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
13470 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
13480 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 63 61  E_HAS_CODEC.  ca
13490 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59 3a 20  se PragTyp_KEY: 
134a0 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
134b0 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76   ) sqlite3_key_v
134c0 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68  2(db, zDb, zRigh
134d0 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  t, sqlite3Strlen
134e0 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  30(zRight));.   
134f0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61   break;.  }.  ca
13500 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45 59  se PragTyp_REKEY
13510 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
13520 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72 65 6b  ht ) sqlite3_rek
13530 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a  ey_v2(db, zDb, z
13540 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74  Right, sqlite3St
13550 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b  rlen30(zRight));
13560 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
13570 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 48    case PragTyp_H
13580 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28  EXKEY: {.    if(
13590 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
135a0 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20 20 20   u8 iByte;.     
135b0 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 63 68   int i;.      ch
135c0 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20  ar zKey[40];.   
135d0 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42 79 74     for(i=0, iByt
135e0 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b  e=0; i<sizeof(zK
135f0 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74 65 33  ey)*2 && sqlite3
13600 49 73 78 64 69 67 69 74 28 7a 52 69 67 68 74 5b  Isxdigit(zRight[
13610 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  i]); i++){.     
13620 20 20 20 69 42 79 74 65 20 3d 20 28 69 42 79 74     iByte = (iByt
13630 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48  e<<4) + sqlite3H
13640 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69  exToInt(zRight[i
13650 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ]);.        if( 
13660 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b  (i&1)!=0 ) zKey[
13670 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20  i/2] = iByte;.  
13680 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
13690 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78 66 29  (zLeft[3] & 0xf)
136a0 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20 20 20  ==0xb ){.       
136b0 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28   sqlite3_key_v2(
136c0 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69  db, zDb, zKey, i
136d0 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  /2);.      }else
136e0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
136f0 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a  3_rekey_v2(db, z
13700 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a  Db, zKey, i/2);.
13710 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
13720 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
13730 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
13740 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
13750 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
13760 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44  ITE_ENABLE_CEROD
13770 29 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ).  case PragTyp
13780 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53  _ACTIVATE_EXTENS
13790 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67 68 74  IONS: if( zRight
137a0 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   ){.#ifdef SQLIT
137b0 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20  E_HAS_CODEC.    
137c0 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49  if( sqlite3StrNI
137d0 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65  Cmp(zRight, "see
137e0 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 4)==0 ){.   
137f0 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
13800 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74 5b  ate_see(&zRight[
13810 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  4]);.    }.#endi
13820 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
13830 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20  ENABLE_CEROD.   
13840 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
13850 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63 65  ICmp(zRight, "ce
13860 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a  rod-", 6)==0 ){.
13870 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63        sqlite3_ac
13880 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a 52  tivate_cerod(&zR
13890 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a  ight[6]);.    }.
138a0 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
138b0 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20  ak;.#endif..  } 
138c0 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 50 52  /* End of the PR
138d0 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a  AGMA switch */..
138e0 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71  pragma_out:.  sq
138f0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
13900 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69 74 65  zLeft);.  sqlite
13910 33 44 62 46 72 65 65 28 64 62 2c 20 7a 52 69 67  3DbFree(db, zRig
13920 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  ht);.}..#endif /
13930 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
13940 41 47 4d 41 20 2a 2f 0a                          AGMA */.