/ Hex Artifact Content
Login

Artifact f4ff6e29c316d06bf7dffca0c8cee7c229cae42e:


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 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20  p_SYNCHRONOUS   
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 54 41 42 4c 45 5f 49 4e 46 4f 20 20 20  yp_TABLE_INFO   
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 45 4d 50 5f 53 54 4f 52 45 20 20  Typ_TEMP_STORE  
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 5f  gTyp_TEMP_STORE_
0a00: 44 49 52 45 43 54 4f 52 59 20 20 20 20 20 20 20  DIRECTORY       
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 57 41 4c 5f 41 55 54 4f 43 48  agTyp_WAL_AUTOCH
0a30: 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20  ECKPOINT        
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 43 48 45 43 4b  ragTyp_WAL_CHECK
0a60: 50 4f 49 4e 54 20 20 20 20 20 20 20 20 20 20 20  POINT           
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 41 43 54 49 56 41 54 45  PragTyp_ACTIVATE
0a90: 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20 20 20 20  _EXTENSIONS     
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 48 45 58 4b 45 59 20   PragTyp_HEXKEY 
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 4b 45 59 20 20 20  e PragTyp_KEY   
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 52 45 4b 45 59  ne PragTyp_REKEY
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 4c 4f 43 4b  ine PragTyp_LOCK
0b50: 5f 53 54 41 54 55 53 20 20 20 20 20 20 20 20 20  _STATUS         
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 50 41 52  fine PragTyp_PAR
0b80: 53 45 52 5f 54 52 41 43 45 20 20 20 20 20 20 20  SER_TRACE       
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 46 6c 61 67 5f 4e  efine PragFlag_N
0bb0: 65 65 64 53 63 68 65 6d 61 20 20 20 20 20 20 20  eedSchema       
0bc0: 20 20 20 20 30 78 30 31 0a 73 74 61 74 69 63 20      0x01.static 
0bd0: 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50 72  const struct sPr
0be0: 61 67 6d 61 4e 61 6d 65 73 20 7b 0a 20 20 63 6f  agmaNames {.  co
0bf0: 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20  nst char *const 
0c00: 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  zName;  /* Name 
0c10: 6f 66 20 70 72 61 67 6d 61 20 2a 2f 0a 20 20 75  of pragma */.  u
0c20: 38 20 65 50 72 61 67 54 79 70 3b 20 20 20 20 20  8 ePragTyp;     
0c30: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 61 67           /* Prag
0c40: 54 79 70 5f 58 58 58 20 76 61 6c 75 65 20 2a 2f  Typ_XXX value */
0c50: 0a 20 20 75 38 20 6d 50 72 61 67 46 6c 61 67 3b  .  u8 mPragFlag;
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0c70: 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 50 72 61  Zero or more Pra
0c80: 67 46 6c 61 67 5f 58 58 58 20 76 61 6c 75 65 73  gFlag_XXX values
0c90: 20 2a 2f 0a 20 20 75 33 32 20 69 41 72 67 3b 20   */.  u32 iArg; 
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cb0: 2f 2a 20 45 78 74 72 61 20 61 72 67 75 6d 65 6e  /* Extra argumen
0cc0: 74 20 2a 2f 0a 7d 20 61 50 72 61 67 6d 61 4e 61  t */.} aPragmaNa
0cd0: 6d 65 73 5b 5d 20 3d 20 7b 0a 23 69 66 20 64 65  mes[] = {.#if de
0ce0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
0cf0: 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69 6e  _CODEC) || defin
0d00: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
0d10: 5f 43 45 52 4f 44 29 0a 20 20 7b 20 2f 2a 20 7a  _CEROD).  { /* z
0d20: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 61 63  Name:     */ "ac
0d30: 74 69 76 61 74 65 5f 65 78 74 65 6e 73 69 6f 6e  tivate_extension
0d40: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
0d50: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
0d60: 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53  _ACTIVATE_EXTENS
0d70: 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72  IONS,.    /* ePr
0d80: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
0d90: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
0da0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
0db0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
0dc0: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
0dd0: 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a  ERSION_PRAGMAS).
0de0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
0df0: 20 20 2a 2f 20 22 61 70 70 6c 69 63 61 74 69 6f    */ "applicatio
0e00: 6e 5f 69 64 22 2c 0a 20 20 20 20 2f 2a 20 65 50  n_id",.    /* eP
0e10: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
0e20: 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45  Typ_HEADER_VALUE
0e30: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
0e40: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
0e50: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
0e60: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
0e70: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0e80: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
0e90: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
0ea0: 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63 75 75    */ "auto_vacuu
0eb0: 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  m",.    /* ePrag
0ec0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
0ed0: 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a 20 20  _AUTO_VACUUM,.  
0ee0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
0ef0: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
0f00: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
0f10: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
0f20: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
0f30: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0f40: 54 5f 41 55 54 4f 4d 41 54 49 43 5f 49 4e 44 45  T_AUTOMATIC_INDE
0f50: 58 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  X).  { /* zName:
0f60: 20 20 20 20 20 2a 2f 20 22 61 75 74 6f 6d 61 74       */ "automat
0f70: 69 63 5f 69 6e 64 65 78 22 2c 0a 20 20 20 20 2f  ic_index",.    /
0f80: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
0f90: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
0fa0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
0fb0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
0fc0: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
0fd0: 45 5f 41 75 74 6f 49 6e 64 65 78 20 7d 2c 0a 23  E_AutoIndex },.#
0fe0: 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61  endif.  { /* zNa
0ff0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79  me:     */ "busy
1000: 5f 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f  _timeout",.    /
1010: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1020: 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d  PragTyp_BUSY_TIM
1030: 45 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  EOUT,.    /* ePr
1040: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1050: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1060: 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66  */ 0 },.#if !def
1070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1080: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a  _PAGER_PRAGMAS).
1090: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
10a0: 20 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65    */ "cache_size
10b0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
10c0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
10d0: 43 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20  CACHE_SIZE,.    
10e0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
10f0: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
1100: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
1110: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
1120: 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e  #endif.  { /* zN
1130: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 61 63  ame:     */ "cac
1140: 68 65 5f 73 70 69 6c 6c 22 2c 0a 20 20 20 20 2f  he_spill",.    /
1150: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1160: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
1170: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
1180: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
1190: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
11a0: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 7d 2c 0a  E_CacheSpill },.
11b0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
11c0: 20 20 2a 2f 20 22 63 61 73 65 5f 73 65 6e 73 69    */ "case_sensi
11d0: 74 69 76 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20  tive_like",.    
11e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
11f0: 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45   PragTyp_CASE_SE
1200: 4e 53 49 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20  NSITIVE_LIKE,.  
1210: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
1220: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
1230: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
1240: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1250: 20 20 2a 2f 20 22 63 68 65 63 6b 70 6f 69 6e 74    */ "checkpoint
1260: 5f 66 75 6c 6c 66 73 79 6e 63 22 2c 0a 20 20 20  _fullfsync",.   
1270: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1280: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
1290: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
12a0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
12b0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
12c0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
12d0: 63 20 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e 65  c },.#if !define
12e0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  d(SQLITE_OMIT_SC
12f0: 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20  HEMA_PRAGMAS).  
1300: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1310: 2a 2f 20 22 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69  */ "collation_li
1320: 73 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  st",.    /* ePra
1330: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1340: 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54  p_COLLATION_LIST
1350: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1360: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1370: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
1380: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
1390: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
13a0: 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
13b0: 4e 5f 44 49 41 47 53 29 0a 20 20 7b 20 2f 2a 20  N_DIAGS).  { /* 
13c0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
13d0: 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 2c  ompile_options",
13e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
13f0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f  :  */ PragTyp_CO
1400: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 2c 0a 20  MPILE_OPTIONS,. 
1410: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1420: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
1430: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
1440: 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a  .#endif.  { /* z
1450: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 6f  Name:     */ "co
1460: 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a 20 20  unt_changes",.  
1470: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1480: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
1490: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
14a0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
14b0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
14c0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 7d  LITE_CountRows }
14d0: 2c 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ,.#if !defined(S
14e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
14f0: 5f 50 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c  _PRAGMAS) && SQL
1500: 49 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 7b 20 2f  ITE_OS_WIN.  { /
1510: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
1520: 22 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65  "data_store_dire
1530: 63 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65  ctory",.    /* e
1540: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1550: 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f  gTyp_DATA_STORE_
1560: 44 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f  DIRECTORY,.    /
1570: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1580: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1590: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
15a0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
15b0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48  (SQLITE_OMIT_SCH
15c0: 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  EMA_PRAGMAS).  {
15d0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
15e0: 2f 20 22 64 61 74 61 62 61 73 65 5f 6c 69 73 74  / "database_list
15f0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1600: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
1610: 44 41 54 41 42 41 53 45 5f 4c 49 53 54 2c 0a 20  DATABASE_LIST,. 
1620: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1630: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
1640: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
1650: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
1660: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
1670: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1680: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
1690: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
16a0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
16b0: 41 54 45 44 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  ATED).  { /* zNa
16c0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 61  me:     */ "defa
16d0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 22 2c  ult_cache_size",
16e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
16f0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44 45  :  */ PragTyp_DE
1700: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
1710: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1720: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
1730: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
1740: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1750: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1760: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1770: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
1780: 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
1790: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
17a0: 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  ER).  { /* zName
17b0: 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65 72 5f  :     */ "defer_
17c0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20  foreign_keys",. 
17d0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
17e0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
17f0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1800: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1810: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1820: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 7d  QLITE_DeferFKs }
1830: 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20  ,.#endif.  { /* 
1840: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65  zName:     */ "e
1850: 6d 70 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c  mpty_result_call
1860: 62 61 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65  backs",.    /* e
1870: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1880: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
1890: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
18a0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
18b0: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e       */ SQLITE_N
18c0: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23  ullCallback },.#
18d0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
18e0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a 20  TE_OMIT_UTF16). 
18f0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1900: 20 2a 2f 20 22 65 6e 63 6f 64 69 6e 67 22 2c 0a   */ "encoding",.
1910: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1920: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 45 4e 43    */ PragTyp_ENC
1930: 4f 44 49 4e 47 2c 0a 20 20 20 20 2f 2a 20 65 50  ODING,.    /* eP
1940: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
1950: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1960: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
1970: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1980: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
1990: 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
19a0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
19b0: 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e  IGGER).  { /* zN
19c0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72  ame:     */ "for
19d0: 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 22 2c  eign_key_check",
19e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
19f0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f  :  */ PragTyp_FO
1a00: 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 2c  REIGN_KEY_CHECK,
1a10: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1a20: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
1a30: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
1a40: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1a50: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
1a60: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1a70: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
1a80: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1a90: 20 20 20 20 2a 2f 20 22 66 6f 72 65 69 67 6e 5f      */ "foreign_
1aa0: 6b 65 79 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f  key_list",.    /
1ab0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1ac0: 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f  PragTyp_FOREIGN_
1ad0: 4b 45 59 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a  KEY_LIST,.    /*
1ae0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
1af0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
1b00: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
1b10: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
1b20: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1b30: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
1b40: 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
1b50: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1b60: 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 7b 20  IT_TRIGGER).  { 
1b70: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1b80: 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c   "foreign_keys",
1b90: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1ba0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1bb0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1bc0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1bd0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1be0: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
1bf0: 65 79 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  eys },.#endif.#i
1c00: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1c10: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45  E_OMIT_SCHEMA_VE
1c20: 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20  RSION_PRAGMAS). 
1c30: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1c40: 20 2a 2f 20 22 66 72 65 65 6c 69 73 74 5f 63 6f   */ "freelist_co
1c50: 75 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  unt",.    /* ePr
1c60: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1c70: 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c  yp_HEADER_VALUE,
1c80: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1c90: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
1ca0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
1cb0: 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a  },.#endif.  { /*
1cc0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1cd0: 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  full_column_name
1ce0: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
1cf0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1d00: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
1d10: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
1d20: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1d30: 20 2a 2f 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43   */ SQLITE_FullC
1d40: 6f 6c 4e 61 6d 65 73 20 7d 2c 0a 20 20 7b 20 2f  olNames },.  { /
1d50: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
1d60: 22 66 75 6c 6c 66 73 79 6e 63 22 2c 0a 20 20 20  "fullfsync",.   
1d70: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1d80: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
1d90: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1da0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
1db0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
1dc0: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 7d 2c  ITE_FullFSync },
1dd0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1de0: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 20  ITE_HAS_CODEC). 
1df0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1e00: 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a 20 20   */ "hexkey",.  
1e10: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1e20: 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45  */ PragTyp_HEXKE
1e30: 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  Y,.    /* ePragF
1e40: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1e50: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1e60: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
1e70: 65 3a 20 20 20 20 20 2a 2f 20 22 68 65 78 72 65  e:     */ "hexre
1e80: 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  key",.    /* ePr
1e90: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1ea0: 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20 20 2f  yp_HEXKEY,.    /
1eb0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1ec0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1ed0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
1ee0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1ef0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 48 45  (SQLITE_OMIT_CHE
1f00: 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  CK).  { /* zName
1f10: 3a 20 20 20 20 20 2a 2f 20 22 69 67 6e 6f 72 65  :     */ "ignore
1f20: 5f 63 68 65 63 6b 5f 63 6f 6e 73 74 72 61 69 6e  _check_constrain
1f30: 74 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ts",.    /* ePra
1f40: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1f50: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
1f60: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
1f70: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
1f80: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 49 67 6e 6f    */ SQLITE_Igno
1f90: 72 65 43 68 65 63 6b 73 20 7d 2c 0a 23 65 6e 64  reChecks },.#end
1fa0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1fb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
1fc0: 56 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20 7a  VACUUM).  { /* z
1fd0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
1fe0: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
1ff0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2000: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2010: 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55  INCREMENTAL_VACU
2020: 55 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UM,.    /* ePrag
2030: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
2040: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
2050: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2060: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2070: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2080: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
2090: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
20a0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
20b0: 64 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f  dex_info",.    /
20c0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
20d0: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e  PragTyp_INDEX_IN
20e0: 46 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  FO,.    /* ePrag
20f0: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
2100: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
2110: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2120: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
2130: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
2140: 64 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f  dex_list",.    /
2150: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2160: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49  PragTyp_INDEX_LI
2170: 53 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  ST,.    /* ePrag
2180: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
2190: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
21a0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
21b0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
21c0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
21d0: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
21e0: 59 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20  Y_CHECK).  { /* 
21f0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
2200: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c  ntegrity_check",
2210: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2220: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e  :  */ PragTyp_IN
2230: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20  TEGRITY_CHECK,. 
2240: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2250: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
2260: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
2270: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2280: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
2290: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
22a0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
22b0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
22c0: 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f      */ "journal_
22d0: 6d 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  mode",.    /* eP
22e0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
22f0: 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45  Typ_JOURNAL_MODE
2300: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2310: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
2320: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
2330: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2340: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
2350: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72  me:     */ "jour
2360: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c  nal_size_limit",
2370: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2380: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f  :  */ PragTyp_JO
2390: 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54  URNAL_SIZE_LIMIT
23a0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
23b0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
23c0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
23d0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64   },.#endif.#if d
23e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
23f0: 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20  S_CODEC).  { /* 
2400: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6b  zName:     */ "k
2410: 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ey",.    /* ePra
2420: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2430: 70 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50  p_KEY,.    /* eP
2440: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2450: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2460: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
2470: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
2480: 20 20 2a 2f 20 22 6c 65 67 61 63 79 5f 66 69 6c    */ "legacy_fil
2490: 65 5f 66 6f 72 6d 61 74 22 2c 0a 20 20 20 20 2f  e_format",.    /
24a0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
24b0: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
24c0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
24d0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
24e0: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
24f0: 45 5f 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20  E_LegacyFileFmt 
2500: 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  },.#if !defined(
2510: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
2520: 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 53 51  R_PRAGMAS) && SQ
2530: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b  LITE_ENABLE_LOCK
2540: 49 4e 47 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a  ING_STYLE.  { /*
2550: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2560: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22  lock_proxy_file"
2570: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2580: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c  p:  */ PragTyp_L
2590: 4f 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a  OCK_PROXY_FILE,.
25a0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
25b0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
25c0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
25d0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ,.#endif.#if def
25e0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
25f0: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
2600: 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f  LITE_TEST).  { /
2610: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2620: 22 6c 6f 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20  "lock_status",. 
2630: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2640: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b   */ PragTyp_LOCK
2650: 5f 53 54 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20  _STATUS,.    /* 
2660: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
2670: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2680: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
2690: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
26a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
26b0: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
26c0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
26d0: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20  locking_mode",. 
26e0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
26f0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b   */ PragTyp_LOCK
2700: 49 4e 47 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a  ING_MODE,.    /*
2710: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
2720: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
2730: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20      */ 0 },.  { 
2740: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2750: 20 22 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74   "max_page_count
2760: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2770: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2780: 50 41 47 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20  PAGE_COUNT,.    
2790: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
27a0: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
27b0: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
27c0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
27d0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
27e0: 20 20 2a 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22    */ "mmap_size"
27f0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2800: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d  p:  */ PragTyp_M
2810: 4d 41 50 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a  MAP_SIZE,.    /*
2820: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
2830: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
2840: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20      */ 0 },.  { 
2850: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2860: 20 22 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20   "page_count",. 
2870: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2880: 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47 45   */ PragTyp_PAGE
2890: 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65  _COUNT,.    /* e
28a0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
28b0: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
28c0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
28d0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20      */ 0 },.  { 
28e0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
28f0: 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 0a 20 20   "page_size",.  
2900: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2910: 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f  */ PragTyp_PAGE_
2920: 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  SIZE,.    /* ePr
2930: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2940: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2950: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2960: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2970: 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20  E_DEBUG).  { /* 
2980: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2990: 61 72 73 65 72 5f 74 72 61 63 65 22 2c 0a 20 20  arser_trace",.  
29a0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
29b0: 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 52 53 45  */ PragTyp_PARSE
29c0: 52 5f 54 52 41 43 45 2c 0a 20 20 20 20 2f 2a 20  R_TRACE,.    /* 
29d0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
29e0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
29f0: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
2a00: 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  f.  { /* zName: 
2a10: 20 20 20 20 2a 2f 20 22 71 75 65 72 79 5f 6f 6e      */ "query_on
2a20: 6c 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ly",.    /* ePra
2a30: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2a40: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
2a50: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
2a60: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2a70: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 51 75 65 72    */ SQLITE_Quer
2a80: 79 4f 6e 6c 79 20 7d 2c 0a 23 69 66 20 21 64 65  yOnly },.#if !de
2a90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2aa0: 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2ab0: 4b 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  K).  { /* zName:
2ac0: 20 20 20 20 20 2a 2f 20 22 71 75 69 63 6b 5f 63       */ "quick_c
2ad0: 68 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65 50  heck",.    /* eP
2ae0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2af0: 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  Typ_INTEGRITY_CH
2b00: 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ECK,.    /* ePra
2b10: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2b20: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2b30: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2b40: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
2b50: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
2b60: 20 20 2a 2f 20 22 72 65 61 64 5f 75 6e 63 6f 6d    */ "read_uncom
2b70: 6d 69 74 74 65 64 22 2c 0a 20 20 20 20 2f 2a 20  mitted",.    /* 
2b80: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2b90: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
2ba0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2bb0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2bc0: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
2bd0: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20  ReadUncommitted 
2be0: 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  },.  { /* zName:
2bf0: 20 20 20 20 20 2a 2f 20 22 72 65 63 75 72 73 69       */ "recursi
2c00: 76 65 5f 74 72 69 67 67 65 72 73 22 2c 0a 20 20  ve_triggers",.  
2c10: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2c20: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
2c30: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2c40: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2c50: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
2c60: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
2c70: 20 7d 2c 0a 23 69 66 20 64 65 66 69 6e 65 64 28   },.#if defined(
2c80: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
2c90: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2ca0: 20 20 20 20 2a 2f 20 22 72 65 6b 65 79 22 2c 0a      */ "rekey",.
2cb0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2cc0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 52 45 4b    */ PragTyp_REK
2cd0: 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  EY,.    /* ePrag
2ce0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2cf0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2d00: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b   0 },.#endif.  {
2d10: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2d20: 2f 20 22 72 65 76 65 72 73 65 5f 75 6e 6f 72 64  / "reverse_unord
2d30: 65 72 65 64 5f 73 65 6c 65 63 74 73 22 2c 0a 20  ered_selects",. 
2d40: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2d50: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2d60: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2d70: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
2d80: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
2d90: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
2da0: 65 72 20 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e  er },.#if !defin
2db0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ed(SQLITE_OMIT_S
2dc0: 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52  CHEMA_VERSION_PR
2dd0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
2de0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 63 68  ame:     */ "sch
2df0: 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 0a 20 20  ema_version",.  
2e00: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2e10: 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 41 44 45  */ PragTyp_HEADE
2e20: 52 5f 56 41 4c 55 45 2c 0a 20 20 20 20 2f 2a 20  R_VALUE,.    /* 
2e30: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
2e40: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2e50: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
2e60: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2e70: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
2e80: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
2e90: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2ea0: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22 2c 0a  secure_delete",.
2eb0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2ec0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 45 43    */ PragTyp_SEC
2ed0: 55 52 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20  URE_DELETE,.    
2ee0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2ef0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2f00: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
2f10: 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ndif.  { /* zNam
2f20: 65 3a 20 20 20 20 20 2a 2f 20 22 73 68 6f 72 74  e:     */ "short
2f30: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a  _column_names",.
2f40: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2f50: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
2f60: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
2f70: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2f80: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2f90: 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e  SQLITE_ShortColN
2fa0: 61 6d 65 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  ames },.  { /* z
2fb0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 68  Name:     */ "sh
2fc0: 72 69 6e 6b 5f 6d 65 6d 6f 72 79 22 2c 0a 20 20  rink_memory",.  
2fd0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2fe0: 2a 2f 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e  */ PragTyp_SHRIN
2ff0: 4b 5f 4d 45 4d 4f 52 59 2c 0a 20 20 20 20 2f 2a  K_MEMORY,.    /*
3000: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3010: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3020: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20      */ 0 },.  { 
3030: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3040: 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69   "soft_heap_limi
3050: 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  t",.    /* ePrag
3060: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3070: 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54  _SOFT_HEAP_LIMIT
3080: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3090: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
30a0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
30b0: 20 7d 2c 0a 23 69 66 20 64 65 66 69 6e 65 64 28   },.#if defined(
30c0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
30d0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
30e0: 2a 2f 20 22 73 71 6c 5f 74 72 61 63 65 22 2c 0a  */ "sql_trace",.
30f0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3100: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
3110: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
3120: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3130: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3140: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20  SQLITE_SqlTrace 
3150: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
3160: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3170: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3180: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
3190: 20 20 20 20 2a 2f 20 22 73 79 6e 63 68 72 6f 6e      */ "synchron
31a0: 6f 75 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ous",.    /* ePr
31b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
31c0: 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 2c 0a  yp_SYNCHRONOUS,.
31d0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
31e0: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
31f0: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
3200: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
3210: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
3220: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
3230: 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d  MIT_SCHEMA_PRAGM
3240: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
3250: 3a 20 20 20 20 20 2a 2f 20 22 74 61 62 6c 65 5f  :     */ "table_
3260: 69 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a 20 65 50  info",.    /* eP
3270: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3280: 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 2c 0a  Typ_TABLE_INFO,.
3290: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
32a0: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
32b0: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
32c0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
32d0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
32e0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
32f0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
3300: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
3310: 20 20 20 20 20 2a 2f 20 22 74 65 6d 70 5f 73 74       */ "temp_st
3320: 6f 72 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ore",.    /* ePr
3330: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3340: 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 2c 0a 20  yp_TEMP_STORE,. 
3350: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3360: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3370: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
3380: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3390: 20 20 20 2a 2f 20 22 74 65 6d 70 5f 73 74 6f 72     */ "temp_stor
33a0: 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a 20 20  e_directory",.  
33b0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
33c0: 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  */ PragTyp_TEMP_
33d0: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 2c  STORE_DIRECTORY,
33e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
33f0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3400: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
3410: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
3420: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3430: 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  IT_SCHEMA_VERSIO
3440: 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  N_PRAGMAS).  { /
3450: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3460: 22 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 2c 0a  "user_version",.
3470: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3480: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 41    */ PragTyp_HEA
3490: 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20 20 20 2f  DER_VALUE,.    /
34a0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
34b0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
34c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
34d0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
34e0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
34f0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3500: 2a 2f 20 22 76 64 62 65 5f 61 64 64 6f 70 74 72  */ "vdbe_addoptr
3510: 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ace",.    /* ePr
3520: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3530: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3540: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3550: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3560: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62     */ SQLITE_Vdb
3570: 65 41 64 64 6f 70 54 72 61 63 65 20 7d 2c 0a 20  eAddopTrace },. 
3580: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
3590: 20 2a 2f 20 22 76 64 62 65 5f 64 65 62 75 67 22   */ "vdbe_debug"
35a0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
35b0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
35c0: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
35d0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
35e0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
35f0: 2f 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  / SQLITE_SqlTrac
3600: 65 7c 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e|SQLITE_VdbeLis
3610: 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65  ting|SQLITE_Vdbe
3620: 54 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20  Trace },.  { /* 
3630: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76  zName:     */ "v
3640: 64 62 65 5f 6c 69 73 74 69 6e 67 22 2c 0a 20 20  dbe_listing",.  
3650: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3660: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
3670: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
3680: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3690: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
36a0: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
36b0: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
36c0: 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65 5f 74  :     */ "vdbe_t
36d0: 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  race",.    /* eP
36e0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
36f0: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
3700: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3710: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3720: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64      */ SQLITE_Vd
3730: 62 65 54 72 61 63 65 20 7d 2c 0a 23 65 6e 64 69  beTrace },.#endi
3740: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
3750: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 29 0a  QLITE_OMIT_WAL).
3760: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3770: 20 20 2a 2f 20 22 77 61 6c 5f 61 75 74 6f 63 68    */ "wal_autoch
3780: 65 63 6b 70 6f 69 6e 74 22 2c 0a 20 20 20 20 2f  eckpoint",.    /
3790: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
37a0: 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f  PragTyp_WAL_AUTO
37b0: 43 48 45 43 4b 50 4f 49 4e 54 2c 0a 20 20 20 20  CHECKPOINT,.    
37c0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
37d0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
37e0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20        */ 0 },.  
37f0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3800: 2a 2f 20 22 77 61 6c 5f 63 68 65 63 6b 70 6f 69  */ "wal_checkpoi
3810: 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  nt",.    /* ePra
3820: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3830: 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54  p_WAL_CHECKPOINT
3840: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3850: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
3860: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
3870: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3880: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b   0 },.#endif.  {
3890: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
38a0: 2f 20 22 77 72 69 74 61 62 6c 65 5f 73 63 68 65  / "writable_sche
38b0: 6d 61 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ma",.    /* ePra
38c0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
38d0: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
38e0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
38f0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3900: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 57 72 69 74    */ SQLITE_Writ
3910: 65 53 63 68 65 6d 61 7c 53 51 4c 49 54 45 5f 52  eSchema|SQLITE_R
3920: 65 63 6f 76 65 72 79 4d 6f 64 65 20 7d 2c 0a 7d  ecoveryMode },.}
3930: 3b 0a 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70  ;./* Number of p
3940: 72 61 67 6d 61 73 3a 20 35 35 20 6f 6e 20 62 79  ragmas: 55 on by
3950: 20 64 65 66 61 75 6c 74 2c 20 36 37 20 74 6f 74   default, 67 tot
3960: 61 6c 2e 20 2a 2f 0a 2f 2a 20 45 6e 64 20 6f 66  al. */./* End of
3970: 20 74 68 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   the automatical
3980: 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70 72 61  ly generated pra
3990: 67 6d 61 20 74 61 62 6c 65 2e 0a 2a 2a 2a 2a 2a  gma table..*****
39a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
39b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
39c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
39d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
39e0: 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 49  ******/../*.** I
39f0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
3a00: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 73  en string as a s
3a10: 61 66 65 74 79 20 6c 65 76 65 6c 2e 20 20 52 65  afety level.  Re
3a20: 74 75 72 6e 20 30 20 66 6f 72 20 4f 46 46 2c 0a  turn 0 for OFF,.
3a30: 2a 2a 20 31 20 66 6f 72 20 4f 4e 20 6f 72 20 4e  ** 1 for ON or N
3a40: 4f 52 4d 41 4c 20 61 6e 64 20 32 20 66 6f 72 20  ORMAL and 2 for 
3a50: 46 55 4c 4c 2e 20 20 52 65 74 75 72 6e 20 31 20  FULL.  Return 1 
3a60: 66 6f 72 20 61 6e 20 65 6d 70 74 79 20 6f 72 20  for an empty or 
3a70: 0a 2a 2a 20 75 6e 72 65 63 6f 67 6e 69 7a 65 64  .** unrecognized
3a80: 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74   string argument
3a90: 2e 20 20 54 68 65 20 46 55 4c 4c 20 6f 70 74 69  .  The FULL opti
3aa0: 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77 65 64  on is disallowed
3ab0: 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69 74 46  .** if the omitF
3ac0: 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20 69 74  ull parameter it
3ad0: 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74   1..**.** Note t
3ae0: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 72  hat the values r
3af0: 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e 65 20  eturned are one 
3b00: 6c 65 73 73 20 74 68 61 74 20 74 68 65 20 76 61  less that the va
3b10: 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73 68 6f  lues that.** sho
3b20: 75 6c 64 20 62 65 20 70 61 73 73 65 64 20 69 6e  uld be passed in
3b30: 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65 65 53  to sqlite3BtreeS
3b40: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 29 2e  etSafetyLevel().
3b50: 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a 2a 2a    The is done.**
3b60: 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65 67 61   to support lega
3b70: 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20 54 68  cy SQL code.  Th
3b80: 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c 20 75  e safety level u
3b90: 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c 65 61  sed to be boolea
3ba0: 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72 20 73  n.** and older s
3bb0: 63 72 69 70 74 73 20 6d 61 79 20 68 61 76 65 20  cripts may have 
3bc0: 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30 20 66  used numbers 0 f
3bd0: 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66 6f 72  or OFF and 1 for
3be0: 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75   ON..*/.static u
3bf0: 38 20 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c  8 getSafetyLevel
3c00: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
3c10: 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20 69 6e  int omitFull, in
3c20: 74 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20 20  t dflt){.       
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c40: 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36 37        /* 1234567
3c50: 38 39 20 31 32 33 34 35 36 37 38 39 20 2a 2f 0a  89 123456789 */.
3c60: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
3c70: 68 61 72 20 7a 54 65 78 74 5b 5d 20 3d 20 22 6f  har zText[] = "o
3c80: 6e 6f 66 66 61 6c 73 65 79 65 73 74 72 75 65 66  noffalseyestruef
3c90: 75 6c 6c 22 3b 0a 20 20 73 74 61 74 69 63 20 63  ull";.  static c
3ca0: 6f 6e 73 74 20 75 38 20 69 4f 66 66 73 65 74 5b  onst u8 iOffset[
3cb0: 5d 20 3d 20 7b 30 2c 20 31 2c 20 32 2c 20 34 2c  ] = {0, 1, 2, 4,
3cc0: 20 39 2c 20 31 32 2c 20 31 36 7d 3b 0a 20 20 73   9, 12, 16};.  s
3cd0: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69  tatic const u8 i
3ce0: 4c 65 6e 67 74 68 5b 5d 20 3d 20 7b 32 2c 20 32  Length[] = {2, 2
3cf0: 2c 20 33 2c 20 35 2c 20 33 2c 20 34 2c 20 34 7d  , 3, 5, 3, 4, 4}
3d00: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
3d10: 20 75 38 20 69 56 61 6c 75 65 5b 5d 20 3d 20 20   u8 iValue[] =  
3d20: 7b 31 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20  {1, 0, 0, 0, 1, 
3d30: 31 2c 20 32 7d 3b 0a 20 20 69 6e 74 20 69 2c 20  1, 2};.  int i, 
3d40: 6e 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  n;.  if( sqlite3
3d50: 49 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20  Isdigit(*z) ){. 
3d60: 20 20 20 72 65 74 75 72 6e 20 28 75 38 29 73 71     return (u8)sq
3d70: 6c 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a 20 20  lite3Atoi(z);.  
3d80: 7d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 53  }.  n = sqlite3S
3d90: 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20 20 66 6f  trlen30(z);.  fo
3da0: 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
3db0: 7a 65 28 69 4c 65 6e 67 74 68 29 2d 6f 6d 69 74  ze(iLength)-omit
3dc0: 46 75 6c 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  Full; i++){.    
3dd0: 69 66 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d 3d  if( iLength[i]==
3de0: 6e 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 4e  n && sqlite3StrN
3df0: 49 43 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66 66  ICmp(&zText[iOff
3e00: 73 65 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30 20  set[i]],z,n)==0 
3e10: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ){.      return 
3e20: 69 56 61 6c 75 65 5b 69 5d 3b 0a 20 20 20 20 7d  iValue[i];.    }
3e30: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 64 66  .  }.  return df
3e40: 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  lt;.}../*.** Int
3e50: 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e  erpret the given
3e60: 20 73 74 72 69 6e 67 20 61 73 20 61 20 62 6f 6f   string as a boo
3e70: 6c 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a 75  lean value..*/.u
3e80: 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
3e90: 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
3ea0: 7a 2c 20 69 6e 74 20 64 66 6c 74 29 7b 0a 20 20  z, int dflt){.  
3eb0: 72 65 74 75 72 6e 20 67 65 74 53 61 66 65 74 79  return getSafety
3ec0: 4c 65 76 65 6c 28 7a 2c 31 2c 64 66 6c 74 29 21  Level(z,1,dflt)!
3ed0: 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 73 71  =0;.}../* The sq
3ee0: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
3ef0: 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  ) function is us
3f00: 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75  ed by other modu
3f10: 6c 65 73 20 62 75 74 20 74 68 65 0a 2a 2a 20 72  les but the.** r
3f20: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 69 73  emainder of this
3f30: 20 66 69 6c 65 20 69 73 20 73 70 65 63 69 66 69   file is specifi
3f40: 63 20 74 6f 20 50 52 41 47 4d 41 20 70 72 6f 63  c to PRAGMA proc
3f50: 65 73 73 69 6e 67 2e 20 20 53 6f 20 6f 6d 69 74  essing.  So omit
3f60: 0a 2a 2a 20 74 68 65 20 72 65 73 74 20 6f 66 20  .** the rest of 
3f70: 74 68 65 20 66 69 6c 65 20 69 66 20 50 52 41 47  the file if PRAG
3f80: 4d 41 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20  MAs are omitted 
3f90: 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
3fa0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
3fb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
3fc0: 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  MA)../*.** Inter
3fd0: 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20 73  pret the given s
3fe0: 74 72 69 6e 67 20 61 73 20 61 20 6c 6f 63 6b 69  tring as a locki
3ff0: 6e 67 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a  ng mode value..*
4000: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
4010: 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 63 6f 6e 73  LockingMode(cons
4020: 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66  t char *z){.  if
4030: 28 20 7a 20 29 7b 0a 20 20 20 20 69 66 28 20 30  ( z ){.    if( 0
4040: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
4050: 28 7a 2c 20 22 65 78 63 6c 75 73 69 76 65 22 29  (z, "exclusive")
4060: 20 29 20 72 65 74 75 72 6e 20 50 41 47 45 52 5f   ) return PAGER_
4070: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c  LOCKINGMODE_EXCL
4080: 55 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 30  USIVE;.    if( 0
4090: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
40a0: 28 7a 2c 20 22 6e 6f 72 6d 61 6c 22 29 20 29 20  (z, "normal") ) 
40b0: 72 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43  return PAGER_LOC
40c0: 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 3b  KINGMODE_NORMAL;
40d0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 50 41  .  }.  return PA
40e0: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
40f0: 51 55 45 52 59 3b 0a 7d 0a 0a 23 69 66 6e 64 65  QUERY;.}..#ifnde
4100: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
4110: 54 4f 56 41 43 55 55 4d 0a 2f 2a 0a 2a 2a 20 49  TOVACUUM./*.** I
4120: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
4130: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20  en string as an 
4140: 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65  auto-vacuum mode
4150: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
4160: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 69  e following stri
4170: 6e 67 73 2c 20 22 6e 6f 6e 65 22 2c 20 22 66 75  ngs, "none", "fu
4180: 6c 6c 22 20 61 6e 64 20 22 69 6e 63 72 65 6d 65  ll" and "increme
4190: 6e 74 61 6c 22 20 61 72 65 20 0a 2a 2a 20 61 63  ntal" are .** ac
41a0: 63 65 70 74 61 62 6c 65 2c 20 61 73 20 61 72 65  ceptable, as are
41b0: 20 74 68 65 69 72 20 6e 75 6d 65 72 69 63 20 65   their numeric e
41c0: 71 75 69 76 61 6c 65 6e 74 73 3a 20 30 2c 20 31  quivalents: 0, 1
41d0: 20 61 6e 64 20 32 20 72 65 73 70 65 63 74 69 76   and 2 respectiv
41e0: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ely..*/.static i
41f0: 6e 74 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d  nt getAutoVacuum
4200: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
4210: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20  .  int i;.  if( 
4220: 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d  0==sqlite3StrICm
4230: 70 28 7a 2c 20 22 6e 6f 6e 65 22 29 20 29 20 72  p(z, "none") ) r
4240: 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55 54 4f  eturn BTREE_AUTO
4250: 56 41 43 55 55 4d 5f 4e 4f 4e 45 3b 0a 20 20 69  VACUUM_NONE;.  i
4260: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
4270: 49 43 6d 70 28 7a 2c 20 22 66 75 6c 6c 22 29 20  ICmp(z, "full") 
4280: 29 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41  ) return BTREE_A
4290: 55 54 4f 56 41 43 55 55 4d 5f 46 55 4c 4c 3b 0a  UTOVACUUM_FULL;.
42a0: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
42b0: 53 74 72 49 43 6d 70 28 7a 2c 20 22 69 6e 63 72  StrICmp(z, "incr
42c0: 65 6d 65 6e 74 61 6c 22 29 20 29 20 72 65 74 75  emental") ) retu
42d0: 72 6e 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43  rn BTREE_AUTOVAC
42e0: 55 55 4d 5f 49 4e 43 52 3b 0a 20 20 69 20 3d 20  UUM_INCR;.  i = 
42f0: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a  sqlite3Atoi(z);.
4300: 20 20 72 65 74 75 72 6e 20 28 75 38 29 28 28 69    return (u8)((i
4310: 3e 3d 30 26 26 69 3c 3d 32 29 3f 69 3a 30 29 3b  >=0&&i<=2)?i:0);
4320: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e  .}.#endif /* ifn
4330: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4340: 41 55 54 4f 56 41 43 55 55 4d 20 2a 2f 0a 0a 23  AUTOVACUUM */..#
4350: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4360: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
4370: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
4380: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
4390: 67 20 61 73 20 61 20 74 65 6d 70 20 64 62 20 6c  g as a temp db l
43a0: 6f 63 61 74 69 6f 6e 2e 20 52 65 74 75 72 6e 20  ocation. Return 
43b0: 31 20 66 6f 72 20 66 69 6c 65 0a 2a 2a 20 62 61  1 for file.** ba
43c0: 63 6b 65 64 20 74 65 6d 70 6f 72 61 72 79 20 64  cked temporary d
43d0: 61 74 61 62 61 73 65 73 2c 20 32 20 66 6f 72 20  atabases, 2 for 
43e0: 74 68 65 20 52 65 64 2d 42 6c 61 63 6b 20 74 72  the Red-Black tr
43f0: 65 65 20 69 6e 20 6d 65 6d 6f 72 79 20 64 61 74  ee in memory dat
4400: 61 62 61 73 65 0a 2a 2a 20 61 6e 64 20 30 20 74  abase.** and 0 t
4410: 6f 20 75 73 65 20 74 68 65 20 63 6f 6d 70 69 6c  o use the compil
4420: 65 2d 74 69 6d 65 20 64 65 66 61 75 6c 74 2e 0a  e-time default..
4430: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65  */.static int ge
4440: 74 54 65 6d 70 53 74 6f 72 65 28 63 6f 6e 73 74  tTempStore(const
4450: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28   char *z){.  if(
4460: 20 7a 5b 30 5d 3e 3d 27 30 27 20 26 26 20 7a 5b   z[0]>='0' && z[
4470: 30 5d 3c 3d 27 32 27 20 29 7b 0a 20 20 20 20 72  0]<='2' ){.    r
4480: 65 74 75 72 6e 20 7a 5b 30 5d 20 2d 20 27 30 27  eturn z[0] - '0'
4490: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71  ;.  }else if( sq
44a0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
44b0: 22 66 69 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20  "file")==0 ){.  
44c0: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65    return 1;.  }e
44d0: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
44e0: 74 72 49 43 6d 70 28 7a 2c 20 22 6d 65 6d 6f 72  trICmp(z, "memor
44f0: 79 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65  y")==0 ){.    re
4500: 74 75 72 6e 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  turn 2;.  }else{
4510: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
4520: 20 7d 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53   }.}.#endif /* S
4530: 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47  QLITE_PAGER_PRAG
4540: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
4550: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
4560: 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20  R_PRAGMAS./*.** 
4570: 49 6e 76 61 6c 69 64 61 74 65 20 74 65 6d 70 20  Invalidate temp 
4580: 73 74 6f 72 61 67 65 2c 20 65 69 74 68 65 72 20  storage, either 
4590: 77 68 65 6e 20 74 68 65 20 74 65 6d 70 20 73 74  when the temp st
45a0: 6f 72 61 67 65 20 69 73 20 63 68 61 6e 67 65 64  orage is changed
45b0: 0a 2a 2a 20 66 72 6f 6d 20 64 65 66 61 75 6c 74  .** from default
45c0: 2c 20 6f 72 20 77 68 65 6e 20 27 66 69 6c 65 27  , or when 'file'
45d0: 20 61 6e 64 20 74 68 65 20 74 65 6d 70 5f 73 74   and the temp_st
45e0: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 68 61  ore_directory ha
45f0: 73 20 63 68 61 6e 67 65 64 0a 2a 2f 0a 73 74 61  s changed.*/.sta
4600: 74 69 63 20 69 6e 74 20 69 6e 76 61 6c 69 64 61  tic int invalida
4610: 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 50 61  teTempStorage(Pa
4620: 72 73 65 20 2a 70 50 61 72 73 65 29 7b 0a 20 20  rse *pParse){.  
4630: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50  sqlite3 *db = pP
4640: 61 72 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20  arse->db;.  if( 
4650: 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 21 3d  db->aDb[1].pBt!=
4660: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62  0 ){.    if( !db
4670: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20  ->autoCommit || 
4680: 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
4690: 52 65 61 64 54 72 61 6e 73 28 64 62 2d 3e 61 44  ReadTrans(db->aD
46a0: 62 5b 31 5d 2e 70 42 74 29 20 29 7b 0a 20 20 20  b[1].pBt) ){.   
46b0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
46c0: 73 67 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70  sg(pParse, "temp
46d0: 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 63 61  orary storage ca
46e0: 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20  nnot be changed 
46f0: 22 0a 20 20 20 20 20 20 20 20 22 66 72 6f 6d 20  ".        "from 
4700: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
4710: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 72 65  tion");.      re
4720: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4730: 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  R;.    }.    sql
4740: 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 28 64  ite3BtreeClose(d
4750: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 3b 0a  b->aDb[1].pBt);.
4760: 20 20 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 70      db->aDb[1].p
4770: 42 74 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  Bt = 0;.    sqli
4780: 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
4790: 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
47a0: 62 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  b);.  }.  return
47b0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65   SQLITE_OK;.}.#e
47c0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50  ndif /* SQLITE_P
47d0: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
47e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
47f0: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
4800: 41 53 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  AS./*.** If the 
4810: 54 45 4d 50 20 64 61 74 61 62 61 73 65 20 69 73  TEMP database is
4820: 20 6f 70 65 6e 2c 20 63 6c 6f 73 65 20 69 74 20   open, close it 
4830: 61 6e 64 20 6d 61 72 6b 20 74 68 65 20 64 61 74  and mark the dat
4840: 61 62 61 73 65 20 73 63 68 65 6d 61 0a 2a 2a 20  abase schema.** 
4850: 61 73 20 6e 65 65 64 69 6e 67 20 72 65 6c 6f 61  as needing reloa
4860: 64 69 6e 67 2e 20 20 54 68 69 73 20 6d 75 73 74  ding.  This must
4870: 20 62 65 20 64 6f 6e 65 20 77 68 65 6e 20 75 73   be done when us
4880: 69 6e 67 20 74 68 65 20 53 51 4c 49 54 45 5f 54  ing the SQLITE_T
4890: 45 4d 50 5f 53 54 4f 52 45 0a 2a 2a 20 6f 72 20  EMP_STORE.** or 
48a0: 44 45 46 41 55 4c 54 5f 54 45 4d 50 5f 53 54 4f  DEFAULT_TEMP_STO
48b0: 52 45 20 70 72 61 67 6d 61 73 2e 0a 2a 2f 0a 73  RE pragmas..*/.s
48c0: 74 61 74 69 63 20 69 6e 74 20 63 68 61 6e 67 65  tatic int change
48d0: 54 65 6d 70 53 74 6f 72 61 67 65 28 50 61 72 73  TempStorage(Pars
48e0: 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
48f0: 20 63 68 61 72 20 2a 7a 53 74 6f 72 61 67 65 54   char *zStorageT
4900: 79 70 65 29 7b 0a 20 20 69 6e 74 20 74 73 20 3d  ype){.  int ts =
4910: 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28 7a 53   getTempStore(zS
4920: 74 6f 72 61 67 65 54 79 70 65 29 3b 0a 20 20 73  torageType);.  s
4930: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61  qlite3 *db = pPa
4940: 72 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64  rse->db;.  if( d
4950: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 74  b->temp_store==t
4960: 73 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  s ) return SQLIT
4970: 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 69 6e 76 61  E_OK;.  if( inva
4980: 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67  lidateTempStorag
4990: 65 28 20 70 50 61 72 73 65 20 29 20 21 3d 20 53  e( pParse ) != S
49a0: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
49b0: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
49c0: 52 4f 52 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 74  ROR;.  }.  db->t
49d0: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 28 75 38 29  emp_store = (u8)
49e0: 74 73 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  ts;.  return SQL
49f0: 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  ITE_OK;.}.#endif
4a00: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
4a10: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 2f 2a 0a  _PRAGMAS */../*.
4a20: 2a 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65  ** Generate code
4a30: 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e   to return a sin
4a40: 67 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  gle integer valu
4a50: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  e..*/.static voi
4a60: 64 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e  d returnSingleIn
4a70: 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  t(Parse *pParse,
4a80: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61   const char *zLa
4a90: 62 65 6c 2c 20 69 36 34 20 76 61 6c 75 65 29 7b  bel, i64 value){
4aa0: 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c  .  Vdbe *v = sql
4ab0: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
4ac0: 73 65 29 3b 0a 20 20 69 6e 74 20 6d 65 6d 20 3d  se);.  int mem =
4ad0: 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b   ++pParse->nMem;
4ae0: 0a 20 20 69 36 34 20 2a 70 49 36 34 20 3d 20 73  .  i64 *pI64 = s
4af0: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
4b00: 77 28 70 50 61 72 73 65 2d 3e 64 62 2c 20 73 69  w(pParse->db, si
4b10: 7a 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20  zeof(value));.  
4b20: 69 66 28 20 70 49 36 34 20 29 7b 0a 20 20 20 20  if( pI64 ){.    
4b30: 6d 65 6d 63 70 79 28 70 49 36 34 2c 20 26 76 61  memcpy(pI64, &va
4b40: 6c 75 65 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75  lue, sizeof(valu
4b50: 65 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  e));.  }.  sqlit
4b60: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
4b70: 4f 50 5f 49 6e 74 36 34 2c 20 30 2c 20 6d 65 6d  OP_Int64, 0, mem
4b80: 2c 20 30 2c 20 28 63 68 61 72 2a 29 70 49 36 34  , 0, (char*)pI64
4b90: 2c 20 50 34 5f 49 4e 54 36 34 29 3b 0a 20 20 73  , P4_INT64);.  s
4ba0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
4bb0: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 73 71  Cols(v, 1);.  sq
4bc0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
4bd0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
4be0: 45 5f 4e 41 4d 45 2c 20 7a 4c 61 62 65 6c 2c 20  E_NAME, zLabel, 
4bf0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
4c00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
4c10: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
4c20: 52 6f 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 7d 0a  Row, mem, 1);.}.
4c30: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
4c40: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 61 6e 64  safety_level and
4c50: 20 70 61 67 65 72 20 66 6c 61 67 73 20 66 6f 72   pager flags for
4c60: 20 70 61 67 65 72 20 69 44 62 2e 20 20 4f 72 20   pager iDb.  Or 
4c70: 69 66 20 69 44 62 3c 30 0a 2a 2a 20 73 65 74 20  if iDb<0.** set 
4c80: 74 68 65 73 65 20 76 61 6c 75 65 73 20 66 6f 72  these values for
4c90: 20 61 6c 6c 20 70 61 67 65 72 73 2e 0a 2a 2f 0a   all pagers..*/.
4ca0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4cb0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
4cc0: 53 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65  S.static void se
4cd0: 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 73  tAllPagerFlags(s
4ce0: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
4cf0: 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
4d00: 74 20 29 7b 0a 20 20 20 20 44 62 20 2a 70 44 62  t ){.    Db *pDb
4d10: 20 3d 20 64 62 2d 3e 61 44 62 3b 0a 20 20 20 20   = db->aDb;.    
4d20: 69 6e 74 20 6e 20 3d 20 64 62 2d 3e 6e 44 62 3b  int n = db->nDb;
4d30: 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c  .    assert( SQL
4d40: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 3d 3d 50  ITE_FullFSync==P
4d50: 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 20 29  AGER_FULLFSYNC )
4d60: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51  ;.    assert( SQ
4d70: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
4d80: 6e 63 3d 3d 50 41 47 45 52 5f 43 4b 50 54 5f 46  nc==PAGER_CKPT_F
4d90: 55 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20  ULLFSYNC );.    
4da0: 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43  assert( SQLITE_C
4db0: 61 63 68 65 53 70 69 6c 6c 3d 3d 50 41 47 45 52  acheSpill==PAGER
4dc0: 5f 43 41 43 48 45 53 50 49 4c 4c 20 29 3b 0a 20  _CACHESPILL );. 
4dd0: 20 20 20 61 73 73 65 72 74 28 20 28 50 41 47 45     assert( (PAGE
4de0: 52 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41  R_FULLFSYNC | PA
4df0: 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59  GER_CKPT_FULLFSY
4e00: 4e 43 20 7c 20 50 41 47 45 52 5f 43 41 43 48 45  NC | PAGER_CACHE
4e10: 53 50 49 4c 4c 29 0a 20 20 20 20 20 20 20 20 20  SPILL).         
4e20: 20 20 20 20 3d 3d 20 20 50 41 47 45 52 5f 46 4c      ==  PAGER_FL
4e30: 41 47 53 5f 4d 41 53 4b 20 29 3b 0a 20 20 20 20  AGS_MASK );.    
4e40: 61 73 73 65 72 74 28 20 28 70 44 62 2d 3e 73 61  assert( (pDb->sa
4e50: 66 65 74 79 5f 6c 65 76 65 6c 20 26 20 50 41 47  fety_level & PAG
4e60: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d  ER_SYNCHRONOUS_M
4e70: 41 53 4b 29 3d 3d 70 44 62 2d 3e 73 61 66 65 74  ASK)==pDb->safet
4e80: 79 5f 6c 65 76 65 6c 20 29 3b 0a 20 20 20 20 77  y_level );.    w
4e90: 68 69 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30 20  hile( (n--) > 0 
4ea0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 44 62  ){.      if( pDb
4eb0: 2d 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 20  ->pBt ){.       
4ec0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
4ed0: 50 61 67 65 72 46 6c 61 67 73 28 70 44 62 2d 3e  PagerFlags(pDb->
4ee0: 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pBt,.           
4ef0: 20 20 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74        pDb->safet
4f00: 79 5f 6c 65 76 65 6c 20 7c 20 28 64 62 2d 3e 66  y_level | (db->f
4f10: 6c 61 67 73 20 26 20 50 41 47 45 52 5f 46 4c 41  lags & PAGER_FLA
4f20: 47 53 5f 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20  GS_MASK) );.    
4f30: 20 20 7d 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b    }.      pDb++;
4f40: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c  .    }.  }.}.#el
4f50: 73 65 0a 23 20 64 65 66 69 6e 65 20 73 65 74 41  se.# define setA
4f60: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 58 29 20  llPagerFlags(X) 
4f70: 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e   /* no-op */.#en
4f80: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  dif.../*.** Retu
4f90: 72 6e 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  rn a human-reada
4fa0: 62 6c 65 20 6e 61 6d 65 20 66 6f 72 20 61 20 63  ble name for a c
4fb0: 6f 6e 73 74 72 61 69 6e 74 20 72 65 73 6f 6c 75  onstraint resolu
4fc0: 74 69 6f 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a  tion action..*/.
4fd0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4fe0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
4ff0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
5000: 72 20 2a 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38  r *actionName(u8
5010: 20 61 63 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73   action){.  cons
5020: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20  t char *zName;. 
5030: 20 73 77 69 74 63 68 28 20 61 63 74 69 6f 6e 20   switch( action 
5040: 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53  ){.    case OE_S
5050: 65 74 4e 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d  etNull:  zName =
5060: 20 22 53 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20   "SET NULL";    
5070: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
5080: 61 73 65 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20  ase OE_SetDflt: 
5090: 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 44 45   zName = "SET DE
50a0: 46 41 55 4c 54 22 3b 20 20 20 20 20 62 72 65 61  FAULT";     brea
50b0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 43  k;.    case OE_C
50c0: 61 73 63 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d  ascade:  zName =
50d0: 20 22 43 41 53 43 41 44 45 22 3b 20 20 20 20 20   "CASCADE";     
50e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
50f0: 61 73 65 20 4f 45 5f 52 65 73 74 72 69 63 74 3a  ase OE_Restrict:
5100: 20 7a 4e 61 6d 65 20 3d 20 22 52 45 53 54 52 49   zName = "RESTRI
5110: 43 54 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  CT";        brea
5120: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
5130: 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d           zName =
5140: 20 22 4e 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a   "NO ACTION";  .
5150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5160: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 63        assert( ac
5170: 74 69 6f 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b  tion==OE_None );
5180: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65   break;.  }.  re
5190: 74 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65  turn zName;.}.#e
51a0: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72  ndif.../*.** Par
51b0: 61 6d 65 74 65 72 20 65 4d 6f 64 65 20 6d 75 73  ameter eMode mus
51c0: 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  t be one of the 
51d0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
51e0: 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a  E_XXX constants.
51f0: 2a 2a 20 64 65 66 69 6e 65 64 20 69 6e 20 70 61  ** defined in pa
5200: 67 65 72 2e 68 2e 20 54 68 69 73 20 66 75 6e 63  ger.h. This func
5210: 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
5220: 20 61 73 73 6f 63 69 61 74 65 64 20 6c 6f 77 65   associated lowe
5230: 72 63 61 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c  rcase.** journal
5240: 2d 6d 6f 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63  -mode name..*/.c
5250: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
5260: 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
5270: 65 28 69 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20  e(int eMode){.  
5280: 73 74 61 74 69 63 20 63 68 61 72 20 2a 20 63 6f  static char * co
5290: 6e 73 74 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d  nst azModeName[]
52a0: 20 3d 20 7b 0a 20 20 20 20 22 64 65 6c 65 74 65   = {.    "delete
52b0: 22 2c 20 22 70 65 72 73 69 73 74 22 2c 20 22 6f  ", "persist", "o
52c0: 66 66 22 2c 20 22 74 72 75 6e 63 61 74 65 22 2c  ff", "truncate",
52d0: 20 22 6d 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65   "memory".#ifnde
52e0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
52f0: 4c 0a 20 20 20 20 20 2c 20 22 77 61 6c 22 0a 23  L.     , "wal".#
5300: 65 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73  endif.  };.  ass
5310: 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ert( PAGER_JOURN
5320: 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30  ALMODE_DELETE==0
5330: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   );.  assert( PA
5340: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
5350: 50 45 52 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20  PERSIST==1 );.  
5360: 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f  assert( PAGER_JO
5370: 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32  URNALMODE_OFF==2
5380: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   );.  assert( PA
5390: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
53a0: 54 52 55 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20  TRUNCATE==3 );. 
53b0: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
53c0: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
53d0: 59 3d 3d 34 20 29 3b 0a 20 20 61 73 73 65 72 74  Y==4 );.  assert
53e0: 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ( PAGER_JOURNALM
53f0: 4f 44 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20  ODE_WAL==5 );.  
5400: 61 73 73 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30  assert( eMode>=0
5410: 20 26 26 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79   && eMode<=Array
5420: 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29  Size(azModeName)
5430: 20 29 3b 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65   );..  if( eMode
5440: 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f  ==ArraySize(azMo
5450: 64 65 4e 61 6d 65 29 20 29 20 72 65 74 75 72 6e  deName) ) return
5460: 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d   0;.  return azM
5470: 6f 64 65 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a  odeName[eMode];.
5480: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
5490: 20 61 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d   a pragma statem
54a0: 65 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61  ent.  .**.** Pra
54b0: 67 6d 61 73 20 61 72 65 20 6f 66 20 74 68 69 73  gmas are of this
54c0: 20 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   form:.**.**    
54d0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
54e0: 73 65 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d  se.]id [= value]
54f0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74  .**.** The ident
5500: 69 66 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f  ifier might also
5510: 20 62 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54   be a string.  T
5520: 68 65 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  he value is a st
5530: 72 69 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65  ring, and.** ide
5540: 6e 74 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75  ntifier, or a nu
5550: 6d 62 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46  mber.  If minusF
5560: 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68 65  lag is true, the
5570: 6e 20 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a  n the value is.*
5580: 2a 20 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20  * a number that 
5590: 77 61 73 20 70 72 65 63 65 64 65 64 20 62 79 20  was preceded by 
55a0: 61 20 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a  a minus sign..**
55b0: 0a 2a 2a 20 49 66 20 74 68 65 20 6c 65 66 74 20  .** If the left 
55c0: 73 69 64 65 20 69 73 20 22 64 61 74 61 62 61 73  side is "databas
55d0: 65 2e 69 64 22 20 74 68 65 6e 20 70 49 64 31 20  e.id" then pId1 
55e0: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
55f0: 6e 61 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32  name.** and pId2
5600: 20 69 73 20 74 68 65 20 69 64 2e 20 20 49 66 20   is the id.  If 
5610: 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73  the left side is
5620: 20 6a 75 73 74 20 22 69 64 22 20 74 68 65 6e 20   just "id" then 
5630: 70 49 64 31 20 69 73 20 74 68 65 0a 2a 2a 20 69  pId1 is the.** i
5640: 64 20 61 6e 64 20 70 49 64 32 20 69 73 20 61 6e  d and pId2 is an
5650: 79 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a  y empty string..
5660: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  */.void sqlite3P
5670: 72 61 67 6d 61 28 0a 20 20 50 61 72 73 65 20 2a  ragma(.  Parse *
5680: 70 50 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e  pParse, .  Token
5690: 20 2a 70 49 64 31 2c 20 20 20 20 20 20 20 20 2f   *pId1,        /
56a0: 2a 20 46 69 72 73 74 20 70 61 72 74 20 6f 66 20  * First part of 
56b0: 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69  [database.]id fi
56c0: 65 6c 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  eld */.  Token *
56d0: 70 49 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20  pId2,        /* 
56e0: 53 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b  Second part of [
56f0: 64 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65  database.]id fie
5700: 6c 64 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  ld, or NULL */. 
5710: 20 54 6f 6b 65 6e 20 2a 70 56 61 6c 75 65 2c 20   Token *pValue, 
5720: 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 66 6f       /* Token fo
5730: 72 20 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55  r <value>, or NU
5740: 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 6d 69 6e 75  LL */.  int minu
5750: 73 46 6c 61 67 20 20 20 20 20 20 20 2f 2a 20 54  sFlag       /* T
5760: 72 75 65 20 69 66 20 61 20 27 2d 27 20 73 69 67  rue if a '-' sig
5770: 6e 20 70 72 65 63 65 64 65 64 20 3c 76 61 6c 75  n preceded <valu
5780: 65 3e 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  e> */.){.  char 
5790: 2a 7a 4c 65 66 74 20 3d 20 30 3b 20 20 20 20 20  *zLeft = 0;     
57a0: 20 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61    /* Nul-termina
57b0: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
57c0: 20 3c 69 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20   <id> */.  char 
57d0: 2a 7a 52 69 67 68 74 20 3d 20 30 3b 20 20 20 20  *zRight = 0;    
57e0: 20 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61    /* Nul-termina
57f0: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
5800: 20 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c   <value>, or NUL
5810: 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  L */.  const cha
5820: 72 20 2a 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a  r *zDb = 0;   /*
5830: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 6e 61   The database na
5840: 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  me */.  Token *p
5850: 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
5860: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64  * Pointer to <id
5870: 3e 20 74 6f 6b 65 6e 20 2a 2f 0a 20 20 63 68 61  > token */.  cha
5880: 72 20 2a 61 46 63 6e 74 6c 5b 34 5d 3b 20 20 20  r *aFcntl[4];   
5890: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
58a0: 74 6f 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  to SQLITE_FCNTL_
58b0: 50 52 41 47 4d 41 20 2a 2f 0a 20 20 69 6e 74 20  PRAGMA */.  int 
58c0: 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
58d0: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69     /* Database i
58e0: 6e 64 65 78 20 66 6f 72 20 3c 64 61 74 61 62 61  ndex for <databa
58f0: 73 65 3e 20 2a 2f 0a 20 20 69 6e 74 20 6c 77 72  se> */.  int lwr
5900: 2c 20 75 70 72 2c 20 6d 69 64 3b 20 20 20 20 20  , upr, mid;     
5910: 20 20 20 20 20 20 2f 2a 20 42 69 6e 61 72 79 20        /* Binary 
5920: 73 65 61 72 63 68 20 62 6f 75 6e 64 73 20 2a 2f  search bounds */
5930: 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
5940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5950: 2f 2a 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  /* return value 
5960: 66 6f 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54  form SQLITE_FCNT
5970: 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71  L_PRAGMA */.  sq
5980: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72  lite3 *db = pPar
5990: 73 65 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68  se->db;    /* Th
59a0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
59b0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70  ction */.  Db *p
59c0: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
59d0: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73          /* The s
59e0: 70 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65  pecific database
59f0: 20 62 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20   being pragmaed 
5a00: 2a 2f 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73  */.  Vdbe *v = s
5a10: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
5a20: 61 72 73 65 29 3b 20 20 2f 2a 20 50 72 65 70 61  arse);  /* Prepa
5a30: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  red statement */
5a40: 0a 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72  ..  if( v==0 ) r
5a50: 65 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33  eturn;.  sqlite3
5a60: 56 64 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28  VdbeRunOnlyOnce(
5a70: 76 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d  v);.  pParse->nM
5a80: 65 6d 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e  em = 2;..  /* In
5a90: 74 65 72 70 72 65 74 20 74 68 65 20 5b 64 61 74  terpret the [dat
5aa0: 61 62 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20  abase.] part of 
5ab0: 74 68 65 20 70 72 61 67 6d 61 20 73 74 61 74 65  the pragma state
5ac0: 6d 65 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65  ment. iDb is the
5ad0: 0a 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74  .  ** index of t
5ae0: 68 65 20 64 61 74 61 62 61 73 65 20 74 68 69 73  he database this
5af0: 20 70 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67   pragma is being
5b00: 20 61 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64   applied to in d
5b10: 62 2e 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44  b.aDb[]. */.  iD
5b20: 62 20 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61  b = sqlite3TwoPa
5b30: 72 74 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70  rtName(pParse, p
5b40: 49 64 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29  Id1, pId2, &pId)
5b50: 3b 0a 20 20 69 66 28 20 69 44 62 3c 30 20 29 20  ;.  if( iDb<0 ) 
5b60: 72 65 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20  return;.  pDb = 
5b70: 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a  &db->aDb[iDb];..
5b80: 20 20 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70    /* If the temp
5b90: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 62 65   database has be
5ba0: 65 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61  en explicitly na
5bb0: 6d 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  med as part of t
5bc0: 68 65 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c  he .  ** pragma,
5bd0: 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73   make sure it is
5be0: 20 6f 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69   open. .  */.  i
5bf0: 66 28 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c  f( iDb==1 && sql
5c00: 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
5c10: 62 61 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a  base(pParse) ){.
5c20: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a      return;.  }.
5c30: 0a 20 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74  .  zLeft = sqlit
5c40: 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
5c50: 64 62 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20  db, pId);.  if( 
5c60: 21 7a 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b  !zLeft ) return;
5c70: 0a 20 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67  .  if( minusFlag
5c80: 20 29 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d   ){.    zRight =
5c90: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
5ca0: 64 62 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75  db, "-%T", pValu
5cb0: 65 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  e);.  }else{.   
5cc0: 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65   zRight = sqlite
5cd0: 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64  3NameFromToken(d
5ce0: 62 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a  b, pValue);.  }.
5cf0: 0a 20 20 61 73 73 65 72 74 28 20 70 49 64 32 20  .  assert( pId2 
5d00: 29 3b 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d  );.  zDb = pId2-
5d10: 3e 6e 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d  >n>0 ? pDb->zNam
5d20: 65 20 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c  e : 0;.  if( sql
5d30: 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 70 50  ite3AuthCheck(pP
5d40: 61 72 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41  arse, SQLITE_PRA
5d50: 47 4d 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67  GMA, zLeft, zRig
5d60: 68 74 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20  ht, zDb) ){.    
5d70: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
5d80: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20  .  }..  /* Send 
5d90: 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  an SQLITE_FCNTL_
5da0: 50 52 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74  PRAGMA file-cont
5db0: 72 6f 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72  rol to the under
5dc0: 6c 79 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63  lying VFS.  ** c
5dd0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69  onnection.  If i
5de0: 74 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  t returns SQLITE
5df0: 5f 4f 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65  _OK, then assume
5e00: 20 74 68 61 74 20 74 68 65 20 56 46 53 0a 20 20   that the VFS.  
5e10: 2a 2a 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70  ** handled the p
5e20: 72 61 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61  ragma and genera
5e30: 74 65 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61  te a no-op prepa
5e40: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20  red statement.. 
5e50: 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20   */.  aFcntl[0] 
5e60: 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d  = 0;.  aFcntl[1]
5e70: 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e   = zLeft;.  aFcn
5e80: 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a  tl[2] = zRight;.
5e90: 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b    aFcntl[3] = 0;
5ea0: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
5eb0: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
5ec0: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c  rc = sqlite3_fil
5ed0: 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44  e_control(db, zD
5ee0: 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  b, SQLITE_FCNTL_
5ef0: 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61  PRAGMA, (void*)a
5f00: 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63  Fcntl);.  if( rc
5f10: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
5f20: 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d     if( aFcntl[0]
5f30: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 65   ){.      int me
5f40: 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  m = ++pParse->nM
5f50: 65 6d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  em;.      sqlite
5f60: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
5f70: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d 65  P_String8, 0, me
5f80: 6d 2c 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c  m, 0, aFcntl[0],
5f90: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
5fa0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
5fb0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  (v, 1);.      sq
5fc0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
5fd0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
5fe0: 45 5f 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74 22  E_NAME, "result"
5ff0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
6000: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6010: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
6020: 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20  ResultRow, mem, 
6030: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
6040: 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d  3_free(aFcntl[0]
6050: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  );.    }.    got
6060: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
6070: 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
6080: 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20  TE_NOTFOUND ){. 
6090: 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d     if( aFcntl[0]
60a0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
60b0: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
60c0: 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30  , "%s", aFcntl[0
60d0: 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ]);.      sqlite
60e0: 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d  3_free(aFcntl[0]
60f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61  );.    }.    pPa
6100: 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20  rse->nErr++;.   
6110: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63   pParse->rc = rc
6120: 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d  ;.    goto pragm
6130: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  a_out;.  }..  /*
6140: 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61 67   Locate the prag
6150: 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70  ma in the lookup
6160: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20   table */.  lwr 
6170: 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72  = 0;.  upr = Arr
6180: 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61  aySize(aPragmaNa
6190: 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28  mes)-1;.  while(
61a0: 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20   lwr<=upr ){.   
61b0: 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29   mid = (lwr+upr)
61c0: 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  /2;.    rc = sql
61d0: 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65  ite3_stricmp(zLe
61e0: 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  ft, aPragmaNames
61f0: 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20  [mid].zName);.  
6200: 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72    if( rc==0 ) br
6210: 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c  eak;.    if( rc<
6220: 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d  0 ){.      upr =
6230: 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65   mid - 1;.    }e
6240: 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d  lse{.      lwr =
6250: 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a   mid + 1;.    }.
6260: 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70    }.  if( lwr>up
6270: 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  r ) goto pragma_
6280: 6f 75 74 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  out;..  /* Make 
6290: 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73  sure the databas
62a0: 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64  e schema is load
62b0: 65 64 20 69 66 20 74 68 65 20 70 72 61 67 6d 61  ed if the pragma
62c0: 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 2a   requires that *
62d0: 2f 0a 20 20 69 66 28 20 28 61 50 72 61 67 6d 61  /.  if( (aPragma
62e0: 4e 61 6d 65 73 5b 6d 69 64 5d 2e 6d 50 72 61 67  Names[mid].mPrag
62f0: 46 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f  Flag & PragFlag_
6300: 4e 65 65 64 53 63 68 65 6d 61 29 21 3d 30 20 29  NeedSchema)!=0 )
6310: 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
6320: 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72  3ReadSchema(pPar
6330: 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d  se) ) goto pragm
6340: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  a_out;.  }..  /*
6350: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 61 70 70   Jump to the app
6360: 72 6f 70 72 69 61 74 65 20 70 72 61 67 6d 61 20  ropriate pragma 
6370: 68 61 6e 64 6c 65 72 20 2a 2f 0a 20 20 73 77 69  handler */.  swi
6380: 74 63 68 28 20 61 50 72 61 67 6d 61 4e 61 6d 65  tch( aPragmaName
6390: 73 5b 6d 69 64 5d 2e 65 50 72 61 67 54 79 70 20  s[mid].ePragTyp 
63a0: 29 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e  ){.  .#if !defin
63b0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
63c0: 41 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26  AGER_PRAGMAS) &&
63d0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
63e0: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
63f0: 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ).  /*.  **  PRA
6400: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64  GMA [database.]d
6410: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
6420: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
6430: 64 61 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c  database.]defaul
6440: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20  t_cache_size=N. 
6450: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72   **.  ** The fir
6460: 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20  st form reports 
6470: 74 68 65 20 63 75 72 72 65 6e 74 20 70 65 72 73  the current pers
6480: 69 73 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66  istent setting f
6490: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65  or the.  ** page
64a0: 20 63 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68   cache size.  Th
64b0: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
64c0: 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   is the maximum 
64d0: 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70  number of.  ** p
64e0: 61 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65  ages in the page
64f0: 20 63 61 63 68 65 2e 20 20 54 68 65 20 73 65 63   cache.  The sec
6500: 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f  ond form sets bo
6510: 74 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20  th the current. 
6520: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
6530: 69 7a 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ize value and th
6540: 65 20 70 65 72 73 69 73 74 65 6e 74 20 70 61 67  e persistent pag
6550: 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c  e cache size val
6560: 75 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69  ue.  ** stored i
6570: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
6580: 69 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f  ile..  **.  ** O
6590: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
65a0: 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65   SQLite would se
65b0: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61  t the default ca
65c0: 63 68 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20  che size to a.  
65d0: 2a 2a 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62  ** negative numb
65e0: 65 72 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73  er to indicate s
65f0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20  ynchronous=OFF. 
6600: 20 54 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e   These days, syn
6610: 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73  chronous.  ** is
6620: 20 61 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65   always on by de
6630: 66 61 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73  fault regardless
6640: 20 6f 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20   of the sign of 
6650: 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68  the default cach
6660: 65 0a 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75  e.  ** size.  Bu
6670: 74 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61  t continue to ta
6680: 6b 65 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20  ke the absolute 
6690: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66  value of the def
66a0: 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20  ault cache.  ** 
66b0: 73 69 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63  size of historic
66c0: 61 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  al compatibility
66d0: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
66e0: 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43 41  agTyp_DEFAULT_CA
66f0: 43 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20  CHE_SIZE: {.    
6700: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
6710: 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68 65  eOpList getCache
6720: 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Size[] = {.     
6730: 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
6740: 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20  n, 0, 0,        
6750: 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  0},             
6760: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
6770: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52   */.      { OP_R
6780: 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31  eadCookie,  0, 1
6790: 2c 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 44  ,        BTREE_D
67a0: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
67b0: 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  E},  /* 1 */.   
67c0: 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20     { OP_IfPos,  
67d0: 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20 20       1, 8,      
67e0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
67f0: 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c  _Integer,     0,
6800: 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   2,        0},. 
6810: 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72 61       { OP_Subtra
6820: 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20 20  ct,    1, 2,    
6830: 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20      1},.      { 
6840: 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20  OP_IfPos,       
6850: 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 8,        0},
6860: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65  .      { OP_Inte
6870: 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20 20  ger,     0, 1,  
6880: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20        0},       
6890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
68a0: 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20    /* 6 */.      
68b0: 7b 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20  { OP_Noop,      
68c0: 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30    0, 0,        0
68d0: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  },.      { OP_Re
68e0: 73 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c  sultRow,   1, 1,
68f0: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
6900: 7d 3b 0a 20 20 20 20 69 6e 74 20 61 64 64 72 3b  };.    int addr;
6910: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
6920: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
6930: 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  );.    if( !zRig
6940: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
6950: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
6960: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  s(v, 1);.      s
6970: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
6980: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
6990: 4d 45 5f 4e 41 4d 45 2c 20 22 63 61 63 68 65 5f  ME_NAME, "cache_
69a0: 73 69 7a 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  size", SQLITE_ST
69b0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70 50 61  ATIC);.      pPa
69c0: 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b 0a  rse->nMem += 2;.
69d0: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
69e0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
69f0: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67  t(v, ArraySize(g
6a00: 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65  etCacheSize), ge
6a10: 74 43 61 63 68 65 53 69 7a 65 29 3b 0a 20 20 20  tCacheSize);.   
6a20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
6a30: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20  angeP1(v, addr, 
6a40: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
6a50: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
6a60: 76 2c 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b  v, addr+1, iDb);
6a70: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
6a80: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
6a90: 64 72 2b 36 2c 20 53 51 4c 49 54 45 5f 44 45 46  dr+6, SQLITE_DEF
6aa0: 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 29  AULT_CACHE_SIZE)
6ab0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
6ac0: 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71     int size = sq
6ad0: 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 73 71  lite3AbsInt32(sq
6ae0: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
6af0: 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
6b00: 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
6b10: 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20  tion(pParse, 0, 
6b20: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
6b30: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
6b40: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 73 69 7a   OP_Integer, siz
6b50: 65 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 1);.      sql
6b60: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
6b70: 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20  , OP_SetCookie, 
6b80: 69 44 62 2c 20 42 54 52 45 45 5f 44 45 46 41 55  iDb, BTREE_DEFAU
6b90: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 31  LT_CACHE_SIZE, 1
6ba0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
6bb0: 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
6bc0: 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
6bd0: 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70 44 62   0) );.      pDb
6be0: 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65  ->pSchema->cache
6bf0: 5f 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20  _size = size;.  
6c00: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
6c10: 53 65 74 43 61 63 68 65 53 69 7a 65 28 70 44 62  SetCacheSize(pDb
6c20: 2d 3e 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68  ->pBt, pDb->pSch
6c30: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29  ema->cache_size)
6c40: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
6c50: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;.  }.#endif /*
6c60: 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41   !SQLITE_OMIT_PA
6c70: 47 45 52 5f 50 52 41 47 4d 41 53 20 26 26 20 21  GER_PRAGMAS && !
6c80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
6c90: 45 43 41 54 45 44 20 2a 2f 0a 0a 23 69 66 20 21  ECATED */..#if !
6ca0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
6cb0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
6cc0: 53 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  S).  /*.  **  PR
6cd0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
6ce0: 70 61 67 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20  page_size.  **  
6cf0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
6d00: 2e 5d 70 61 67 65 5f 73 69 7a 65 3d 4e 0a 20 20  .]page_size=N.  
6d10: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
6d20: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
6d30: 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69  he current setti
6d40: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
6d50: 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
6d60: 7a 65 20 69 6e 20 62 79 74 65 73 2e 20 20 54 68  ze in bytes.  Th
6d70: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
6d80: 74 73 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  ts the.  ** data
6d90: 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 76  base page size v
6da0: 61 6c 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65  alue.  The value
6db0: 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 73 65 74   can only be set
6dc0: 20 69 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74   if.  ** the dat
6dd0: 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 79 65  abase has not ye
6de0: 74 20 62 65 65 6e 20 63 72 65 61 74 65 64 2e 0a  t been created..
6df0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
6e00: 54 79 70 5f 50 41 47 45 5f 53 49 5a 45 3a 20 7b  Typ_PAGE_SIZE: {
6e10: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
6e20: 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20  = pDb->pBt;.    
6e30: 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29  assert( pBt!=0 )
6e40: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
6e50: 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  t ){.      int s
6e60: 69 7a 65 20 3d 20 41 4c 57 41 59 53 28 70 42 74  ize = ALWAYS(pBt
6e70: 29 20 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65  ) ? sqlite3Btree
6e80: 47 65 74 50 61 67 65 53 69 7a 65 28 70 42 74 29  GetPageSize(pBt)
6e90: 20 3a 20 30 3b 0a 20 20 20 20 20 20 72 65 74 75   : 0;.      retu
6ea0: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
6eb0: 73 65 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c  se, "page_size",
6ec0: 20 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73   size);.    }els
6ed0: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c  e{.      /* Mall
6ee0: 6f 63 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e  oc may fail when
6ef0: 20 73 65 74 74 69 6e 67 20 74 68 65 20 70 61 67   setting the pag
6f00: 65 2d 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65  e-size, as there
6f10: 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a   is an internal.
6f20: 20 20 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20        ** buffer 
6f30: 74 68 61 74 20 74 68 65 20 70 61 67 65 72 20 6d  that the pager m
6f40: 6f 64 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73  odule resizes us
6f50: 69 6e 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c  ing sqlite3_real
6f60: 6c 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  loc()..      */.
6f70: 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61        db->nextPa
6f80: 67 65 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  gesize = sqlite3
6f90: 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  Atoi(zRight);.  
6fa0: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e      if( SQLITE_N
6fb0: 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72  OMEM==sqlite3Btr
6fc0: 65 65 53 65 74 50 61 67 65 53 69 7a 65 28 70 42  eeSetPageSize(pB
6fd0: 74 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73  t, db->nextPages
6fe0: 69 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20  ize,-1,0) ){.   
6ff0: 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46       db->mallocF
7000: 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20  ailed = 1;.     
7010: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
7020: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
7030: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
7040: 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64 65 6c  base.]secure_del
7050: 65 74 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ete.  **  PRAGMA
7060: 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75   [database.]secu
7070: 72 65 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46  re_delete=ON/OFF
7080: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
7090: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
70a0: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  s the current se
70b0: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
70c0: 2a 2a 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65  ** secure_delete
70d0: 20 66 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f   flag.  The seco
70e0: 6e 64 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20  nd form changes 
70f0: 74 68 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74  the secure_delet
7100: 65 0a 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74  e.  ** flag sett
7110: 69 6e 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20  ing and reports 
7120: 74 68 65 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20  thenew value..  
7130: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
7140: 70 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3a  p_SECURE_DELETE:
7150: 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42   {.    Btree *pB
7160: 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  t = pDb->pBt;.  
7170: 20 20 69 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20    int b = -1;.  
7180: 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30    assert( pBt!=0
7190: 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   );.    if( zRig
71a0: 68 74 20 29 7b 0a 20 20 20 20 20 20 62 20 3d 20  ht ){.      b = 
71b0: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
71c0: 6e 28 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20 20  n(zRight, 0);.  
71d0: 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49 64 32    }.    if( pId2
71e0: 2d 3e 6e 3d 3d 30 20 26 26 20 62 3e 3d 30 20 29  ->n==0 && b>=0 )
71f0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
7200: 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20        for(ii=0; 
7210: 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b  ii<db->nDb; ii++
7220: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
7230: 65 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c  e3BtreeSecureDel
7240: 65 74 65 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ete(db->aDb[ii].
7250: 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 20 20 7d  pBt, b);.      }
7260: 0a 20 20 20 20 7d 0a 20 20 20 20 62 20 3d 20 73  .    }.    b = s
7270: 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75 72  qlite3BtreeSecur
7280: 65 44 65 6c 65 74 65 28 70 42 74 2c 20 62 29 3b  eDelete(pBt, b);
7290: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
72a0: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 73 65  eInt(pParse, "se
72b0: 63 75 72 65 5f 64 65 6c 65 74 65 22 2c 20 62 29  cure_delete", b)
72c0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
72d0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
72e0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d  GMA [database.]m
72f0: 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20  ax_page_count.  
7300: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
7310: 62 61 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63  base.]max_page_c
7320: 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  ount=N.  **.  **
7330: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
7340: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
7350: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
7360: 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d  the.  ** maximum
7370: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
7380: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
7390: 20 66 69 6c 65 2e 20 20 54 68 65 20 0a 20 20 2a   file.  The .  *
73a0: 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 61 74  * second form at
73b0: 74 65 6d 70 74 73 20 74 6f 20 63 68 61 6e 67 65  tempts to change
73c0: 20 74 68 69 73 20 73 65 74 74 69 6e 67 2e 20 20   this setting.  
73d0: 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72 6d 73 20  Both.  ** forms 
73e0: 72 65 74 75 72 6e 20 74 68 65 20 63 75 72 72 65  return the curre
73f0: 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20 20 2a 2a  nt setting..  **
7400: 0a 20 20 2a 2a 20 54 68 65 20 61 62 73 6f 6c 75  .  ** The absolu
7410: 74 65 20 76 61 6c 75 65 20 6f 66 20 4e 20 69 73  te value of N is
7420: 20 75 73 65 64 2e 20 20 54 68 69 73 20 69 73 20   used.  This is 
7430: 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 61 6e 64  undocumented and
7440: 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63 68 61 6e   might.  ** chan
7450: 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79 20 70 75  ge.  The only pu
7460: 72 70 6f 73 65 20 69 73 20 74 6f 20 70 72 6f 76  rpose is to prov
7470: 69 64 65 20 61 6e 20 65 61 73 79 20 77 61 79 20  ide an easy way 
7480: 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20 74 68 65  to test.  ** the
7490: 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
74a0: 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  () function..  *
74b0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
74c0: 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 63  database.]page_c
74d0: 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ount.  **.  ** R
74e0: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
74f0: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
7500: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62   specified datab
7510: 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ase..  */.  case
7520: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f   PragTyp_PAGE_CO
7530: 55 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  UNT: {.    int i
7540: 52 65 67 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Reg;.    sqlite3
7550: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
7560: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
7570: 20 20 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72     iReg = ++pPar
7580: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66  se->nMem;.    if
7590: 28 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  ( sqlite3Tolower
75a0: 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20  (zLeft[0])=='p' 
75b0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
75c0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
75d0: 5f 50 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c  _Pagecount, iDb,
75e0: 20 69 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73   iReg);.    }els
75f0: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
7600: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
7610: 5f 4d 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20  _MaxPgcnt, iDb, 
7620: 69 52 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20  iReg, .         
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7640: 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 73  qlite3AbsInt32(s
7650: 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
7660: 74 29 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  t)));.    }.    
7670: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
7680: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
7690: 77 2c 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20  w, iReg, 1);.   
76a0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
76b0: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
76c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
76d0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
76e0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66  LNAME_NAME, zLef
76f0: 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  t, SQLITE_TRANSI
7700: 45 4e 54 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ENT);.    break;
7710: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
7720: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
7730: 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a  e.]locking_mode.
7740: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7750: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f  tabase.]locking_
7760: 6d 6f 64 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65  mode = (normal|e
7770: 78 63 6c 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20  xclusive).  */. 
7780: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
7790: 43 4b 49 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20  CKING_MODE: {.  
77a0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52    const char *zR
77b0: 65 74 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20  et = "normal";. 
77c0: 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67     int eMode = g
77d0: 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52  etLockingMode(zR
77e0: 69 67 68 74 29 3b 0a 0a 20 20 20 20 69 66 28 20  ight);..    if( 
77f0: 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d  pId2->n==0 && eM
7800: 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49  ode==PAGER_LOCKI
7810: 4e 47 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a  NGMODE_QUERY ){.
7820: 20 20 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20        /* Simple 
7830: 22 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f  "PRAGMA locking_
7840: 6d 6f 64 65 3b 22 20 73 74 61 74 65 6d 65 6e 74  mode;" statement
7850: 2e 20 54 68 69 73 20 69 73 20 61 20 71 75 65 72  . This is a quer
7860: 79 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74  y for.      ** t
7870: 68 65 20 63 75 72 72 65 6e 74 20 64 65 66 61 75  he current defau
7880: 6c 74 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20  lt locking mode 
7890: 28 77 68 69 63 68 20 6d 61 79 20 62 65 20 64 69  (which may be di
78a0: 66 66 65 72 65 6e 74 20 74 6f 0a 20 20 20 20 20  fferent to.     
78b0: 20 2a 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d   ** the locking-
78c0: 6d 6f 64 65 20 6f 66 20 74 68 65 20 6d 61 69 6e  mode of the main
78d0: 20 64 61 74 61 62 61 73 65 29 2e 0a 20 20 20 20   database)..    
78e0: 20 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65    */.      eMode
78f0: 20 3d 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d   = db->dfltLockM
7900: 6f 64 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ode;.    }else{.
7910: 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61        Pager *pPa
7920: 67 65 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ger;.      if( p
7930: 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20  Id2->n==0 ){.   
7940: 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 6e 64       /* This ind
7950: 69 63 61 74 65 73 20 74 68 61 74 20 6e 6f 20 64  icates that no d
7960: 61 74 61 62 61 73 65 20 6e 61 6d 65 20 77 61 73  atabase name was
7970: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 70 61   specified as pa
7980: 72 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 66  rt.        ** of
7990: 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d   the PRAGMA comm
79a0: 61 6e 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  and. In this cas
79b0: 65 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  e the locking-mo
79c0: 64 65 20 6d 75 73 74 20 62 65 0a 20 20 20 20 20  de must be.     
79d0: 20 20 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c     ** set on all
79e0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
79f0: 73 65 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20  ses, as well as 
7a00: 74 68 65 20 6d 61 69 6e 20 64 62 20 66 69 6c 65  the main db file
7a10: 2e 0a 20 20 20 20 20 20 20 20 2a 2a 0a 20 20 20  ..        **.   
7a20: 20 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68       ** Also, th
7a30: 65 20 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f  e sqlite3.dfltLo
7a40: 63 6b 4d 6f 64 65 20 76 61 72 69 61 62 6c 65 20  ckMode variable 
7a50: 69 73 20 73 65 74 20 73 6f 20 74 68 61 74 0a 20  is set so that. 
7a60: 20 20 20 20 20 20 20 2a 2a 20 61 6e 79 20 73 75         ** any su
7a70: 62 73 65 71 75 65 6e 74 6c 79 20 61 74 74 61 63  bsequently attac
7a80: 68 65 64 20 64 61 74 61 62 61 73 65 73 20 61 6c  hed databases al
7a90: 73 6f 20 75 73 65 20 74 68 65 20 73 70 65 63 69  so use the speci
7aa0: 66 69 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20  fied.        ** 
7ab0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20  locking mode..  
7ac0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
7ad0: 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 20   int ii;.       
7ae0: 20 61 73 73 65 72 74 28 70 44 62 3d 3d 26 64 62   assert(pDb==&db
7af0: 2d 3e 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20  ->aDb[0]);.     
7b00: 20 20 20 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c     for(ii=2; ii<
7b10: 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
7b20: 20 20 20 20 20 20 20 20 20 20 70 50 61 67 65 72            pPager
7b30: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
7b40: 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d  ager(db->aDb[ii]
7b50: 2e 70 42 74 29 3b 0a 20 20 20 20 20 20 20 20 20  .pBt);.         
7b60: 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63   sqlite3PagerLoc
7b70: 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c  kingMode(pPager,
7b80: 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 20   eMode);.       
7b90: 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 64   }.        db->d
7ba0: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75  fltLockMode = (u
7bb0: 38 29 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d  8)eMode;.      }
7bc0: 0a 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20  .      pPager = 
7bd0: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
7be0: 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20  r(pDb->pBt);.   
7bf0: 20 20 20 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74     eMode = sqlit
7c00: 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f  e3PagerLockingMo
7c10: 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65  de(pPager, eMode
7c20: 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73  );.    }..    as
7c30: 73 65 72 74 28 20 65 4d 6f 64 65 3d 3d 50 41 47  sert( eMode==PAG
7c40: 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e  ER_LOCKINGMODE_N
7c50: 4f 52 4d 41 4c 0a 20 20 20 20 20 20 20 20 20 20  ORMAL.          
7c60: 20 20 7c 7c 20 65 4d 6f 64 65 3d 3d 50 41 47 45    || eMode==PAGE
7c70: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58  R_LOCKINGMODE_EX
7c80: 43 4c 55 53 49 56 45 20 29 3b 0a 20 20 20 20 69  CLUSIVE );.    i
7c90: 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  f( eMode==PAGER_
7ca0: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c  LOCKINGMODE_EXCL
7cb0: 55 53 49 56 45 20 29 7b 0a 20 20 20 20 20 20 7a  USIVE ){.      z
7cc0: 52 65 74 20 3d 20 22 65 78 63 6c 75 73 69 76 65  Ret = "exclusive
7cd0: 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  ";.    }.    sql
7ce0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
7cf0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71  ls(v, 1);.    sq
7d00: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
7d10: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
7d20: 45 5f 4e 41 4d 45 2c 20 22 6c 6f 63 6b 69 6e 67  E_NAME, "locking
7d30: 5f 6d 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f 53  _mode", SQLITE_S
7d40: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
7d50: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
7d60: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
7d70: 31 2c 20 30 2c 20 7a 52 65 74 2c 20 30 29 3b 0a  1, 0, zRet, 0);.
7d80: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
7d90: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
7da0: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
7db0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
7dc0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
7dd0: 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e  [database.]journ
7de0: 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52  al_mode.  **  PR
7df0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
7e00: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 0a 20  journal_mode =. 
7e10: 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20   **             
7e20: 20 20 20 20 20 20 20 20 20 28 64 65 6c 65 74 65           (delete
7e30: 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74 72 75  |persist|off|tru
7e40: 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77 61 6c  ncate|memory|wal
7e50: 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63 61 73  |off).  */.  cas
7e60: 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41  e PragTyp_JOURNA
7e70: 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 69 6e  L_MODE: {.    in
7e80: 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20  t eMode;        
7e90: 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 50 41  /* One of the PA
7ea0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
7eb0: 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20  XXX symbols */. 
7ec0: 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20 20 20     int ii;      
7ed0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
7ee0: 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 73 71 6c  nter */..    sql
7ef0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
7f00: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71  ls(v, 1);.    sq
7f10: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
7f20: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
7f30: 45 5f 4e 41 4d 45 2c 20 22 6a 6f 75 72 6e 61 6c  E_NAME, "journal
7f40: 5f 6d 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f 53  _mode", SQLITE_S
7f50: 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 69 66 28  TATIC);..    if(
7f60: 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20   zRight==0 ){.  
7f70: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
7f80: 69 73 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70 61  is no "=MODE" pa
7f90: 72 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61  rt of the pragma
7fa0: 2c 20 64 6f 20 61 20 71 75 65 72 79 20 66 6f 72  , do a query for
7fb0: 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 75   the.      ** cu
7fc0: 72 72 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20 20  rrent mode */.  
7fd0: 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45      eMode = PAGE
7fe0: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
7ff0: 45 52 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ERY;.    }else{.
8000: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
8010: 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20 69   *zMode;.      i
8020: 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74  nt n = sqlite3St
8030: 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 3b 0a  rlen30(zRight);.
8040: 20 20 20 20 20 20 66 6f 72 28 65 4d 6f 64 65 3d        for(eMode=
8050: 30 3b 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c 69  0; (zMode = sqli
8060: 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
8070: 6d 65 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20 65  me(eMode))!=0; e
8080: 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20 20  Mode++){.       
8090: 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
80a0: 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d 6f  ICmp(zRight, zMo
80b0: 64 65 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65 61  de, n)==0 ) brea
80c0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  k;.      }.     
80d0: 20 69 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a 20   if( !zMode ){. 
80e0: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65         /* If the
80f0: 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 64 6f   "=MODE" part do
8100: 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79  es not match any
8110: 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d   known journal m
8120: 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20  ode,.        ** 
8130: 74 68 65 6e 20 64 6f 20 61 20 71 75 65 72 79 20  then do a query 
8140: 2a 2f 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65  */.        eMode
8150: 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c   = PAGER_JOURNAL
8160: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20  MODE_QUERY;.    
8170: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
8180: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4a  ( eMode==PAGER_J
8190: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
81a0: 20 26 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29   && pId2->n==0 )
81b0: 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65  {.      /* Conve
81c0: 72 74 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e  rt "PRAGMA journ
81d0: 61 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22 50  al_mode" into "P
81e0: 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e  RAGMA main.journ
81f0: 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20 20  al_mode" */.    
8200: 20 20 69 44 62 20 3d 20 30 3b 0a 20 20 20 20 20    iDb = 0;.     
8210: 20 70 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20   pId2->n = 1;.  
8220: 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 64    }.    for(ii=d
8230: 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b  b->nDb-1; ii>=0;
8240: 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66   ii--){.      if
8250: 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  ( db->aDb[ii].pB
8260: 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c  t && (ii==iDb ||
8270: 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a   pId2->n==0) ){.
8280: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
8290: 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20  dbeUsesBtree(v, 
82a0: 69 69 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ii);.        sql
82b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
82c0: 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65  , OP_JournalMode
82d0: 2c 20 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b  , ii, 1, eMode);
82e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
82f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8300: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
8310: 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20  tRow, 1, 1);.   
8320: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
8330: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
8340: 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61  database.]journa
8350: 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a  l_size_limit.  *
8360: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
8370: 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a  ase.]journal_siz
8380: 65 5f 6c 69 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20  e_limit=N.  **. 
8390: 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74   ** Get or set t
83a0: 68 65 20 73 69 7a 65 20 6c 69 6d 69 74 20 6f 6e  he size limit on
83b0: 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
83c0: 6c 20 66 69 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20  l files..  */.  
83d0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55  case PragTyp_JOU
83e0: 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a  RNAL_SIZE_LIMIT:
83f0: 20 7b 0a 20 20 20 20 50 61 67 65 72 20 2a 70 50   {.    Pager *pP
8400: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
8410: 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42  reePager(pDb->pB
8420: 74 29 3b 0a 20 20 20 20 69 36 34 20 69 4c 69 6d  t);.    i64 iLim
8430: 69 74 20 3d 20 2d 32 3b 0a 20 20 20 20 69 66 28  it = -2;.    if(
8440: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
8450: 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a   sqlite3Atoi64(z
8460: 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 2c 20  Right, &iLimit, 
8470: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
8480: 7a 52 69 67 68 74 29 2c 20 53 51 4c 49 54 45 5f  zRight), SQLITE_
8490: 55 54 46 38 29 3b 0a 20 20 20 20 20 20 69 66 28  UTF8);.      if(
84a0: 20 69 4c 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69   iLimit<-1 ) iLi
84b0: 6d 69 74 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a  mit = -1;.    }.
84c0: 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c      iLimit = sql
84d0: 69 74 65 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c  ite3PagerJournal
84e0: 53 69 7a 65 4c 69 6d 69 74 28 70 50 61 67 65 72  SizeLimit(pPager
84f0: 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72  , iLimit);.    r
8500: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
8510: 50 61 72 73 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f  Parse, "journal_
8520: 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 20 69 4c 69  size_limit", iLi
8530: 6d 69 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  mit);.    break;
8540: 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20  .  }..#endif /* 
8550: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
8560: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 20 20  R_PRAGMAS */..  
8570: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
8580: 5b 64 61 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f  [database.]auto_
8590: 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41  vacuum.  **  PRA
85a0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61  GMA [database.]a
85b0: 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a  uto_vacuum=N.  *
85c0: 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65  *.  ** Get or se
85d0: 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
85e0: 68 65 20 64 61 74 61 62 61 73 65 20 27 61 75 74  he database 'aut
85f0: 6f 2d 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65  o-vacuum' parame
8600: 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61  ter..  ** The va
8610: 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20  lue is one of:  
8620: 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20  0 NONE 1 FULL 2 
8630: 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f  INCREMENTAL.  */
8640: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8650: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
8660: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41    case PragTyp_A
8670: 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20  UTO_VACUUM: {.  
8680: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70    Btree *pBt = p
8690: 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73  Db->pBt;.    ass
86a0: 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20  ert( pBt!=0 );. 
86b0: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
86c0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
86d0: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
86e0: 22 61 75 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73  "auto_vacuum", s
86f0: 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 41 75  qlite3BtreeGetAu
8700: 74 6f 56 61 63 75 75 6d 28 70 42 74 29 29 3b 0a  toVacuum(pBt));.
8710: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8720: 20 69 6e 74 20 65 41 75 74 6f 20 3d 20 67 65 74   int eAuto = get
8730: 41 75 74 6f 56 61 63 75 75 6d 28 7a 52 69 67 68  AutoVacuum(zRigh
8740: 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t);.      assert
8750: 28 20 65 41 75 74 6f 3e 3d 30 20 26 26 20 65 41  ( eAuto>=0 && eA
8760: 75 74 6f 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20  uto<=2 );.      
8770: 64 62 2d 3e 6e 65 78 74 41 75 74 6f 76 61 63 20  db->nextAutovac 
8780: 3d 20 28 75 38 29 65 41 75 74 6f 3b 0a 20 20 20  = (u8)eAuto;.   
8790: 20 20 20 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75     /* Call SetAu
87a0: 74 6f 56 61 63 75 75 6d 28 29 20 74 6f 20 73 65  toVacuum() to se
87b0: 74 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65  t initialize the
87c0: 20 69 6e 74 65 72 6e 61 6c 20 61 75 74 6f 20 61   internal auto a
87d0: 6e 64 0a 20 20 20 20 20 20 2a 2a 20 69 6e 63 72  nd.      ** incr
87e0: 2d 76 61 63 75 75 6d 20 66 6c 61 67 73 2e 20 54  -vacuum flags. T
87f0: 68 69 73 20 69 73 20 72 65 71 75 69 72 65 64 20  his is required 
8800: 69 6e 20 63 61 73 65 20 74 68 69 73 20 63 6f 6e  in case this con
8810: 6e 65 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a  nection.      **
8820: 20 63 72 65 61 74 65 73 20 74 68 65 20 64 61 74   creates the dat
8830: 61 62 61 73 65 20 66 69 6c 65 2e 20 49 74 20 69  abase file. It i
8840: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 68 61 74  s important that
8850: 20 69 74 20 69 73 20 63 72 65 61 74 65 64 0a 20   it is created. 
8860: 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 61 75       ** as an au
8870: 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c  to-vacuum capabl
8880: 65 20 64 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  e db..      */. 
8890: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
88a0: 33 42 74 72 65 65 53 65 74 41 75 74 6f 56 61 63  3BtreeSetAutoVac
88b0: 75 75 6d 28 70 42 74 2c 20 65 41 75 74 6f 29 3b  uum(pBt, eAuto);
88c0: 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
88d0: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 28 65 41 75  QLITE_OK && (eAu
88e0: 74 6f 3d 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d  to==1 || eAuto==
88f0: 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  2) ){.        /*
8900: 20 57 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68   When setting th
8910: 65 20 61 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f  e auto_vacuum mo
8920: 64 65 20 74 6f 20 65 69 74 68 65 72 20 22 66 75  de to either "fu
8930: 6c 6c 22 20 6f 72 20 0a 20 20 20 20 20 20 20 20  ll" or .        
8940: 2a 2a 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  ** "incremental"
8950: 2c 20 77 72 69 74 65 20 74 68 65 20 76 61 6c 75  , write the valu
8960: 65 20 6f 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20  e of meta[6] in 
8970: 74 68 65 20 64 61 74 61 62 61 73 65 0a 20 20 20  the database.   
8980: 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65       ** file. Be
8990: 66 6f 72 65 20 77 72 69 74 69 6e 67 20 74 6f 20  fore writing to 
89a0: 6d 65 74 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74  meta[6], check t
89b0: 68 61 74 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69  hat meta[3] indi
89c0: 63 61 74 65 73 0a 20 20 20 20 20 20 20 20 2a 2a  cates.        **
89d0: 20 74 68 61 74 20 74 68 69 73 20 72 65 61 6c 6c   that this reall
89e0: 79 20 69 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  y is an auto-vac
89f0: 75 75 6d 20 63 61 70 61 62 6c 65 20 64 61 74 61  uum capable data
8a00: 62 61 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f  base..        */
8a10: 0a 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20  .        static 
8a20: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
8a30: 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a   setMeta6[] = {.
8a40: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54            { OP_T
8a50: 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30  ransaction,    0
8a60: 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20  ,         1,    
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c               0},
8a80: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
8a90: 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
8aa0: 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20  ookie,     0,   
8ab0: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
8ac0: 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52   BTREE_LARGEST_R
8ad0: 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20  OOT_PAGE},.     
8ae0: 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20       { OP_If,   
8af0: 20 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20            1,    
8b00: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
8b10: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
8b20: 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 2 */.         
8b30: 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20   { OP_Halt,     
8b40: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c        SQLITE_OK,
8b50: 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20   OE_Abort,      
8b60: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20      0},    /* 3 
8b70: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f  */.          { O
8b80: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20  P_Integer,      
8b90: 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20    0,         1, 
8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8bb0: 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20  0},    /* 4 */. 
8bc0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65           { OP_Se
8bd0: 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  tCookie,      0,
8be0: 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 49           BTREE_I
8bf0: 4e 43 52 5f 56 41 43 55 55 4d 2c 20 31 7d 2c 20  NCR_VACUUM, 1}, 
8c00: 20 20 20 2f 2a 20 35 20 2a 2f 0a 20 20 20 20 20     /* 5 */.     
8c10: 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e     };.        in
8c20: 74 20 69 41 64 64 72 3b 0a 20 20 20 20 20 20 20  t iAddr;.       
8c30: 20 69 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33   iAddr = sqlite3
8c40: 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
8c50: 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 4d 65   ArraySize(setMe
8c60: 74 61 36 29 2c 20 73 65 74 4d 65 74 61 36 29 3b  ta6), setMeta6);
8c70: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8c80: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
8c90: 69 41 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20  iAddr, iDb);.   
8ca0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8cb0: 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64  ChangeP1(v, iAdd
8cc0: 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+1, iDb);.     
8cd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
8ce0: 61 6e 67 65 50 32 28 76 2c 20 69 41 64 64 72 2b  angeP2(v, iAddr+
8cf0: 32 2c 20 69 41 64 64 72 2b 34 29 3b 0a 20 20 20  2, iAddr+4);.   
8d00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8d10: 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64  ChangeP1(v, iAdd
8d20: 72 2b 34 2c 20 65 41 75 74 6f 2d 31 29 3b 0a 20  r+4, eAuto-1);. 
8d30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
8d40: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
8d50: 64 64 72 2b 35 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+5, iDb);.   
8d60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8d70: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
8d80: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
8d90: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
8da0: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a  #endif..  /*.  *
8db0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
8dc0: 61 73 65 2e 5d 69 6e 63 72 65 6d 65 6e 74 61 6c  ase.]incremental
8dd0: 5f 76 61 63 75 75 6d 28 4e 29 0a 20 20 2a 2a 0a  _vacuum(N).  **.
8de0: 20 20 2a 2a 20 44 6f 20 4e 20 73 74 65 70 73 20    ** Do N steps 
8df0: 6f 66 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  of incremental v
8e00: 61 63 75 75 6d 69 6e 67 20 6f 6e 20 61 20 64 61  acuuming on a da
8e10: 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 23 69 66  tabase..  */.#if
8e20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8e30: 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63 61  _AUTOVACUUM.  ca
8e40: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 43 52 45  se PragTyp_INCRE
8e50: 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d 3a 20 7b  MENTAL_VACUUM: {
8e60: 0a 20 20 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  .    int iLimit,
8e70: 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28 20 7a   addr;.    if( z
8e80: 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21 73 71 6c  Right==0 || !sql
8e90: 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69  ite3GetInt32(zRi
8ea0: 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 20 7c 7c  ght, &iLimit) ||
8eb0: 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a 20 20   iLimit<=0 ){.  
8ec0: 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 30 78 37      iLimit = 0x7
8ed0: 66 66 66 66 66 66 66 3b 0a 20 20 20 20 7d 0a 20  fffffff;.    }. 
8ee0: 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57     sqlite3BeginW
8ef0: 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50  riteOperation(pP
8f00: 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20  arse, 0, iDb);. 
8f10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8f20: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
8f30: 65 72 2c 20 69 4c 69 6d 69 74 2c 20 31 29 3b 0a  er, iLimit, 1);.
8f40: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
8f50: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
8f60: 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 2c 20 69  OP_IncrVacuum, i
8f70: 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Db);.    sqlite3
8f80: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
8f90: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 29 3b 0a  _ResultRow, 1);.
8fa0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8fb0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
8fc0: 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20  mm, 1, -1);.    
8fd0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8fe0: 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  2(v, OP_IfPos, 1
8ff0: 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 73 71 6c  , addr);.    sql
9000: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
9010: 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 62  (v, addr);.    b
9020: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
9030: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
9040: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
9050: 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  MAS.  /*.  **  P
9060: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
9070: 5d 63 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a  ]cache_size.  **
9080: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
9090: 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 3d 4e  se.]cache_size=N
90a0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
90b0: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
90c0: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 6f  s the current lo
90d0: 63 61 6c 20 73 65 74 74 69 6e 67 20 66 6f 72 20  cal setting for 
90e0: 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  the.  ** page ca
90f0: 63 68 65 20 73 69 7a 65 2e 20 54 68 65 20 73 65  che size. The se
9100: 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 74  cond form sets t
9110: 68 65 20 6c 6f 63 61 6c 0a 20 20 2a 2a 20 70 61  he local.  ** pa
9120: 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61  ge cache size va
9130: 6c 75 65 2e 20 20 49 66 20 4e 20 69 73 20 70 6f  lue.  If N is po
9140: 73 69 74 69 76 65 20 74 68 65 6e 20 74 68 61 74  sitive then that
9150: 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d   is the.  ** num
9160: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
9170: 74 68 65 20 63 61 63 68 65 2e 20 20 49 66 20 4e  the cache.  If N
9180: 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68   is negative, th
9190: 65 6e 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62  en the.  ** numb
91a0: 65 72 20 6f 66 20 70 61 67 65 73 20 69 73 20 61  er of pages is a
91b0: 64 6a 75 73 74 65 64 20 73 6f 20 74 68 61 74 20  djusted so that 
91c0: 74 68 65 20 63 61 63 68 65 20 75 73 65 73 20 2d  the cache uses -
91d0: 4e 20 6b 69 62 69 62 79 74 65 73 0a 20 20 2a 2a  N kibibytes.  **
91e0: 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2f   of memory..  */
91f0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
9200: 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20  CACHE_SIZE: {.  
9210: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
9220: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
9230: 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
9240: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
9250: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
9260: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
9270: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 70   "cache_size", p
9280: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
9290: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65  he_size);.    }e
92a0: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
92b0: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f  ize = sqlite3Ato
92c0: 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  i(zRight);.     
92d0: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
92e0: 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65  ache_size = size
92f0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
9300: 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65  treeSetCacheSize
9310: 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e  (pDb->pBt, pDb->
9320: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
9330: 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ize);.    }.    
9340: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
9350: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
9360: 61 74 61 62 61 73 65 2e 5d 6d 6d 61 70 5f 73 69  atabase.]mmap_si
9370: 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ze(N).  **.  ** 
9380: 55 73 65 64 20 74 6f 20 73 65 74 20 6d 61 70 70  Used to set mapp
9390: 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20  ing size limit. 
93a0: 54 68 65 20 6d 61 70 70 69 6e 67 20 73 69 7a 65  The mapping size
93b0: 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75   limit is.  ** u
93c0: 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  sed to limit the
93d0: 20 61 67 67 72 65 67 61 74 65 20 73 69 7a 65 20   aggregate size 
93e0: 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61  of all memory ma
93f0: 70 70 65 64 20 72 65 67 69 6f 6e 73 20 6f 66 20  pped regions of 
9400: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
9410: 65 20 66 69 6c 65 2e 20 49 66 20 74 68 69 73 20  e file. If this 
9420: 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 65 74  parameter is set
9430: 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d   to zero, then m
9440: 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 0a 20 20  emory mapping.  
9450: 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  ** is not used a
9460: 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20  t all.  If N is 
9470: 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74  negative, then t
9480: 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72  he default memor
9490: 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74  y map.  ** limit
94a0: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 73   determined by s
94b0: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
94c0: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50  LITE_CONFIG_MMAP
94d0: 5f 53 49 5a 45 29 20 69 73 20 73 65 74 2e 0a 20  _SIZE) is set.. 
94e0: 20 2a 2a 20 54 68 65 20 70 61 72 61 6d 65 74 65   ** The paramete
94f0: 72 20 4e 20 69 73 20 6d 65 61 73 75 72 65 64 20  r N is measured 
9500: 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20  in bytes..  **. 
9510: 20 2a 2a 20 54 68 69 73 20 76 61 6c 75 65 20 69   ** This value i
9520: 73 20 61 64 76 69 73 6f 72 79 2e 20 20 54 68 65  s advisory.  The
9530: 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 20   underlying VFS 
9540: 69 73 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72  is free to memor
9550: 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69  y map.  ** as li
9560: 74 74 6c 65 20 6f 72 20 61 73 20 6d 75 63 68 20  ttle or as much 
9570: 61 73 20 69 74 20 77 61 6e 74 73 2e 20 20 45 78  as it wants.  Ex
9580: 63 65 70 74 2c 20 69 66 20 4e 20 69 73 20 73 65  cept, if N is se
9590: 74 20 74 6f 20 30 20 74 68 65 6e 20 74 68 65 0a  t to 0 then the.
95a0: 20 20 2a 2a 20 75 70 70 65 72 20 6c 61 79 65 72    ** upper layer
95b0: 73 20 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76  s will never inv
95c0: 6f 6b 65 20 74 68 65 20 78 46 65 74 63 68 20 69  oke the xFetch i
95d0: 6e 74 65 72 66 61 63 65 73 20 74 6f 20 74 68 65  nterfaces to the
95e0: 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   VFS..  */.  cas
95f0: 65 20 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53  e PragTyp_MMAP_S
9600: 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  IZE: {.    sqlit
9610: 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66  e3_int64 sz;.#if
9620: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
9630: 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61 73 73 65  _SIZE>0.    asse
9640: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
9650: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
9660: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
9670: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
9680: 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20    int ii;.      
9690: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 52  sqlite3Atoi64(zR
96a0: 69 67 68 74 2c 20 26 73 7a 2c 20 73 71 6c 69 74  ight, &sz, sqlit
96b0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68  e3Strlen30(zRigh
96c0: 74 29 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  t), SQLITE_UTF8)
96d0: 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c 30  ;.      if( sz<0
96e0: 20 29 20 73 7a 20 3d 20 73 71 6c 69 74 65 33 47   ) sz = sqlite3G
96f0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d 6d  lobalConfig.szMm
9700: 61 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49  ap;.      if( pI
9710: 64 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e 73  d2->n==0 ) db->s
9720: 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20 20  zMmap = sz;.    
9730: 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62    for(ii=db->nDb
9740: 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29  -1; ii>=0; ii--)
9750: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62  {.        if( db
9760: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26  ->aDb[ii].pBt &&
9770: 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64   (ii==iDb || pId
9780: 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20  2->n==0) ){.    
9790: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
97a0: 65 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28 64  eeSetMmapLimit(d
97b0: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
97c0: 73 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  sz);.        }. 
97d0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
97e0: 20 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72 63   sz = -1;.    rc
97f0: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f   = sqlite3_file_
9800: 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c  control(db, zDb,
9810: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d 4d   SQLITE_FCNTL_MM
9820: 41 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a 23  AP_SIZE, &sz);.#
9830: 65 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20 30 3b  else.    sz = 0;
9840: 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
9850: 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  _OK;.#endif.    
9860: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
9870: 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  K ){.      retur
9880: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
9890: 65 2c 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 20  e, "mmap_size", 
98a0: 73 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  sz);.    }else i
98b0: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc!=SQLITE_NO
98c0: 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 20 20  TFOUND ){.      
98d0: 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a  pParse->nErr++;.
98e0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63        pParse->rc
98f0: 20 3d 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20 20   = rc;.    }.   
9900: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
9910: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
9920: 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 2a 2a 20  temp_store.  ** 
9930: 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74    PRAGMA temp_st
9940: 6f 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22 7c  ore = "default"|
9950: 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22 0a  "memory"|"file".
9960: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
9970: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
9980: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74  l value of the t
9990: 65 6d 70 5f 73 74 6f 72 65 20 66 6c 61 67 2e 20  emp_store flag. 
99a0: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
99b0: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64  he local value d
99c0: 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61  oes not make cha
99d0: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b  nges to the disk
99e0: 20 66 69 6c 65 20 61 6e 64 20 74 68 65 20 64 65   file and the de
99f0: 66 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75 65  fault.  ** value
9a00: 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65   will be restore
9a10: 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20  d the next time 
9a20: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
9a30: 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  opened..  **.  *
9a40: 2a 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20 69  * Note that it i
9a50: 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74  s possible for t
9a60: 68 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 69  he library compi
9a70: 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options 
9a80: 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64 65  to.  ** override
9a90: 20 74 68 69 73 20 73 65 74 74 69 6e 67 0a 20 20   this setting.  
9aa0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
9ab0: 70 5f 54 45 4d 50 5f 53 54 4f 52 45 3a 20 7b 0a  p_TEMP_STORE: {.
9ac0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
9ad0: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
9ae0: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
9af0: 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 20 64   "temp_store", d
9b00: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 29 3b 0a  b->temp_store);.
9b10: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
9b20: 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61   changeTempStora
9b30: 67 65 28 70 50 61 72 73 65 2c 20 7a 52 69 67 68  ge(pParse, zRigh
9b40: 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  t);.    }.    br
9b50: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
9b60: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d   **   PRAGMA tem
9b70: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
9b80: 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  y.  **   PRAGMA 
9b90: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
9ba0: 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65 63  tory = ""|"direc
9bb0: 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a  tory_name".  **.
9bc0: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
9bd0: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
9be0: 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73  ue of the temp_s
9bf0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 66  tore_directory f
9c00: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
9c10: 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65   ** the value se
9c20: 74 73 20 61 20 73 70 65 63 69 66 69 63 20 64 69  ts a specific di
9c30: 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73  rectory to be us
9c40: 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ed for temporary
9c50: 20 66 69 6c 65 73 2e 0a 20 20 2a 2a 20 53 65 74   files..  ** Set
9c60: 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73  ting to a null s
9c70: 74 72 69 6e 67 20 72 65 76 65 72 74 73 20 74 6f  tring reverts to
9c80: 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 6d   the default tem
9c90: 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79  porary directory
9ca0: 20 73 65 61 72 63 68 2e 0a 20 20 2a 2a 20 49 66   search..  ** If
9cb0: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
9cc0: 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 2c  tory is changed,
9cd0: 20 74 68 65 6e 20 69 6e 76 61 6c 69 64 61 74 65   then invalidate
9ce0: 54 65 6d 70 53 74 6f 72 61 67 65 2e 0a 20 20 2a  TempStorage..  *
9cf0: 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  *.  */.  case Pr
9d00: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
9d10: 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20  _DIRECTORY: {.  
9d20: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
9d30: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
9d40: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
9d50: 79 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  y ){.        sql
9d60: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
9d70: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
9d80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
9d90: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
9da0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20  LNAME_NAME, .   
9db0: 20 20 20 20 20 20 20 20 20 22 74 65 6d 70 5f 73           "temp_s
9dc0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c  tore_directory",
9dd0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
9de0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9df0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
9e00: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20  _String8, 0, 1, 
9e10: 30 2c 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  0, sqlite3_temp_
9e20: 64 69 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20  directory, 0);. 
9e30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9e40: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
9e50: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
9e60: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
9e70: 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  se{.#ifndef SQLI
9e80: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20  TE_OMIT_WSD.    
9e90: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
9ea0: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  ){.        int r
9eb0: 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  es;.        rc =
9ec0: 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73   sqlite3OsAccess
9ed0: 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68  (db->pVfs, zRigh
9ee0: 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53  t, SQLITE_ACCESS
9ef0: 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72 65 73  _READWRITE, &res
9f00: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
9f10: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
9f20: 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
9f30: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
9f40: 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74  Msg(pParse, "not
9f50: 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65   a writable dire
9f60: 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20  ctory");.       
9f70: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
9f80: 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ut;.        }.  
9f90: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
9fa0: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
9fb0: 45 3d 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20 28  E==0.       || (
9fc0: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
9fd0: 45 3d 3d 31 20 26 26 20 64 62 2d 3e 74 65 6d 70  E==1 && db->temp
9fe0: 5f 73 74 6f 72 65 3c 3d 31 29 0a 20 20 20 20 20  _store<=1).     
9ff0: 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d    || (SQLITE_TEM
a000: 50 5f 53 54 4f 52 45 3d 3d 32 20 26 26 20 64 62  P_STORE==2 && db
a010: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 31 29  ->temp_store==1)
a020: 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
a030: 20 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70    invalidateTemp
a040: 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 29 3b  Storage(pParse);
a050: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
a060: 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69  qlite3_free(sqli
a070: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
a080: 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ry);.      if( z
a090: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
a0a0: 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65 6d 70      sqlite3_temp
a0b0: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c  _directory = sql
a0c0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
a0d0: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
a0e0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
a0f0: 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69   sqlite3_temp_di
a100: 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20  rectory = 0;.   
a110: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
a120: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a  QLITE_OMIT_WSD *
a130: 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  /.    }.    brea
a140: 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 53 51 4c 49  k;.  }..#if SQLI
a150: 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 2f 2a 0a 20  TE_OS_WIN.  /*. 
a160: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74   **   PRAGMA dat
a170: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
a180: 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  y.  **   PRAGMA 
a190: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
a1a0: 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65 63  tory = ""|"direc
a1b0: 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a 0a  tory_name".  **.
a1c0: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
a1d0: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
a1e0: 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 5f 73  ue of the data_s
a1f0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 66  tore_directory f
a200: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
a210: 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73 65   ** the value se
a220: 74 73 20 61 20 73 70 65 63 69 66 69 63 20 64 69  ts a specific di
a230: 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75 73  rectory to be us
a240: 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  ed for database 
a250: 66 69 6c 65 73 20 74 68 61 74 0a 20 20 2a 2a 20  files that.  ** 
a260: 77 65 72 65 20 73 70 65 63 69 66 69 65 64 20 77  were specified w
a270: 69 74 68 20 61 20 72 65 6c 61 74 69 76 65 20 70  ith a relative p
a280: 61 74 68 6e 61 6d 65 2e 20 20 53 65 74 74 69 6e  athname.  Settin
a290: 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69  g to a null stri
a2a0: 6e 67 20 72 65 76 65 72 74 73 0a 20 20 2a 2a 20  ng reverts.  ** 
a2b0: 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20 64  to the default d
a2c0: 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72  atabase director
a2d0: 79 2c 20 77 68 69 63 68 20 66 6f 72 20 64 61 74  y, which for dat
a2e0: 61 62 61 73 65 20 66 69 6c 65 73 20 73 70 65 63  abase files spec
a2f0: 69 66 69 65 64 20 77 69 74 68 0a 20 20 2a 2a 20  ified with.  ** 
a300: 61 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 20  a relative path 
a310: 77 69 6c 6c 20 70 72 6f 62 61 62 6c 79 20 62 65  will probably be
a320: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63 75   based on the cu
a330: 72 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20  rrent directory 
a340: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 72 6f  for the.  ** pro
a350: 63 65 73 73 2e 20 20 44 61 74 61 62 61 73 65 20  cess.  Database 
a360: 66 69 6c 65 20 73 70 65 63 69 66 69 65 64 20 77  file specified w
a370: 69 74 68 20 61 6e 20 61 62 73 6f 6c 75 74 65 20  ith an absolute 
a380: 70 61 74 68 20 61 72 65 20 6e 6f 74 20 69 6d 70  path are not imp
a390: 61 63 74 65 64 0a 20 20 2a 2a 20 62 79 20 74 68  acted.  ** by th
a3a0: 69 73 20 73 65 74 74 69 6e 67 2c 20 72 65 67 61  is setting, rega
a3b0: 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20 76 61  rdless of its va
a3c0: 6c 75 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  lue..  **.  */. 
a3d0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 41   case PragTyp_DA
a3e0: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
a3f0: 52 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a  RY: {.    if( !z
a400: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
a410: 66 28 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  f( sqlite3_data_
a420: 64 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20  directory ){.   
a430: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a440: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
a450: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
a460: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
a470: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
a480: 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  ME, .           
a490: 20 22 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72   "data_store_dir
a4a0: 65 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f  ectory", SQLITE_
a4b0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
a4c0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a4d0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
a4e0: 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74  , 0, 1, 0, sqlit
a4f0: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
a500: 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  y, 0);.        s
a510: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
a520: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
a530: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  , 1, 1);.      }
a540: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e  .    }else{.#ifn
a550: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a560: 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52  WSD.      if( zR
a570: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
a580: 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20     int res;.    
a590: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
a5a0: 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66  OsAccess(db->pVf
a5b0: 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54  s, zRight, SQLIT
a5c0: 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49  E_ACCESS_READWRI
a5d0: 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  TE, &res);.     
a5e0: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
a5f0: 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
a600: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
a610: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
a620: 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61  se, "not a writa
a630: 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b  ble directory");
a640: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
a650: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
a660: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
a670: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
a680: 28 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69  (sqlite3_data_di
a690: 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20  rectory);.      
a6a0: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
a6b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a6c0: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20  _data_directory 
a6d0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
a6e0: 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b  f("%s", zRight);
a6f0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
a700: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61        sqlite3_da
a710: 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30  ta_directory = 0
a720: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
a730: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
a740: 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  WSD */.    }.   
a750: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
a760: 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  if..#if SQLITE_E
a770: 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54  NABLE_LOCKING_ST
a780: 59 4c 45 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  YLE.  /*.  **   
a790: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
a7a0: 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  .]lock_proxy_fil
a7b0: 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  e.  **   PRAGMA 
a7c0: 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f  [database.]lock_
a7d0: 70 72 6f 78 79 5f 66 69 6c 65 20 3d 20 22 3a 61  proxy_file = ":a
a7e0: 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f 66 69 6c 65  uto:"|"lock_file
a7f0: 5f 70 61 74 68 22 0a 20 20 2a 2a 0a 20 20 2a 2a  _path".  **.  **
a800: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
a810: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
a820: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20  lock_proxy_file 
a830: 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a  flag.  Changing.
a840: 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73    ** the value s
a850: 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20 66  ets a specific f
a860: 69 6c 65 20 74 6f 20 62 65 20 75 73 65 64 20 66  ile to be used f
a870: 6f 72 20 64 61 74 61 62 61 73 65 20 61 63 63 65  or database acce
a880: 73 73 20 6c 6f 63 6b 73 2e 0a 20 20 2a 2a 0a 20  ss locks..  **. 
a890: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
a8a0: 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58 59 5f 46 49  yp_LOCK_PROXY_FI
a8b0: 4c 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a  LE: {.    if( !z
a8c0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 50  Right ){.      P
a8d0: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
a8e0: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
a8f0: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
a900: 20 20 63 68 61 72 20 2a 70 72 6f 78 79 5f 66 69    char *proxy_fi
a910: 6c 65 5f 70 61 74 68 20 3d 20 4e 55 4c 4c 3b 0a  le_path = NULL;.
a920: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69        sqlite3_fi
a930: 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c 69  le *pFile = sqli
a940: 74 65 33 50 61 67 65 72 46 69 6c 65 28 70 50 61  te3PagerFile(pPa
a950: 67 65 72 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ger);.      sqli
a960: 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c  te3OsFileControl
a970: 48 69 6e 74 28 70 46 69 6c 65 2c 20 53 51 4c 49  Hint(pFile, SQLI
a980: 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_GET_LOCKPROXY
a990: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9b0: 20 20 26 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61    &proxy_file_pa
a9c0: 74 68 29 3b 0a 20 20 20 20 20 20 0a 20 20 20 20  th);.      .    
a9d0: 20 20 69 66 28 20 70 72 6f 78 79 5f 66 69 6c 65    if( proxy_file
a9e0: 5f 70 61 74 68 20 29 7b 0a 20 20 20 20 20 20 20  _path ){.       
a9f0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
aa00: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
aa10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
aa20: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
aa30: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
aa40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
aa60: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22  lock_proxy_file"
aa70: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
aa80: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
aa90: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
aaa0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
aab0: 20 30 2c 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70   0, proxy_file_p
aac0: 61 74 68 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ath, 0);.       
aad0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
aae0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
aaf0: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 20  ow, 1, 1);.     
ab00: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20   }.    }else{.  
ab10: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
ab20: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
ab30: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
ab40: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
ab50: 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c  ile *pFile = sql
ab60: 69 74 65 33 50 61 67 65 72 46 69 6c 65 28 70 50  ite3PagerFile(pP
ab70: 61 67 65 72 29 3b 0a 20 20 20 20 20 20 69 6e 74  ager);.      int
ab80: 20 72 65 73 3b 0a 20 20 20 20 20 20 69 66 28 20   res;.      if( 
ab90: 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20  zRight[0] ){.   
aba0: 20 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33       res=sqlite3
abb0: 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46  OsFileControl(pF
abc0: 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f  ile, SQLITE_SET_
abd0: 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a  LOCKPROXYFILE, .
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac00: 20 20 20 20 20 7a 52 69 67 68 74 29 3b 0a 20 20       zRight);.  
ac10: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20      } else {.   
ac20: 20 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65 33       res=sqlite3
ac30: 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70 46  OsFileControl(pF
ac40: 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54 5f  ile, SQLITE_SET_
ac50: 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a  LOCKPROXYFILE, .
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac80: 20 20 20 20 20 4e 55 4c 4c 29 3b 0a 20 20 20 20       NULL);.    
ac90: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
aca0: 73 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  s!=SQLITE_OK ){.
acb0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
acc0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
acd0: 22 66 61 69 6c 65 64 20 74 6f 20 73 65 74 20 6c  "failed to set l
ace0: 6f 63 6b 20 70 72 6f 78 79 20 66 69 6c 65 22 29  ock proxy file")
acf0: 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70  ;.        goto p
ad00: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
ad10: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
ad20: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f  ak;.  }.#endif /
ad30: 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
ad40: 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 20 2a 2f  LOCKING_STYLE */
ad50: 20 20 20 20 20 20 0a 20 20 20 20 0a 20 20 2f 2a        .    .  /*
ad60: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
ad70: 64 61 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72  database.]synchr
ad80: 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20 20 50 52 41  onous.  **   PRA
ad90: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
ada0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 7c 4f  ynchronous=OFF|O
adb0: 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c 0a 20 20  N|NORMAL|FULL.  
adc0: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
add0: 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20  r set the local 
ade0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 79 6e  value of the syn
adf0: 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20 20  chronous flag.  
ae00: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
ae10: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64 6f  e local value do
ae20: 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61 6e  es not make chan
ae30: 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b 20  ges to the disk 
ae40: 66 69 6c 65 20 61 6e 64 20 74 68 65 0a 20 20 2a  file and the.  *
ae50: 2a 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  * default value 
ae60: 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65 64  will be restored
ae70: 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20 74   the next time t
ae80: 68 65 20 64 61 74 61 62 61 73 65 20 69 73 0a 20  he database is. 
ae90: 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2f   ** opened..  */
aea0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
aeb0: 53 59 4e 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a 20  SYNCHRONOUS: {. 
aec0: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
aed0: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
aee0: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
aef0: 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 20 70  "synchronous", p
af00: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
af10: 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  -1);.    }else{.
af20: 20 20 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61        if( !db->a
af30: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
af40: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
af50: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 0a 20 20  rMsg(pParse, .  
af60: 20 20 20 20 20 20 20 20 20 20 22 53 61 66 65 74            "Safet
af70: 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20  y level may not 
af80: 62 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69 64  be changed insid
af90: 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  e a transaction"
afa0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
afb0: 20 20 20 20 20 20 20 20 70 44 62 2d 3e 73 61 66          pDb->saf
afc0: 65 74 79 5f 6c 65 76 65 6c 20 3d 20 67 65 74 53  ety_level = getS
afd0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68  afetyLevel(zRigh
afe0: 74 2c 30 2c 31 29 2b 31 3b 0a 20 20 20 20 20 20  t,0,1)+1;.      
aff0: 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61    setAllPagerFla
b000: 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a  gs(db);.      }.
b010: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
b020: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
b030: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
b040: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
b050: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b060: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20 20  _FLAG_PRAGMAS.  
b070: 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c 41  case PragTyp_FLA
b080: 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  G: {.    if( zRi
b090: 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ght==0 ){.      
b0a0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
b0b0: 70 50 61 72 73 65 2c 20 61 50 72 61 67 6d 61 4e  pParse, aPragmaN
b0c0: 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 2c  ames[mid].zName,
b0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b0e0: 20 20 20 20 20 20 28 64 62 2d 3e 66 6c 61 67 73        (db->flags
b0f0: 20 26 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b   & aPragmaNames[
b100: 6d 69 64 5d 2e 69 41 72 67 29 21 3d 30 20 29 3b  mid].iArg)!=0 );
b110: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
b120: 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20 61 50 72    int mask = aPr
b130: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 69  agmaNames[mid].i
b140: 41 72 67 3b 20 20 20 20 2f 2a 20 4d 61 73 6b 20  Arg;    /* Mask 
b150: 6f 66 20 62 69 74 73 20 74 6f 20 73 65 74 20 6f  of bits to set o
b160: 72 20 63 6c 65 61 72 2e 20 2a 2f 0a 20 20 20 20  r clear. */.    
b170: 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f    if( db->autoCo
b180: 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  mmit==0 ){.     
b190: 20 20 20 2f 2a 20 46 6f 72 65 69 67 6e 20 6b 65     /* Foreign ke
b1a0: 79 20 73 75 70 70 6f 72 74 20 6d 61 79 20 6e 6f  y support may no
b1b0: 74 20 62 65 20 65 6e 61 62 6c 65 64 20 6f 72 20  t be enabled or 
b1c0: 64 69 73 61 62 6c 65 64 20 77 68 69 6c 65 20 6e  disabled while n
b1d0: 6f 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 69 6e  ot.        ** in
b1e0: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f 64   auto-commit mod
b1f0: 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d  e.  */.        m
b200: 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f  ask &= ~(SQLITE_
b210: 46 6f 72 65 69 67 6e 4b 65 79 73 29 3b 0a 20 20  ForeignKeys);.  
b220: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
b230: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
b240: 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b  an(zRight, 0) ){
b250: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61  .        db->fla
b260: 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20 20  gs |= mask;.    
b270: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
b280: 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 6d   db->flags &= ~m
b290: 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ask;.        if(
b2a0: 20 6d 61 73 6b 3d 3d 53 51 4c 49 54 45 5f 44 65   mask==SQLITE_De
b2b0: 66 65 72 46 4b 73 20 29 20 64 62 2d 3e 6e 44 65  ferFKs ) db->nDe
b2c0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
b2d0: 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  0;.      }..    
b2e0: 20 20 2f 2a 20 4d 61 6e 79 20 6f 66 20 74 68 65    /* Many of the
b2f0: 20 66 6c 61 67 2d 70 72 61 67 6d 61 73 20 6d 6f   flag-pragmas mo
b300: 64 69 66 79 20 74 68 65 20 63 6f 64 65 20 67 65  dify the code ge
b310: 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 53  nerated by the S
b320: 51 4c 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d  QL .      ** com
b330: 70 69 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e 74  piler (eg. count
b340: 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f 20 61 64  _changes). So ad
b350: 64 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65  d an opcode to e
b360: 78 70 69 72 65 20 61 6c 6c 0a 20 20 20 20 20 20  xpire all.      
b370: 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20  ** compiled SQL 
b380: 73 74 61 74 65 6d 65 6e 74 73 20 61 66 74 65 72  statements after
b390: 20 6d 6f 64 69 66 79 69 6e 67 20 61 20 70 72 61   modifying a pra
b3a0: 67 6d 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 20  gma value..     
b3b0: 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
b3c0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
b3d0: 50 5f 45 78 70 69 72 65 2c 20 30 2c 20 30 29 3b  P_Expire, 0, 0);
b3e0: 0a 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 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
b410: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
b420: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
b430: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
b440: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
b450: 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  EMA_PRAGMAS.  /*
b460: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
b470: 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65  able_info(<table
b480: 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  >).  **.  ** Ret
b490: 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  urn a single row
b4a0: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
b4b0: 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61   of the named ta
b4c0: 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73  ble. The columns
b4d0: 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74   of.  ** the ret
b4e0: 75 72 6e 65 64 20 64 61 74 61 20 73 65 74 20 61  urned data set a
b4f0: 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69  re:.  **.  ** ci
b500: 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  d:        Column
b510: 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72   id (numbered fr
b520: 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
b530: 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20 30 29  , starting at 0)
b540: 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20  .  ** name:     
b550: 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20    Column name.  
b560: 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20 43  ** type:       C
b570: 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f  olumn declaratio
b580: 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74  n type..  ** not
b590: 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66  null:    True if
b5a0: 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70   'NOT NULL' is p
b5b0: 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65  art of column de
b5c0: 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64  claration.  ** d
b5d0: 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64  flt_value: The d
b5e0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
b5f0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20   the column, if 
b600: 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  any..  */.  case
b610: 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49   PragTyp_TABLE_I
b620: 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20  NFO: if( zRight 
b630: 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  ){.    Table *pT
b640: 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73  ab;.    pTab = s
b650: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
b660: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
b670: 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29  ;.    if( pTab )
b680: 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b  {.      int i, k
b690: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64  ;.      int nHid
b6a0: 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 43  den = 0;.      C
b6b0: 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20  olumn *pCol;.   
b6c0: 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 3b 0a 20     Index *pPk;. 
b6d0: 20 20 20 20 20 66 6f 72 28 70 50 6b 3d 70 54 61       for(pPk=pTa
b6e0: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 50 6b 20 26  b->pIndex; pPk &
b6f0: 26 20 70 50 6b 2d 3e 61 75 74 6f 49 6e 64 65 78  & pPk->autoIndex
b700: 21 3d 32 3b 20 70 50 6b 3d 70 50 6b 2d 3e 70 4e  !=2; pPk=pPk->pN
b710: 65 78 74 29 7b 7d 0a 20 20 20 20 20 20 73 71 6c  ext){}.      sql
b720: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
b730: 6c 73 28 76 2c 20 36 29 3b 0a 20 20 20 20 20 20  ls(v, 6);.      
b740: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36  pParse->nMem = 6
b750: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43  ;.      sqlite3C
b760: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
b770: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
b780: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
b790: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
b7a0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
b7b0: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
b7c0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
b7d0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
b7e0: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
b7f0: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
b800: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
b810: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
b820: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
b830: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 79  OLNAME_NAME, "ty
b840: 70 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  pe", SQLITE_STAT
b850: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
b860: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
b870: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
b880: 41 4d 45 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20  AME, "notnull", 
b890: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
b8a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b8b0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34  eSetColName(v, 4
b8c0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
b8d0: 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20 53 51  "dflt_value", SQ
b8e0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
b8f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
b900: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20  etColName(v, 5, 
b910: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70  COLNAME_NAME, "p
b920: 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  k", SQLITE_STATI
b930: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
b940: 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61  3ViewGetColumnNa
b950: 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62  mes(pParse, pTab
b960: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
b970: 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f  , pCol=pTab->aCo
b980: 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b  l; i<pTab->nCol;
b990: 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20   i++, pCol++){. 
b9a0: 20 20 20 20 20 20 20 69 66 28 20 49 73 48 69 64         if( IsHid
b9b0: 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20  denColumn(pCol) 
b9c0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 48 69  ){.          nHi
b9d0: 64 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20  dden++;.        
b9e0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20    continue;.    
b9f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
ba00: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
ba10: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
ba20: 2d 6e 48 69 64 64 65 6e 2c 20 31 29 3b 0a 20 20  -nHidden, 1);.  
ba30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ba40: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
ba50: 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
ba60: 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b  pCol->zName, 0);
ba70: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ba80: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
ba90: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
baa0: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 43  0,.           pC
bab0: 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f 6c  ol->zType ? pCol
bac0: 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c 20 30 29  ->zType : "", 0)
bad0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
bae0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
baf0: 50 5f 49 6e 74 65 67 65 72 2c 20 28 70 43 6f 6c  P_Integer, (pCol
bb00: 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a 20  ->notNull ? 1 : 
bb10: 30 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20  0), 4);.        
bb20: 69 66 28 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74 20  if( pCol->zDflt 
bb30: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
bb40: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
bb50: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
bb60: 20 35 2c 20 30 2c 20 28 63 68 61 72 2a 29 70 43   5, 0, (char*)pC
bb70: 6f 6c 2d 3e 7a 44 66 6c 74 2c 20 30 29 3b 0a 20  ol->zDflt, 0);. 
bb80: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
bb90: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bba0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
bbb0: 4e 75 6c 6c 2c 20 30 2c 20 35 29 3b 0a 20 20 20  Null, 0, 5);.   
bbc0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
bbd0: 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61  f( (pCol->colFla
bbe0: 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50 52 49  gs & COLFLAG_PRI
bbf0: 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20 20 20  MKEY)==0 ){.    
bc00: 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20        k = 0;.   
bc10: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70       }else if( p
bc20: 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  Pk==0 ){.       
bc30: 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20     k = 1;.      
bc40: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
bc50: 20 20 20 66 6f 72 28 6b 3d 31 3b 20 41 4c 57 41     for(k=1; ALWA
bc60: 59 53 28 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c  YS(k<=pTab->nCol
bc70: 29 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75  ) && pPk->aiColu
bc80: 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29  mn[k-1]!=i; k++)
bc90: 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  {}.        }.   
bca0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bcb0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
bcc0: 65 67 65 72 2c 20 6b 2c 20 36 29 3b 0a 20 20 20  eger, k, 6);.   
bcd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bce0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
bcf0: 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20  ultRow, 1, 6);. 
bd00: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
bd10: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
bd20: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
bd30: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
bd40: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
bd50: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
bd60: 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d  pTab;.    pIdx =
bd70: 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65   sqlite3FindInde
bd80: 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  x(db, zRight, zD
bd90: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  b);.    if( pIdx
bda0: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
bdb0: 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20 70 49  .      pTab = pI
bdc0: 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20  dx->pTable;.    
bdd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
bde0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20  NumCols(v, 3);. 
bdf0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
be00: 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 73 71 6c  m = 3;.      sql
be10: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
be20: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
be30: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
be40: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
be50: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
be60: 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51 4c 49  E, "seqno", SQLI
be70: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
be80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
be90: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
bea0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64  LNAME_NAME, "cid
beb0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
bec0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
bed0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
bee0: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
bef0: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
bf00: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
bf10: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 49 64 78   for(i=0; i<pIdx
bf20: 2d 3e 6e 43 6f 6c 75 6d 6e 3b 20 69 2b 2b 29 7b  ->nColumn; i++){
bf30: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 63 6e 75  .        int cnu
bf40: 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75  m = pIdx->aiColu
bf50: 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73  mn[i];.        s
bf60: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
bf70: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
bf80: 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  i, 1);.        s
bf90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
bfa0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
bfb0: 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20 20 20 20  cnum, 2);.      
bfc0: 20 20 61 73 73 65 72 74 28 20 70 54 61 62 2d 3e    assert( pTab->
bfd0: 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20 20 20  nCol>cnum );.   
bfe0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bff0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
c000: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70  ing8, 0, 3, 0, p
c010: 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e  Tab->aCol[cnum].
c020: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
c030: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c040: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
c050: 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20  tRow, 1, 3);.   
c060: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
c070: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
c080: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49  PragTyp_INDEX_LI
c090: 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  ST: if( zRight )
c0a0: 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
c0b0: 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  x;.    Table *pT
c0c0: 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20  ab;.    int i;. 
c0d0: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
c0e0: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
c0f0: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
c100: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
c110: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
c120: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
c130: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c140: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29  SetNumCols(v, 4)
c150: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
c160: 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 20 20  nMem = 4;.      
c170: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
c180: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
c190: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
c1a0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c1b0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
c1c0: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
c1d0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c1e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c1f0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
c200: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
c210: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
c220: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
c230: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c240: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
c250: 41 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c 20 53  AME, "unique", S
c260: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c270: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c280: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c  SetColName(v, 3,
c290: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
c2a0: 61 76 67 72 6f 77 73 69 7a 65 22 2c 20 53 51 4c  avgrowsize", SQL
c2b0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c2c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c2d0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c2e0: 65 72 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 20  er, 0, 1);.     
c2f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c300: 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30  p2(v, OP_Null, 0
c310: 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 2);.      sqli
c320: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c330: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 31 2c 20   OP_Integer, 1, 
c340: 33 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  3);.      sqlite
c350: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c360: 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20  P_Integer,.     
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c380: 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74        (int)sqlit
c390: 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54  e3LogEstToInt(pT
c3a0: 61 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 20 34  ab->szTabRow), 4
c3b0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c3c0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c3d0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34  _ResultRow, 1, 4
c3e0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64  );.      for(pId
c3f0: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20  x=pTab->pIndex, 
c400: 69 3d 31 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  i=1; pIdx; pIdx=
c410: 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b  pIdx->pNext, i++
c420: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
c430: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c440: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31  OP_Integer, i, 1
c450: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c460: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
c470: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
c480: 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65  , 0, pIdx->zName
c490: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
c4a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c4b0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
c4c0: 49 64 78 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45  Idx->onError!=OE
c4d0: 5f 4e 6f 6e 65 2c 20 33 29 3b 0a 20 20 20 20 20  _None, 3);.     
c4e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c4f0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c500: 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c520: 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67   (int)sqlite3Log
c530: 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e 73  EstToInt(pIdx->s
c540: 7a 49 64 78 52 6f 77 29 2c 20 34 29 3b 0a 20 20  zIdxRow), 4);.  
c550: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c560: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
c570: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a  sultRow, 1, 4);.
c580: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
c590: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
c5a0: 73 65 20 50 72 61 67 54 79 70 5f 44 41 54 41 42  se PragTyp_DATAB
c5b0: 41 53 45 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20  ASE_LIST: {.    
c5c0: 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74  int i;.    sqlit
c5d0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
c5e0: 28 76 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72  (v, 3);.    pPar
c5f0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20  se->nMem = 3;.  
c600: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c610: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
c620: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71  LNAME_NAME, "seq
c630: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
c640: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
c650: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
c660: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
c670: 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f   "name", SQLITE_
c680: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
c690: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c6a0: 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
c6b0: 5f 4e 41 4d 45 2c 20 22 66 69 6c 65 22 2c 20 53  _NAME, "file", S
c6c0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c6d0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
c6e0: 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
c6f0: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
c700: 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69  ].pBt==0 ) conti
c710: 6e 75 65 3b 0a 20 20 20 20 20 20 61 73 73 65 72  nue;.      asser
c720: 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  t( db->aDb[i].zN
c730: 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  ame!=0 );.      
c740: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c750: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c760: 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71   i, 1);.      sq
c770: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c780: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c790: 2c 20 32 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b  , 2, 0, db->aDb[
c7a0: 69 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  i].zName, 0);.  
c7b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c7c0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
c7d0: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20  ng8, 0, 3, 0,.  
c7e0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
c7f0: 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d 65  BtreeGetFilename
c800: 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29  (db->aDb[i].pBt)
c810: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
c820: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c830: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
c840: 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , 3);.    }.  }.
c850: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65    break;..  case
c860: 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54 49   PragTyp_COLLATI
c870: 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69  ON_LIST: {.    i
c880: 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 48 61  nt i = 0;.    Ha
c890: 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 73  shElem *p;.    s
c8a0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
c8b0: 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20  Cols(v, 2);.    
c8c0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32  pParse->nMem = 2
c8d0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
c8e0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
c8f0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
c900: 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54  "seq", SQLITE_ST
c910: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
c920: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c930: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
c940: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
c950: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c960: 20 66 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73   for(p=sqliteHas
c970: 68 46 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c  hFirst(&db->aCol
c980: 6c 53 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69  lSeq); p; p=sqli
c990: 74 65 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a  teHashNext(p)){.
c9a0: 20 20 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70        CollSeq *p
c9b0: 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20  Coll = (CollSeq 
c9c0: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
c9d0: 28 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  (p);.      sqlit
c9e0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c9f0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2b 2b 2c  OP_Integer, i++,
ca00: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
ca10: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
ca20: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
ca30: 2c 20 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d  , 0, pColl->zNam
ca40: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
ca50: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ca60: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
ca70: 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  1, 2);.    }.  }
ca80: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
ca90: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
caa0: 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a  SCHEMA_PRAGMAS *
cab0: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
cac0: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
cad0: 45 59 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  EY.  case PragTy
cae0: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49  p_FOREIGN_KEY_LI
caf0: 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  ST: if( zRight )
cb00: 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b  {.    FKey *pFK;
cb10: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
cb20: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
cb30: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
cb40: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
cb50: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
cb60: 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
cb70: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
cb80: 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54  ;.      pFK = pT
cb90: 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20  ab->pFKey;.     
cba0: 20 69 66 28 20 70 46 4b 20 29 7b 0a 20 20 20 20   if( pFK ){.    
cbb0: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a      int i = 0; .
cbc0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
cbd0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
cbe0: 20 38 29 3b 0a 20 20 20 20 20 20 20 20 70 50 61   8);.        pPa
cbf0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20  rse->nMem = 8;. 
cc00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f         sqlite3Co
cc10: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
cc20: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
cc30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cc40: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
cc50: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
cc60: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
cc70: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
cc80: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
cc90: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
cca0: 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51  _NAME, "seq", SQ
ccb0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
ccc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ccd0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
cce0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
ccf0: 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f  "table", SQLITE_
cd00: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
cd10: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
cd20: 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c  olName(v, 3, COL
cd30: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 72 6f 6d  NAME_NAME, "from
cd40: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
cd50: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
cd60: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
cd70: 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 4, COLNAME_N
cd80: 41 4d 45 2c 20 22 74 6f 22 2c 20 53 51 4c 49 54  AME, "to", SQLIT
cd90: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
cda0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
cdb0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43  tColName(v, 5, C
cdc0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e  OLNAME_NAME, "on
cdd0: 5f 75 70 64 61 74 65 22 2c 20 53 51 4c 49 54 45  _update", SQLITE
cde0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
cdf0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
ce00: 43 6f 6c 4e 61 6d 65 28 76 2c 20 36 2c 20 43 4f  ColName(v, 6, CO
ce10: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f  LNAME_NAME, "on_
ce20: 64 65 6c 65 74 65 22 2c 20 53 51 4c 49 54 45 5f  delete", SQLITE_
ce30: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
ce40: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
ce50: 6f 6c 4e 61 6d 65 28 76 2c 20 37 2c 20 43 4f 4c  olName(v, 7, COL
ce60: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6d 61 74 63  NAME_NAME, "matc
ce70: 68 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  h", SQLITE_STATI
ce80: 43 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c  C);.        whil
ce90: 65 28 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20  e(pFK){.        
cea0: 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20    int j;.       
ceb0: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46     for(j=0; j<pF
cec0: 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20  K->nCol; j++){. 
ced0: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20             char 
cee0: 2a 7a 43 6f 6c 20 3d 20 70 46 4b 2d 3e 61 43 6f  *zCol = pFK->aCo
cef0: 6c 5b 6a 5d 2e 7a 43 6f 6c 3b 0a 20 20 20 20 20  l[j].zCol;.     
cf00: 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e         char *zOn
cf10: 44 65 6c 65 74 65 20 3d 20 28 63 68 61 72 20 2a  Delete = (char *
cf20: 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d  )actionName(pFK-
cf30: 3e 61 41 63 74 69 6f 6e 5b 30 5d 29 3b 0a 20 20  >aAction[0]);.  
cf40: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
cf50: 7a 4f 6e 55 70 64 61 74 65 20 3d 20 28 63 68 61  zOnUpdate = (cha
cf60: 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70  r *)actionName(p
cf70: 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 3b  FK->aAction[1]);
cf80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
cf90: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
cfa0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c  , OP_Integer, i,
cfb0: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   1);.           
cfc0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cfd0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
cfe0: 2c 20 6a 2c 20 32 29 3b 0a 20 20 20 20 20 20 20  , j, 2);.       
cff0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d000: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
d010: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70  ing8, 0, 3, 0, p
d020: 46 4b 2d 3e 7a 54 6f 2c 20 30 29 3b 0a 20 20 20  FK->zTo, 0);.   
d030: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d040: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
d050: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20  _String8, 0, 4, 
d060: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
d070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d080: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d   pTab->aCol[pFK-
d090: 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e  >aCol[j].iFrom].
d0a0: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
d0b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d0c0: 62 65 41 64 64 4f 70 34 28 76 2c 20 7a 43 6f 6c  beAddOp4(v, zCol
d0d0: 20 3f 20 4f 50 5f 53 74 72 69 6e 67 38 20 3a 20   ? OP_String8 : 
d0e0: 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 2c 20 30  OP_Null, 0, 5, 0
d0f0: 2c 20 7a 43 6f 6c 2c 20 30 29 3b 0a 20 20 20 20  , zCol, 0);.    
d100: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d110: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
d120: 53 74 72 69 6e 67 38 2c 20 30 2c 20 36 2c 20 30  String8, 0, 6, 0
d130: 2c 20 7a 4f 6e 55 70 64 61 74 65 2c 20 30 29 3b  , zOnUpdate, 0);
d140: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d150: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
d160: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
d170: 20 37 2c 20 30 2c 20 7a 4f 6e 44 65 6c 65 74 65   7, 0, zOnDelete
d180: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
d190: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d1a0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
d1b0: 38 2c 20 30 2c 20 38 2c 20 30 2c 20 22 4e 4f 4e  8, 0, 8, 0, "NON
d1c0: 45 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  E", 0);.        
d1d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d1e0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
d1f0: 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20  ltRow, 1, 8);.  
d200: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
d210: 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20      ++i;.       
d220: 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e     pFK = pFK->pN
d230: 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20  extFrom;.       
d240: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
d250: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
d260: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
d270: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
d280: 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69  EIGN_KEY) */..#i
d290: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d2a0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69  T_FOREIGN_KEY.#i
d2b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d2c0: 54 5f 54 52 49 47 47 45 52 0a 20 20 63 61 73 65  T_TRIGGER.  case
d2d0: 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e   PragTyp_FOREIGN
d2e0: 5f 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20  _KEY_CHECK: {.  
d2f0: 20 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20    FKey *pFK;    
d300: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6f           /* A fo
d310: 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
d320: 61 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c  aint */.    Tabl
d330: 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20  e *pTab;        
d340: 20 20 20 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c     /* Child tabl
d350: 65 20 63 6f 6e 74 61 69 6e 20 22 52 45 46 45 52  e contain "REFER
d360: 45 4e 43 45 53 22 20 6b 65 79 77 6f 72 64 20 2a  ENCES" keyword *
d370: 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 50 61  /.    Table *pPa
d380: 72 65 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  rent;        /* 
d390: 50 61 72 65 6e 74 20 74 61 62 6c 65 20 74 68 61  Parent table tha
d3a0: 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 73 20 74  t child points t
d3b0: 6f 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a  o */.    Index *
d3c0: 70 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 20  pIdx;           
d3d0: 2f 2a 20 49 6e 64 65 78 20 69 6e 20 74 68 65 20  /* Index in the 
d3e0: 70 61 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a  parent table */.
d3f0: 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20      int i;      
d400: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
d410: 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72  op counter:  For
d420: 65 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20  eign key number 
d430: 66 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20 20 20  for pTab */.    
d440: 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20  int j;          
d450: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
d460: 6f 75 6e 74 65 72 3a 20 20 46 69 65 6c 64 20 6f  ounter:  Field o
d470: 66 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65  f the foreign ke
d480: 79 20 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c 65  y */.    HashEle
d490: 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20 20 20 20  m *k;           
d4a0: 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a  /* Loop counter:
d4b0: 20 20 4e 65 78 74 20 74 61 62 6c 65 20 69 6e 20    Next table in 
d4c0: 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e  schema */.    in
d4d0: 74 20 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  t x;            
d4e0: 20 20 20 20 20 2f 2a 20 72 65 73 75 6c 74 20 76       /* result v
d4f0: 61 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  ariable */.    i
d500: 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20  nt regResult;   
d510: 20 20 20 20 20 20 2f 2a 20 33 20 72 65 67 69 73        /* 3 regis
d520: 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72  ters to hold a r
d530: 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20  esult row */.   
d540: 20 69 6e 74 20 72 65 67 4b 65 79 3b 20 20 20 20   int regKey;    
d550: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
d560: 74 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20  ter to hold key 
d570: 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 74 68 65  for checking the
d580: 20 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72   FK */.    int r
d590: 65 67 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20  egRow;          
d5a0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 74    /* Registers t
d5b0: 6f 20 68 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f  o hold a row fro
d5c0: 6d 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e  m pTab */.    in
d5d0: 74 20 61 64 64 72 54 6f 70 3b 20 20 20 20 20 20  t addrTop;      
d5e0: 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61       /* Top of a
d5f0: 20 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20 66   loop checking f
d600: 6f 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20  oreign keys */. 
d610: 20 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20     int addrOk;  
d620: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d            /* Jum
d630: 70 20 68 65 72 65 20 69 66 20 74 68 65 20 6b 65  p here if the ke
d640: 79 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69  y is OK */.    i
d650: 6e 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20  nt *aiCols;     
d660: 20 20 20 20 20 20 2f 2a 20 63 68 69 6c 64 20 74        /* child t
d670: 6f 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20  o parent column 
d680: 6d 61 70 70 69 6e 67 20 2a 2f 0a 0a 20 20 20 20  mapping */..    
d690: 72 65 67 52 65 73 75 6c 74 20 3d 20 70 50 61 72  regResult = pPar
d6a0: 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20 20 20  se->nMem+1;.    
d6b0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20  pParse->nMem += 
d6c0: 34 3b 0a 20 20 20 20 72 65 67 4b 65 79 20 3d 20  4;.    regKey = 
d6d0: 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a  ++pParse->nMem;.
d6e0: 20 20 20 20 72 65 67 52 6f 77 20 3d 20 2b 2b 70      regRow = ++p
d6f0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  Parse->nMem;.   
d700: 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   v = sqlite3GetV
d710: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20  dbe(pParse);.   
d720: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
d730: 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20  umCols(v, 4);.  
d740: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
d750: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
d760: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62  LNAME_NAME, "tab
d770: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  le", SQLITE_STAT
d780: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
d790: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
d7a0: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
d7b0: 45 2c 20 22 72 6f 77 69 64 22 2c 20 53 51 4c 49  E, "rowid", SQLI
d7c0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d7d0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d7e0: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
d7f0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 61 72 65 6e  AME_NAME, "paren
d800: 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  t", SQLITE_STATI
d810: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
d820: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
d830: 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   3, COLNAME_NAME
d840: 2c 20 22 66 6b 69 64 22 2c 20 53 51 4c 49 54 45  , "fkid", SQLITE
d850: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
d860: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
d870: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
d880: 62 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69  b);.    k = sqli
d890: 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d  teHashFirst(&db-
d8a0: 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d  >aDb[iDb].pSchem
d8b0: 61 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20 20 20  a->tblHash);.   
d8c0: 20 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20   while( k ){.   
d8d0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
d8e0: 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20  .        pTab = 
d8f0: 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62  sqlite3LocateTab
d900: 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20 7a 52  le(pParse, 0, zR
d910: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
d920: 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20      k = 0;.     
d930: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
d940: 70 54 61 62 20 3d 20 28 54 61 62 6c 65 2a 29 73  pTab = (Table*)s
d950: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 6b 29  qliteHashData(k)
d960: 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 73 71  ;.        k = sq
d970: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 6b 29 3b  liteHashNext(k);
d980: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
d990: 66 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54  f( pTab==0 || pT
d9a0: 61 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63  ab->pFKey==0 ) c
d9b0: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73  ontinue;.      s
d9c0: 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
d9d0: 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 54 61  pParse, iDb, pTa
d9e0: 62 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62  b->tnum, 0, pTab
d9f0: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
da00: 69 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72  if( pTab->nCol+r
da10: 65 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d  egRow>pParse->nM
da20: 65 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65  em ) pParse->nMe
da30: 6d 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b  m = pTab->nCol +
da40: 20 72 65 67 52 6f 77 3b 0a 20 20 20 20 20 20 73   regRow;.      s
da50: 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
da60: 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 2c 20  pParse, 0, iDb, 
da70: 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  pTab, OP_OpenRea
da80: 64 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  d);.      sqlite
da90: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
daa0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 72 65  P_String8, 0, re
dab0: 67 52 65 73 75 6c 74 2c 20 30 2c 20 70 54 61 62  gResult, 0, pTab
dac0: 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
dad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dae0: 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a   P4_TRANSIENT);.
daf0: 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c 20 70        for(i=1, p
db00: 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20  FK=pTab->pFKey; 
db10: 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46  pFK; i++, pFK=pF
db20: 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20  K->pNextFrom){. 
db30: 20 20 20 20 20 20 20 70 50 61 72 65 6e 74 20 3d         pParent =
db40: 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61   sqlite3LocateTa
db50: 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20 70  ble(pParse, 0, p
db60: 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20  FK->zTo, zDb);. 
db70: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
db80: 6e 74 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  nt==0 ) break;. 
db90: 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b         pIdx = 0;
dba0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
dbb0: 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65  TableLock(pParse
dbc0: 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e  , iDb, pParent->
dbd0: 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74  tnum, 0, pParent
dbe0: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
dbf0: 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c    x = sqlite3FkL
dc00: 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73  ocateIndex(pPars
dc10: 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c  e, pParent, pFK,
dc20: 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20 20   &pIdx, 0);.    
dc30: 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a      if( x==0 ){.
dc40: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
dc50: 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  dx==0 ){.       
dc60: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
dc70: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69 2c  Table(pParse, i,
dc80: 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f   iDb, pParent, O
dc90: 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20  P_OpenRead);.   
dca0: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
dcb0: 20 20 20 20 20 20 20 20 20 20 4b 65 79 49 6e 66            KeyInf
dcc0: 6f 20 2a 70 4b 65 79 20 3d 20 73 71 6c 69 74 65  o *pKey = sqlite
dcd0: 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f 28 70 50  3IndexKeyinfo(pP
dce0: 61 72 73 65 2c 20 70 49 64 78 29 3b 0a 20 20 20  arse, pIdx);.   
dcf0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
dd00: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
dd10: 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20 70 49  _OpenRead, i, pI
dd20: 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b 0a  dx->tnum, iDb);.
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
dd40: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28  te3VdbeChangeP4(
dd50: 76 2c 20 2d 31 2c 20 28 63 68 61 72 2a 29 70 4b  v, -1, (char*)pK
dd60: 65 79 2c 20 50 34 5f 4b 45 59 49 4e 46 4f 5f 48  ey, P4_KEYINFO_H
dd70: 41 4e 44 4f 46 46 29 3b 0a 20 20 20 20 20 20 20  ANDOFF);.       
dd80: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
dd90: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20  se{.          k 
dda0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62  = 0;.          b
ddb0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
ddc0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
ddd0: 28 20 70 46 4b 20 29 20 62 72 65 61 6b 3b 0a 20  ( pFK ) break;. 
dde0: 20 20 20 20 20 69 66 28 20 70 50 61 72 73 65 2d       if( pParse-
ddf0: 3e 6e 54 61 62 3c 69 20 29 20 70 50 61 72 73 65  >nTab<i ) pParse
de00: 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a 20 20 20 20  ->nTab = i;.    
de10: 20 20 61 64 64 72 54 6f 70 20 3d 20 73 71 6c 69    addrTop = sqli
de20: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
de30: 20 4f 50 5f 52 65 77 69 6e 64 2c 20 30 29 3b 0a   OP_Rewind, 0);.
de40: 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c 20 70        for(i=1, p
de50: 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20  FK=pTab->pFKey; 
de60: 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46  pFK; i++, pFK=pF
de70: 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20  K->pNextFrom){. 
de80: 20 20 20 20 20 20 20 70 50 61 72 65 6e 74 20 3d         pParent =
de90: 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61   sqlite3LocateTa
dea0: 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20 70  ble(pParse, 0, p
deb0: 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20  FK->zTo, zDb);. 
dec0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
ded0: 50 61 72 65 6e 74 21 3d 30 20 29 3b 0a 20 20 20  Parent!=0 );.   
dee0: 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20       pIdx = 0;. 
def0: 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20         aiCols = 
df00: 30 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20 73  0;.        x = s
df10: 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
df20: 64 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72  dex(pParse, pPar
df30: 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c  ent, pFK, &pIdx,
df40: 20 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20   &aiCols);.     
df50: 20 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30 20     assert( x==0 
df60: 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72 4f  );.        addrO
df70: 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  k = sqlite3VdbeM
df80: 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20  akeLabel(v);.   
df90: 20 20 20 20 20 69 66 28 20 70 49 64 78 3d 3d 30       if( pIdx==0
dfa0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e   ){.          in
dfb0: 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43  t iKey = pFK->aC
dfc0: 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20  ol[0].iFrom;.   
dfd0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69         assert( i
dfe0: 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70  Key>=0 && iKey<p
dff0: 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20  Tab->nCol );.   
e000: 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 21         if( iKey!
e010: 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a  =pTab->iPKey ){.
e020: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e030: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
e040: 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69   OP_Column, 0, i
e050: 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  Key, regRow);.  
e060: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e070: 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76  3ColumnDefault(v
e080: 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65  , pTab, iKey, re
e090: 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20  gRow);.         
e0a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e0b0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
e0c0: 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f  l, regRow, addrO
e0d0: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  k);.            
e0e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e0f0: 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65 49 6e  2(v, OP_MustBeIn
e100: 74 2c 20 72 65 67 52 6f 77 2c 0a 20 20 20 20 20  t, regRow,.     
e110: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e120: 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72  3VdbeCurrentAddr
e130: 28 76 29 2b 33 29 3b 0a 20 20 20 20 20 20 20 20  (v)+3);.        
e140: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
e150: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e160: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77  AddOp2(v, OP_Row
e170: 69 64 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a  id, 0, regRow);.
e180: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
e190: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e1a0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4e 6f  eAddOp3(v, OP_No
e1b0: 74 45 78 69 73 74 73 2c 20 69 2c 20 30 2c 20 72  tExists, i, 0, r
e1c0: 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20  egRow);.        
e1d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e1e0: 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20  Op2(v, OP_Goto, 
e1f0: 30 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20  0, addrOk);.    
e200: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e210: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 73 71 6c  eJumpHere(v, sql
e220: 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
e230: 64 64 72 28 76 29 2d 32 29 3b 0a 20 20 20 20 20  ddr(v)-2);.     
e240: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
e250: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70      for(j=0; j<p
e260: 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a  FK->nCol; j++){.
e270: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e280: 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
e290: 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70  lumnOfTable(v, p
e2a0: 54 61 62 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  Tab, 0,.        
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2c0: 20 20 20 20 61 69 43 6f 6c 73 20 3f 20 61 69 43      aiCols ? aiC
e2d0: 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43  ols[j] : pFK->aC
e2e0: 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 2c 20 72 65 67  ol[0].iFrom, reg
e2f0: 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20  Row+j);.        
e300: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e310: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp2(v, OP_IsNu
e320: 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61 64  ll, regRow+j, ad
e330: 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20  drOk);.         
e340: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c   }.          sql
e350: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
e360: 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c  , OP_MakeRecord,
e370: 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43   regRow, pFK->nC
e380: 6f 6c 2c 20 72 65 67 4b 65 79 29 3b 0a 20 20 20  ol, regKey);.   
e390: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e3a0: 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31  beChangeP4(v, -1
e3b0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
e3c0: 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64 65       sqlite3Inde
e3d0: 78 41 66 66 69 6e 69 74 79 53 74 72 28 76 2c 70  xAffinityStr(v,p
e3e0: 49 64 78 29 2c 20 50 34 5f 54 52 41 4e 53 49 45  Idx), P4_TRANSIE
e3f0: 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  NT);.          s
e400: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
e410: 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c  Int(v, OP_Found,
e420: 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b   i, addrOk, regK
e430: 65 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  ey, 0);.        
e440: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
e450: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
e460: 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52  P_Rowid, 0, regR
e470: 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20  esult+1);.      
e480: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e490: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
e4a0: 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b  8, 0, regResult+
e4b0: 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20  2, 0, .         
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4d0: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34 5f 54 52   pFK->zTo, P4_TR
e4e0: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
e4f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e500: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
e510: 72 2c 20 69 2d 31 2c 20 72 65 67 52 65 73 75 6c  r, i-1, regResul
e520: 74 2b 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71  t+3);.        sq
e530: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
e540: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
e550: 20 72 65 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a   regResult, 4);.
e560: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e570: 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28  dbeResolveLabel(
e580: 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20  v, addrOk);.    
e590: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
e5a0: 65 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20  e(db, aiCols);. 
e5b0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
e5c0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
e5d0: 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64  , OP_Next, 0, ad
e5e0: 64 72 54 6f 70 2b 31 29 3b 0a 20 20 20 20 20 20  drTop+1);.      
e5f0: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
e600: 65 72 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b  ere(v, addrTop);
e610: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
e620: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ak;.#endif /* !d
e630: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
e640: 49 54 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23  IT_TRIGGER) */.#
e650: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
e660: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
e670: 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23  REIGN_KEY) */..#
e680: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20  ifndef NDEBUG.  
e690: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 52  case PragTyp_PAR
e6a0: 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20  SER_TRACE: {.   
e6b0: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
e6c0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
e6d0: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
e6e0: 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20  t, 0) ){.       
e6f0: 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
e700: 61 63 65 28 73 74 64 65 72 72 2c 20 22 70 61 72  ace(stderr, "par
e710: 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d  ser: ");.      }
e720: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
e730: 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
e740: 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a  (0, 0);.      }.
e750: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
e760: 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20  k;.#endif..  /* 
e770: 52 65 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49  Reinstall the LI
e780: 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63  KE and GLOB func
e790: 74 69 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69  tions.  The vari
e7a0: 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a  ant of LIKE.  **
e7b0: 20 75 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61   used will be ca
e7c0: 73 65 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20  se sensitive or 
e7d0: 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  not depending on
e7e0: 20 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20   the RHS..  */. 
e7f0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 41   case PragTyp_CA
e800: 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b  SE_SENSITIVE_LIK
e810: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  E: {.    if( zRi
e820: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
e830: 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
e840: 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71  Functions(db, sq
e850: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
e860: 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20  zRight, 0));.   
e870: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
e880: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e890: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
e8a0: 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69  ERROR_MAX.# defi
e8b0: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52  ne SQLITE_INTEGR
e8c0: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
e8d0: 4d 41 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a  MAX 100.#endif..
e8e0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
e8f0: 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
e900: 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20  ECK.  /* Pragma 
e910: 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 20 69 73  "quick_check" is
e920: 20 72 65 64 75 63 65 64 20 76 65 72 73 69 6f 6e   reduced version
e930: 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72   of .  ** integr
e940: 69 74 79 5f 63 68 65 63 6b 20 64 65 73 69 67 6e  ity_check design
e950: 65 64 20 74 6f 20 64 65 74 65 63 74 20 6d 6f 73  ed to detect mos
e960: 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
e970: 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f  ption.  ** witho
e980: 75 74 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f  ut most of the o
e990: 76 65 72 68 65 61 64 20 6f 66 20 61 20 66 75 6c  verhead of a ful
e9a0: 6c 20 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63  l integrity-chec
e9b0: 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  k..  */.  case P
e9c0: 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59  ragTyp_INTEGRITY
e9d0: 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e  _CHECK: {.    in
e9e0: 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78  t i, j, addr, mx
e9f0: 45 72 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64  Err;..    /* Cod
ea00: 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20 61  e that appears a
ea10: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
ea20: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
ea30: 2e 20 20 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20  .  If no error. 
ea40: 20 20 20 2a 2a 20 6d 65 73 73 61 67 65 73 20 68     ** messages h
ea50: 61 76 65 20 62 65 65 6e 20 67 65 6e 65 72 61 74  ave been generat
ea60: 65 64 2c 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20  ed, output OK.  
ea70: 4f 74 68 65 72 77 69 73 65 20 6f 75 74 70 75 74  Otherwise output
ea80: 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f   the.    ** erro
ea90: 72 20 6d 65 73 73 61 67 65 0a 20 20 20 20 2a 2f  r message.    */
eaa0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
eab0: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64  t VdbeOpList end
eac0: 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Code[] = {.     
ead0: 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20   { OP_AddImm,   
eae0: 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20     1, 0,        
eaf0: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
eb00: 20 20 20 20 20 7b 20 4f 50 5f 49 66 4e 65 67 2c       { OP_IfNeg,
eb10: 20 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20         1, 0,    
eb20: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20      0},    /* 1 
eb30: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74  */.      { OP_St
eb40: 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c  ring8,     0, 3,
eb50: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
eb60: 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 2 */.      { O
eb70: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33  P_ResultRow,   3
eb80: 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 1,        0},.
eb90: 20 20 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20      };..    int 
eba0: 69 73 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74  isQuick = (sqlit
ebb0: 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b  e3Tolower(zLeft[
ebc0: 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20  0])=='q');..    
ebd0: 2f 2a 20 49 66 20 74 68 65 20 50 52 41 47 4d 41  /* If the PRAGMA
ebe0: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20   command was of 
ebf0: 74 68 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41  the form "PRAGMA
ec00: 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f   <db>.integrity_
ec10: 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74  check",.    ** t
ec20: 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74  hen iDb is set t
ec30: 6f 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  o the index of t
ec40: 68 65 20 64 61 74 61 62 61 73 65 20 69 64 65 6e  he database iden
ec50: 74 69 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a  tified by <db>..
ec60: 20 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63      ** In this c
ec70: 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69  ase, the integri
ec80: 74 79 20 6f 66 20 64 61 74 61 62 61 73 65 20 69  ty of database i
ec90: 44 62 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66  Db only is verif
eca0: 69 65 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68  ied by.    ** th
ecb0: 65 20 56 44 42 45 20 63 72 65 61 74 65 64 20 62  e VDBE created b
ecc0: 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  elow..    **.   
ecd0: 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69   ** Otherwise, i
ece0: 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61  f the command wa
ecf0: 73 20 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41  s simply "PRAGMA
ed00: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
ed10: 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52  " (or.    ** "PR
ed20: 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b  AGMA quick_check
ed30: 22 29 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20  "), then iDb is 
ed40: 73 65 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69  set to 0. In thi
ed50: 73 20 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a  s case, set iDb.
ed60: 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72      ** to -1 her
ed70: 65 2c 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  e, to indicate t
ed80: 68 61 74 20 74 68 65 20 56 44 42 45 20 73 68 6f  hat the VDBE sho
ed90: 75 6c 64 20 76 65 72 69 66 79 20 74 68 65 20 69  uld verify the i
eda0: 6e 74 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20  ntegrity.    ** 
edb0: 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
edc0: 64 61 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20  databases.  */. 
edd0: 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d     assert( iDb>=
ede0: 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
edf0: 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d   iDb==0 || pId2-
ee00: 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49  >z );.    if( pI
ee10: 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d  d2->z==0 ) iDb =
ee20: 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69   -1;..    /* Ini
ee30: 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45  tialize the VDBE
ee40: 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20   program */.    
ee50: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36  pParse->nMem = 6
ee60: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
ee70: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
ee80: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
ee90: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
eea0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
eeb0: 20 22 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63   "integrity_chec
eec0: 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  k", SQLITE_STATI
eed0: 43 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20  C);..    /* Set 
eee0: 74 68 65 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f  the maximum erro
eef0: 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d  r count */.    m
ef00: 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e  xErr = SQLITE_IN
ef10: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
ef20: 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28  ROR_MAX;.    if(
ef30: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
ef40: 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
ef50: 28 7a 52 69 67 68 74 2c 20 26 6d 78 45 72 72 29  (zRight, &mxErr)
ef60: 3b 0a 20 20 20 20 20 20 69 66 28 20 6d 78 45 72  ;.      if( mxEr
ef70: 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  r<=0 ){.        
ef80: 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49  mxErr = SQLITE_I
ef90: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
efa0: 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20  RROR_MAX;.      
efb0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
efc0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
efd0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45   OP_Integer, mxE
efe0: 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b  rr, 1);  /* reg[
eff0: 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72 73 20  1] holds errors 
f000: 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20  left */..    /* 
f010: 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20  Do an integrity 
f020: 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20 64 61  check on each da
f030: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
f040: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
f050: 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
f060: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a     HashElem *x;.
f070: 20 20 20 20 20 20 48 61 73 68 20 2a 70 54 62 6c        Hash *pTbl
f080: 73 3b 0a 20 20 20 20 20 20 69 6e 74 20 63 6e 74  s;.      int cnt
f090: 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 69 66 28   = 0;..      if(
f0a0: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26 26 20   OMIT_TEMPDB && 
f0b0: 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b  i==1 ) continue;
f0c0: 0a 20 20 20 20 20 20 69 66 28 20 69 44 62 3e 3d  .      if( iDb>=
f0d0: 30 20 26 26 20 69 21 3d 69 44 62 20 29 20 63 6f  0 && i!=iDb ) co
f0e0: 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73  ntinue;..      s
f0f0: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
f100: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
f110: 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20  );.      addr = 
f120: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f130: 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
f140: 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75  ); /* Halt if ou
f150: 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20  t of errors */. 
f160: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f170: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c  AddOp2(v, OP_Hal
f180: 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  t, 0, 0);.      
f190: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
f1a0: 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20  ere(v, addr);.. 
f1b0: 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e       /* Do an in
f1c0: 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66  tegrity check of
f1d0: 20 74 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20   the B-Tree.    
f1e0: 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65    **.      ** Be
f1f0: 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e 67 20 72  gin by filling r
f200: 65 67 69 73 74 65 72 73 20 32 2c 20 33 2c 20 2e  egisters 2, 3, .
f210: 2e 2e 20 77 69 74 68 20 74 68 65 20 72 6f 6f 74  .. with the root
f220: 20 70 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20   pages numbers. 
f230: 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20       ** for all 
f240: 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63  tables and indic
f250: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
f260: 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  se..      */.   
f270: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
f280: 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
f290: 64 28 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20  d(db, i, 0) );. 
f2a0: 20 20 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62       pTbls = &db
f2b0: 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61  ->aDb[i].pSchema
f2c0: 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20  ->tblHash;.     
f2d0: 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73   for(x=sqliteHas
f2e0: 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78  hFirst(pTbls); x
f2f0: 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; x=sqliteHashNe
f300: 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20  xt(x)){.        
f310: 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71  Table *pTab = sq
f320: 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b  liteHashData(x);
f330: 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a  .        Index *
f340: 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 73 71  pIdx;.        sq
f350: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
f360: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
f370: 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74  Tab->tnum, 2+cnt
f380: 29 3b 0a 20 20 20 20 20 20 20 20 63 6e 74 2b 2b  );.        cnt++
f390: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 49  ;.        for(pI
f3a0: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
f3b0: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
f3c0: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20  ->pNext){.      
f3d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f3e0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
f3f0: 67 65 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c  ger, pIdx->tnum,
f400: 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20   2+cnt);.       
f410: 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20     cnt++;.      
f420: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20    }.      }..   
f430: 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
f440: 73 75 66 66 69 63 69 65 6e 74 20 6e 75 6d 62 65  sufficient numbe
f450: 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 68  r of registers h
f460: 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74  ave been allocat
f470: 65 64 20 2a 2f 0a 20 20 20 20 20 20 70 50 61 72  ed */.      pPar
f480: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20  se->nMem = MAX( 
f490: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e  pParse->nMem, cn
f4a0: 74 2b 37 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  t+7 );..      /*
f4b0: 20 44 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69   Do the b-tree i
f4c0: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 73 20  ntegrity checks 
f4d0: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
f4e0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
f4f0: 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c  _IntegrityCk, 2,
f500: 20 63 6e 74 2c 20 31 29 3b 0a 20 20 20 20 20 20   cnt, 1);.      
f510: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
f520: 65 50 35 28 76 2c 20 28 75 38 29 69 29 3b 0a 20  eP5(v, (u8)i);. 
f530: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
f540: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
f550: 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 0a   OP_IsNull, 2);.
f560: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f570: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
f580: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a  ring8, 0, 3, 0,.
f590: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
f5a0: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a  MPrintf(db, "***
f5b0: 20 69 6e 20 64 61 74 61 62 61 73 65 20 25 73 20   in database %s 
f5c0: 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b  ***\n", db->aDb[
f5d0: 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20  i].zName),.     
f5e0: 20 20 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b      P4_DYNAMIC);
f5f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
f600: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d  beAddOp2(v, OP_M
f610: 6f 76 65 2c 20 32 2c 20 34 29 3b 0a 20 20 20 20  ove, 2, 4);.    
f620: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
f630: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
f640: 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20  , 4, 3, 2);.    
f650: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
f660: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
f670: 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20  Row, 2, 1);.    
f680: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
f690: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
f6a0: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
f6b0: 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64 69  ure all the indi
f6c0: 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63  ces are construc
f6d0: 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20  ted correctly.. 
f6e0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f       */.      fo
f6f0: 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(x=sqliteHashFi
f700: 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26 26  rst(pTbls); x &&
f710: 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c   !isQuick; x=sql
f720: 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b  iteHashNext(x)){
f730: 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a  .        Table *
f740: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73  pTab = sqliteHas
f750: 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20  hData(x);.      
f760: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20    Index *pIdx;. 
f770: 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70 54         int loopT
f780: 6f 70 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28  op;..        if(
f790: 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30   pTab->pIndex==0
f7a0: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
f7b0: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
f7c0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
f7d0: 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20   OP_IfPos, 1);  
f7e0: 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75 74 20 6f  /* Stop if out o
f7f0: 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20  f errors */.    
f800: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f810: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
f820: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 0, 0);.       
f830: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
f840: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
f850: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
f860: 70 72 43 61 63 68 65 43 6c 65 61 72 28 70 50 61  prCacheClear(pPa
f870: 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71  rse);.        sq
f880: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
f890: 64 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c  dIndices(pParse,
f8a0: 20 70 54 61 62 2c 20 31 2c 20 4f 50 5f 4f 70 65   pTab, 1, OP_Ope
f8b0: 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20 20 20  nRead);.        
f8c0: 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
f8d0: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
f8e0: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
f8f0: 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
f900: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f910: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
f920: 67 65 72 2c 20 30 2c 20 37 2b 6a 29 3b 20 2f 2a  ger, 0, 7+j); /*
f930: 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 63   index entries c
f940: 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20 20  ounter */.      
f950: 20 20 7d 0a 20 20 20 20 20 20 20 20 70 50 61 72    }.        pPar
f960: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 70  se->nMem = MAX(p
f970: 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 37 2b 6a  Parse->nMem, 7+j
f980: 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54  );.        loopT
f990: 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  op = sqlite3Vdbe
f9a0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77  AddOp2(v, OP_Rew
f9b0: 69 6e 64 2c 20 31 2c 20 30 29 20 2b 20 31 3b 0a  ind, 1, 0) + 1;.
f9c0: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
f9d0: 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
f9e0: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
f9f0: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
fa00: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  {.          int 
fa10: 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a 20 20 20 20  jmp2, jmp3;.    
fa20: 20 20 20 20 20 20 69 6e 74 20 72 31 3b 0a 20 20        int r1;.  
fa30: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
fa40: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
fa50: 69 64 78 45 72 72 5b 5d 20 3d 20 7b 0a 20 20 20  idxErr[] = {.   
fa60: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 41 64           { OP_Ad
fa70: 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20 2d 31  dImm,      1, -1
fa80: 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  0},.         
fa90: 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c     { OP_String8,
faa0: 20 20 20 20 20 30 2c 20 20 33 2c 20 20 30 7d 2c       0,  3,  0},
fab0: 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20      /* 1 */.    
fac0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 6f 77          { OP_Row
fad0: 69 64 2c 20 20 20 20 20 20 20 31 2c 20 20 34 2c  id,       1,  4,
fae0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20 20    0},.          
faf0: 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20    { OP_String8, 
fb00: 20 20 20 20 30 2c 20 20 35 2c 20 20 30 7d 2c 20      0,  5,  0}, 
fb10: 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20     /* 3 */.     
fb20: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69         { OP_Stri
fb30: 6e 67 38 2c 20 20 20 20 20 30 2c 20 20 36 2c 20  ng8,     0,  6, 
fb40: 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a   0},    /* 4 */.
fb50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
fb60: 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20 20 34 2c  _Concat,      4,
fb70: 20 20 33 2c 20 20 33 7d 2c 0a 20 20 20 20 20 20    3,  3},.      
fb80: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61        { OP_Conca
fb90: 74 2c 20 20 20 20 20 20 35 2c 20 20 33 2c 20 20  t,      5,  3,  
fba0: 33 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  3},.            
fbb0: 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20  { OP_Concat,    
fbc0: 20 20 36 2c 20 20 33 2c 20 20 33 7d 2c 0a 20 20    6,  3,  3},.  
fbd0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52            { OP_R
fbe0: 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 20  esultRow,   3,  
fbf0: 31 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20  1,  0},.        
fc00: 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20      { OP_IfPos, 
fc10: 20 20 20 20 20 20 31 2c 20 20 30 2c 20 20 30 7d        1,  0,  0}
fc20: 2c 20 20 20 20 2f 2a 20 39 20 2a 2f 0a 20 20 20  ,    /* 9 */.   
fc30: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 48 61           { OP_Ha
fc40: 6c 74 2c 20 20 20 20 20 20 20 20 30 2c 20 20 30  lt,        0,  0
fc50: 2c 20 20 30 7d 2c 0a 20 20 20 20 20 20 20 20 20  ,  0},.         
fc60: 20 7d 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31   };.          r1
fc70: 20 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61   = sqlite3Genera
fc80: 74 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73  teIndexKey(pPars
fc90: 65 2c 20 70 49 64 78 2c 20 31 2c 20 33 2c 20 30  e, pIdx, 1, 3, 0
fca0: 2c 20 26 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20  , &jmp3);.      
fcb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
fcc0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
fcd0: 6d 6d 2c 20 37 2b 6a 2c 20 31 29 3b 20 20 2f 2a  mm, 7+j, 1);  /*
fce0: 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72 79   increment entry
fcf0: 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20   count */.      
fd00: 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74      jmp2 = sqlit
fd10: 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28  e3VdbeAddOp4Int(
fd20: 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 6a 2b 32  v, OP_Found, j+2
fd30: 2c 20 30 2c 20 72 31 2c 20 70 49 64 78 2d 3e 6e  , 0, r1, pIdx->n
fd40: 43 6f 6c 75 6d 6e 2b 31 29 3b 0a 20 20 20 20 20  Column+1);.     
fd50: 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
fd60: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
fd70: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 69 64  (v, ArraySize(id
fd80: 78 45 72 72 29 2c 20 69 64 78 45 72 72 29 3b 0a  xErr), idxErr);.
fd90: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
fda0: 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c  3VdbeChangeP4(v,
fdb0: 20 61 64 64 72 2b 31 2c 20 22 72 6f 77 69 64 20   addr+1, "rowid 
fdc0: 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  ", P4_STATIC);. 
fdd0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
fde0: 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20  VdbeChangeP4(v, 
fdf0: 61 64 64 72 2b 33 2c 20 22 20 6d 69 73 73 69 6e  addr+3, " missin
fe00: 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 22 2c 20  g from index ", 
fe10: 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
fe20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fe30: 65 43 68 61 6e 67 65 50 34 28 76 2c 20 61 64 64  eChangeP4(v, add
fe40: 72 2b 34 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65  r+4, pIdx->zName
fe50: 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b  , P4_TRANSIENT);
fe60: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
fe70: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
fe80: 2c 20 61 64 64 72 2b 39 29 3b 0a 20 20 20 20 20  , addr+9);.     
fe90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fea0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32  JumpHere(v, jmp2
feb0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
fec0: 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c  ite3VdbeResolveL
fed0: 61 62 65 6c 28 76 2c 20 6a 6d 70 33 29 3b 0a 20  abel(v, jmp3);. 
fee0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
fef0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ff00: 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 31  p2(v, OP_Next, 1
ff10: 2c 20 6c 6f 6f 70 54 6f 70 29 3b 0a 20 20 20 20  , loopTop);.    
ff20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
ff30: 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54  umpHere(v, loopT
ff40: 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53  op-1);.#ifndef S
ff50: 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
ff60: 43 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71  COUNT.        sq
ff70: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
ff80: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
ff90: 2c 20 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20  , 2, 0, .       
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 77                "w
ffb0: 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
ffc0: 73 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34  s in index ", P4
ffd0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
ffe0: 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
fff0: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
10000 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
10010 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
10020 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
10030 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
10040 64 64 72 28 76 29 3b 0a 20 20 20 20 20 20 20 20  ddr(v);.        
10050 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10060 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op2(v, OP_IfPos,
10070 20 31 2c 20 61 64 64 72 2b 32 29 3b 0a 20 20 20   1, addr+2);.   
10080 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10090 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48  beAddOp2(v, OP_H
100a0 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  alt, 0, 0);.    
100b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
100c0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 43 6f  eAddOp2(v, OP_Co
100d0 75 6e 74 2c 20 6a 2b 32 2c 20 33 29 3b 0a 20 20  unt, j+2, 3);.  
100e0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
100f0 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
10100 45 71 2c 20 37 2b 6a 2c 20 61 64 64 72 2b 38 2c  Eq, 7+j, addr+8,
10110 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
10120 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10130 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
10140 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20  , -1);.         
10150 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10160 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
10170 2c 20 30 2c 20 33 2c 20 30 2c 20 70 49 64 78 2d  , 0, 3, 0, pIdx-
10180 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53  >zName, P4_TRANS
10190 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20  IENT);.         
101a0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
101b0 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
101c0 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20   3, 2, 7);.     
101d0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
101e0 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
101f0 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20  ultRow, 7, 1);. 
10200 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20         }.#endif 
10210 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  /* SQLITE_OMIT_B
10220 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20  TREECOUNT */.   
10230 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20     } .    }.    
10240 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
10250 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
10260 72 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65  rraySize(endCode
10270 29 2c 20 65 6e 64 43 6f 64 65 29 3b 0a 20 20 20  ), endCode);.   
10280 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
10290 67 65 50 32 28 76 2c 20 61 64 64 72 2c 20 2d 6d  geP2(v, addr, -m
102a0 78 45 72 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  xErr);.    sqlit
102b0 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
102c0 2c 20 61 64 64 72 2b 31 29 3b 0a 20 20 20 20 73  , addr+1);.    s
102d0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
102e0 50 34 28 76 2c 20 61 64 64 72 2b 32 2c 20 22 6f  P4(v, addr+2, "o
102f0 6b 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a  k", P4_STATIC);.
10300 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
10310 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
10320 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
10330 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  CK */..#ifndef S
10340 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
10350 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
10360 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a  GMA encoding.  *
10370 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64  *   PRAGMA encod
10380 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75  ing = "utf-8"|"u
10390 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65  tf-16"|"utf-16le
103a0 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a  "|"utf-16be".  *
103b0 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69  *.  ** In its fi
103c0 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70  rst form, this p
103d0 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68  ragma returns th
103e0 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68  e encoding of th
103f0 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61  e main.  ** data
10400 62 61 73 65 2e 20 49 66 20 74 68 65 20 64 61 74  base. If the dat
10410 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69  abase is not ini
10420 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20  tialized, it is 
10430 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e  initialized now.
10440 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
10450 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68  econd form of th
10460 69 73 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e  is pragma is a n
10470 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e  o-op if the main
10480 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20   database file. 
10490 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65   ** has not alre
104a0 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  ady been initial
104b0 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ized. In this ca
104c0 73 65 20 69 74 20 73 65 74 73 20 74 68 65 20 64  se it sets the d
104d0 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f  efault.  ** enco
104e0 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62  ding that will b
104f0 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d  e used for the m
10500 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
10510 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a  e if a new file.
10520 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e    ** is created.
10530 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   If an existing 
10540 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
10550 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68  le is opened, th
10560 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61  en the.  ** defa
10570 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ult text encodin
10580 67 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69  g for the existi
10590 6e 67 20 64 61 74 61 62 61 73 65 20 69 73 20 75  ng database is u
105a0 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  sed..  ** .  ** 
105b0 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77  In all cases new
105c0 20 64 61 74 61 62 61 73 65 73 20 63 72 65 61 74   databases creat
105d0 65 64 20 75 73 69 6e 67 20 74 68 65 20 41 54 54  ed using the ATT
105e0 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a  ACH command are.
105f0 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20    ** created to 
10600 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 65 66  use the same def
10610 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69  ault text encodi
10620 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64  ng as the main d
10630 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a  atabase. If.  **
10640 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
10650 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20  se has not been 
10660 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f  initialized and/
10670 6f 72 20 63 72 65 61 74 65 64 20 77 68 65 6e 20  or created when 
10680 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65  ATTACH.  ** is e
10690 78 65 63 75 74 65 64 2c 20 74 68 69 73 20 69 73  xecuted, this is
106a0 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65   done before the
106b0 20 41 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f   ATTACH operatio
106c0 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  n..  **.  ** In 
106d0 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  the second form 
106e0 74 68 69 73 20 70 72 61 67 6d 61 20 73 65 74 73  this pragma sets
106f0 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69   the text encodi
10700 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e  ng to be used in
10710 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61  .  ** new databa
10720 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64  se files created
10730 20 75 73 69 6e 67 20 74 68 69 73 20 64 61 74 61   using this data
10740 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20  base handle. It 
10750 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65  is only.  ** use
10760 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69  ful if invoked i
10770 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
10780 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
10790 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73 65  se i.  */.  case
107a0 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44 49 4e   PragTyp_ENCODIN
107b0 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20  G: {.    static 
107c0 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63  const struct Enc
107d0 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61  Name {.      cha
107e0 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20  r *zName;.      
107f0 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e  u8 enc;.    } en
10800 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20  cnames[] = {.   
10810 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20 20 20     { "UTF8",    
10820 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20   SQLITE_UTF8    
10830 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
10840 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c 49 54  UTF-8",    SQLIT
10850 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c  E_UTF8        },
10860 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65    /* Must be ele
10870 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20  ment [1] */.    
10880 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c 20    { "UTF-16le", 
10890 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20  SQLITE_UTF16LE  
108a0 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
108b0 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f  e element [2] */
108c0 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
108d0 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  be", SQLITE_UTF1
108e0 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d  6BE     },  /* M
108f0 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
10900 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  3] */.      { "U
10910 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49 54 45  TF16le",  SQLITE
10920 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a  _UTF16LE     },.
10930 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62 65        { "UTF16be
10940 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ",  SQLITE_UTF16
10950 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  BE     },.      
10960 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20  { "UTF-16",   0 
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10980 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54   }, /* SQLITE_UT
10990 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20  F16NATIVE */.   
109a0 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20 20     { "UTF16",   
109b0 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
109c0 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45      }, /* SQLITE
109d0 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a  _UTF16NATIVE */.
109e0 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20        { 0, 0 }. 
109f0 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20     };.    const 
10a00 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a  struct EncName *
10a10 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21 7a  pEnc;.    if( !z
10a20 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20 22  Right ){    /* "
10a30 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22  PRAGMA encoding"
10a40 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73 71   */.      if( sq
10a50 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
10a60 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
10a70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
10a80 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
10a90 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
10aa0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
10ab0 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
10ac0 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 65  COLNAME_NAME, "e
10ad0 6e 63 6f 64 69 6e 67 22 2c 20 53 51 4c 49 54 45  ncoding", SQLITE
10ae0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
10af0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10b00 32 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  2(v, OP_String8,
10b10 20 30 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73   0, 1);.      as
10b20 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
10b30 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d  QLITE_UTF8].enc=
10b40 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a  =SQLITE_UTF8 );.
10b50 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e        assert( en
10b60 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54  cnames[SQLITE_UT
10b70 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49  F16LE].enc==SQLI
10b80 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20  TE_UTF16LE );.  
10b90 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e      assert( encn
10ba0 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31  ames[SQLITE_UTF1
10bb0 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45  6BE].enc==SQLITE
10bc0 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 20 20  _UTF16BE );.    
10bd0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
10be0 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20 65 6e 63  ngeP4(v, -1, enc
10bf0 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65  names[ENC(pParse
10c00 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20 50 34  ->db)].zName, P4
10c10 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
10c20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10c30 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
10c40 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 65  w, 1, 1);.    }e
10c50 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20 20 20  lse{            
10c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22              /* "
10c70 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20  PRAGMA encoding 
10c80 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20  = XXX" */.      
10c90 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74  /* Only change t
10ca0 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69  he value of sqli
10cb0 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61  te.enc if the da
10cc0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73  tabase handle is
10cd0 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e   not.      ** in
10ce0 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68  itialized. If th
10cf0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
10d00 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20  exists, the new 
10d10 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65  sqlite.enc value
10d20 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62  .      ** will b
10d30 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68  e overwritten wh
10d40 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69 73  en the schema is
10d50 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66   next loaded. If
10d60 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20   it does not.   
10d70 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78     ** already ex
10d80 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65  ists, it will be
10d90 20 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20   created to use 
10da0 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67  the new encoding
10db0 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f   value..      */
10dc0 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20 20 20  .      if( .    
10dd0 20 20 20 20 21 28 44 62 48 61 73 50 72 6f 70 65      !(DbHasPrope
10de0 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63  rty(db, 0, DB_Sc
10df0 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20  hemaLoaded)) || 
10e00 0a 20 20 20 20 20 20 20 20 44 62 48 61 73 50 72  .        DbHasPr
10e10 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42  operty(db, 0, DB
10e20 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29  _Empty) .      )
10e30 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 45  {.        for(pE
10e40 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b  nc=&encnames[0];
10e50 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45   pEnc->zName; pE
10e60 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  nc++){.         
10e70 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
10e80 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70  trICmp(zRight, p
10e90 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20  Enc->zName) ){. 
10ea0 20 20 20 20 20 20 20 20 20 20 20 45 4e 43 28 70             ENC(p
10eb0 50 61 72 73 65 2d 3e 64 62 29 20 3d 20 70 45 6e  Parse->db) = pEn
10ec0 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65  c->enc ? pEnc->e
10ed0 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55 54 46 31  nc : SQLITE_UTF1
10ee0 36 4e 41 54 49 56 45 3b 0a 20 20 20 20 20 20 20  6NATIVE;.       
10ef0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
10f00 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
10f10 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 70  }.        if( !p
10f20 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20  Enc->zName ){.  
10f30 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
10f40 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
10f50 22 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63  "unsupported enc
10f60 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67  oding: %s", zRig
10f70 68 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ht);.        }. 
10f80 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
10f90 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
10fa0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
10fb0 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65  UTF16 */..#ifnde
10fc0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  f SQLITE_OMIT_SC
10fd0 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
10fe0 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  GMAS.  /*.  **  
10ff0 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
11000 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  e.]schema_versio
11010 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  n.  **   PRAGMA 
11020 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d  [database.]schem
11030 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  a_version = <int
11040 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
11050 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
11060 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e  se.]user_version
11070 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
11080 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76  database.]user_v
11090 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65  ersion = <intege
110a0 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  r>.  **.  **   P
110b0 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
110c0 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20  ]freelist_count 
110d0 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a  = <integer>.  **
110e0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
110f0 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63  database.]applic
11100 61 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20  ation_id.  **   
11110 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
11120 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64  .]application_id
11130 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
11140 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72 61 67 6d  *.  ** The pragm
11150 61 27 73 20 73 63 68 65 6d 61 5f 76 65 72 73 69  a's schema_versi
11160 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76 65 72 73  on and user_vers
11170 69 6f 6e 20 61 72 65 20 75 73 65 64 20 74 6f 20  ion are used to 
11180 73 65 74 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20  set or get.  ** 
11190 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
111a0 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
111b0 61 6e 64 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  and user-version
111c0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
111d0 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65 20 73 63  Both.  ** the sc
111e0 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64  hema-version and
111f0 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   the user-versio
11200 6e 20 61 72 65 20 33 32 2d 62 69 74 20 73 69 67  n are 32-bit sig
11210 6e 65 64 20 69 6e 74 65 67 65 72 73 0a 20 20 2a  ned integers.  *
11220 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  * stored in the 
11230 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 2e  database header.
11240 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
11250 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20  chema-cookie is 
11260 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e  usually only man
11270 69 70 75 6c 61 74 65 64 20 69 6e 74 65 72 6e 61  ipulated interna
11280 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49  lly by SQLite. I
11290 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d  t.  ** is increm
112a0 65 6e 74 65 64 20 62 79 20 53 51 4c 69 74 65 20  ented by SQLite 
112b0 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
112c0 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
112d0 6d 6f 64 69 66 69 65 64 20 28 62 79 0a 20 20 2a  modified (by.  *
112e0 2a 20 63 72 65 61 74 69 6e 67 20 6f 72 20 64 72  * creating or dr
112f0 6f 70 70 69 6e 67 20 61 20 74 61 62 6c 65 20 6f  opping a table o
11300 72 20 69 6e 64 65 78 29 2e 20 54 68 65 20 73 63  r index). The sc
11310 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20  hema version is 
11320 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c  used by.  ** SQL
11330 69 74 65 20 65 61 63 68 20 74 69 6d 65 20 61 20  ite each time a 
11340 71 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65  query is execute
11350 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74  d to ensure that
11360 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61   the internal ca
11370 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  che.  ** of the 
11380 73 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e  schema used when
11390 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53   compiling the S
113a0 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73  QL query matches
113b0 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 0a 20   the schema of. 
113c0 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
113d0 20 61 67 61 69 6e 73 74 20 77 68 69 63 68 20 74   against which t
113e0 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
113f0 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78  y is actually ex
11400 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62  ecuted..  ** Sub
11410 76 65 72 74 69 6e 67 20 74 68 69 73 20 6d 65 63  verting this mec
11420 68 61 6e 69 73 6d 20 62 79 20 75 73 69 6e 67 20  hanism by using 
11430 22 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76  "PRAGMA schema_v
11440 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66  ersion" to modif
11450 79 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d  y.  ** the schem
11460 61 2d 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 74  a-version is pot
11470 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f  entially dangero
11480 75 73 20 61 6e 64 20 6d 61 79 20 6c 65 61 64 20  us and may lead 
11490 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  to program.  ** 
114a0 63 72 61 73 68 65 73 20 6f 72 20 64 61 74 61 62  crashes or datab
114b0 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20  ase corruption. 
114c0 55 73 65 20 77 69 74 68 20 63 61 75 74 69 6f 6e  Use with caution
114d0 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  !.  **.  ** The 
114e0 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 73 20  user-version is 
114f0 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61  not used interna
11500 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49  lly by SQLite. I
11510 74 20 6d 61 79 20 62 65 20 75 73 65 64 20 62 79  t may be used by
11520 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f  .  ** applicatio
11530 6e 73 20 66 6f 72 20 61 6e 79 20 70 75 72 70 6f  ns for any purpo
11540 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  se..  */.  case 
11550 50 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56  PragTyp_HEADER_V
11560 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20  ALUE: {.    int 
11570 69 43 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 43 6f  iCookie;   /* Co
11580 6f 6b 69 65 20 69 6e 64 65 78 2e 20 31 20 66 6f  okie index. 1 fo
11590 72 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 2c  r schema-cookie,
115a0 20 36 20 66 6f 72 20 75 73 65 72 2d 63 6f 6f 6b   6 for user-cook
115b0 69 65 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ie. */.    sqlit
115c0 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28  e3VdbeUsesBtree(
115d0 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 77 69  v, iDb);.    swi
115e0 74 63 68 28 20 7a 4c 65 66 74 5b 30 5d 20 29 7b  tch( zLeft[0] ){
115f0 0a 20 20 20 20 20 20 63 61 73 65 20 27 61 27 3a  .      case 'a':
11600 20 63 61 73 65 20 27 41 27 3a 0a 20 20 20 20 20   case 'A':.     
11610 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52     iCookie = BTR
11620 45 45 5f 41 50 50 4c 49 43 41 54 49 4f 4e 5f 49  EE_APPLICATION_I
11630 44 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  D;.        break
11640 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27 66 27  ;.      case 'f'
11650 3a 20 63 61 73 65 20 27 46 27 3a 0a 20 20 20 20  : case 'F':.    
11660 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54      iCookie = BT
11670 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f  REE_FREE_PAGE_CO
11680 55 4e 54 3b 0a 20 20 20 20 20 20 20 20 62 72 65  UNT;.        bre
11690 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27  ak;.      case '
116a0 73 27 3a 20 63 61 73 65 20 27 53 27 3a 0a 20 20  s': case 'S':.  
116b0 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20        iCookie = 
116c0 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
116d0 53 49 4f 4e 3b 0a 20 20 20 20 20 20 20 20 62 72  SION;.        br
116e0 65 61 6b 3b 0a 20 20 20 20 20 20 64 65 66 61 75  eak;.      defau
116f0 6c 74 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f  lt:.        iCoo
11700 6b 69 65 20 3d 20 42 54 52 45 45 5f 55 53 45 52  kie = BTREE_USER
11710 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20  _VERSION;.      
11720 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a    break;.    }..
11730 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26      if( zRight &
11740 26 20 69 43 6f 6f 6b 69 65 21 3d 42 54 52 45 45  & iCookie!=BTREE
11750 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f 55 4e 54  _FREE_PAGE_COUNT
11760 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57 72 69   ){.      /* Wri
11770 74 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  te the specified
11780 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f   cookie value */
11790 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
117a0 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73  nst VdbeOpList s
117b0 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20  etCookie[] = {. 
117c0 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e         { OP_Tran
117d0 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20  saction,    0,  
117e0 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20  1,  0},    /* 0 
117f0 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
11800 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20 20  Integer,        
11810 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  1,  0},    /
11820 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 1 */.        {
11830 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20   OP_SetCookie,  
11840 20 20 20 20 30 2c 20 20 30 2c 20 20 31 7d 2c 20      0,  0,  1}, 
11850 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20     /* 2 */.     
11860 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64   };.      int ad
11870 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
11880 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
11890 61 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65  aySize(setCookie
118a0 29 2c 20 73 65 74 43 6f 6f 6b 69 65 29 3b 0a 20  ), setCookie);. 
118b0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
118c0 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
118d0 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
118e0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
118f0 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 73 71 6c  1(v, addr+1, sql
11900 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
11910 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
11920 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
11930 61 64 64 72 2b 32 2c 20 69 44 62 29 3b 0a 20 20  addr+2, iDb);.  
11940 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
11950 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2b  hangeP2(v, addr+
11960 32 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20  2, iCookie);.   
11970 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
11980 20 52 65 61 64 20 74 68 65 20 73 70 65 63 69 66   Read the specif
11990 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65  ied cookie value
119a0 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
119b0 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
119c0 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d  t readCookie[] =
119d0 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f   {.        { OP_
119e0 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20  Transaction,    
119f0 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20   0,  0,  0},    
11a00 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 0 */.        
11a10 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c  { OP_ReadCookie,
11a20 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d        0,  1,  0}
11a30 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
11a40 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
11a50 52 6f 77 2c 20 20 20 20 20 20 20 31 2c 20 20 31  Row,       1,  1
11a60 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20  ,  0}.      };. 
11a70 20 20 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20       int addr = 
11a80 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11a90 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
11aa0 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c 20 72  e(readCookie), r
11ab0 65 61 64 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20  eadCookie);.    
11ac0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
11ad0 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69  ngeP1(v, addr, i
11ae0 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
11af0 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
11b00 2c 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a  , addr+1, iDb);.
11b10 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11b20 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64  eChangeP3(v, add
11b30 72 2b 31 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20  r+1, iCookie);. 
11b40 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11b50 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
11b60 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
11b70 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
11b80 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
11b90 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f  , zLeft, SQLITE_
11ba0 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
11bb0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
11bc0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
11bd0 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
11be0 49 4f 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  ION_PRAGMAS */..
11bf0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
11c00 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
11c10 4e 5f 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a  N_DIAGS.  /*.  *
11c20 2a 20 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69  *   PRAGMA compi
11c30 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a  le_options.  **.
11c40 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20    ** Return the 
11c50 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d  names of all com
11c60 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
11c70 73 20 75 73 65 64 20 69 6e 20 74 68 69 73 20 62  s used in this b
11c80 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f  uild,.  ** one o
11c90 70 74 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20  ption per row.. 
11ca0 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
11cb0 79 70 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  yp_COMPILE_OPTIO
11cc0 4e 53 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20  NS: {.    int i 
11cd0 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  = 0;.    const c
11ce0 68 61 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 73  har *zOpt;.    s
11cf0 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
11d00 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
11d10 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31  pParse->nMem = 1
11d20 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
11d30 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
11d40 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
11d50 22 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22  "compile_option"
11d60 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
11d70 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f  ;.    while( (zO
11d80 70 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d  pt = sqlite3_com
11d90 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69  pileoption_get(i
11da0 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ++))!=0 ){.     
11db0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11dc0 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
11dd0 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 4f 70 74 2c  , 0, 1, 0, zOpt,
11de0 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
11df0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
11e00 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
11e10 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   1);.    }.  }. 
11e20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
11e30 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  * SQLITE_OMIT_CO
11e40 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
11e50 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
11e60 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
11e70 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
11e80 20 5b 64 61 74 61 62 61 73 65 2e 5d 77 61 6c 5f   [database.]wal_
11e90 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73  checkpoint = pas
11ea0 73 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72  sive|full|restar
11eb0 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63  t.  **.  ** Chec
11ec0 6b 70 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62  kpoint the datab
11ed0 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ase..  */.  case
11ee0 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45   PragTyp_WAL_CHE
11ef0 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69  CKPOINT: {.    i
11f00 6e 74 20 69 42 74 20 3d 20 28 70 49 64 32 2d 3e  nt iBt = (pId2->
11f10 7a 3f 69 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58  z?iDb:SQLITE_MAX
11f20 5f 41 54 54 41 43 48 45 44 29 3b 0a 20 20 20 20  _ATTACHED);.    
11f30 69 6e 74 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49  int eMode = SQLI
11f40 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
11f50 53 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 7a  SSIVE;.    if( z
11f60 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
11f70 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
11f80 70 28 7a 52 69 67 68 74 2c 20 22 66 75 6c 6c 22  p(zRight, "full"
11f90 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
11fa0 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43  eMode = SQLITE_C
11fb0 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a  HECKPOINT_FULL;.
11fc0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
11fd0 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
11fe0 52 69 67 68 74 2c 20 22 72 65 73 74 61 72 74 22  Right, "restart"
11ff0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
12000 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43  eMode = SQLITE_C
12010 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
12020 54 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  T;.      }.    }
12030 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
12040 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29  SetNumCols(v, 3)
12050 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
12060 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69  em = 3;.    sqli
12070 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
12080 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
12090 4e 41 4d 45 2c 20 22 62 75 73 79 22 2c 20 53 51  NAME, "busy", SQ
120a0 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
120b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
120c0 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
120d0 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 67  LNAME_NAME, "log
120e0 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
120f0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
12100 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
12110 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  2, COLNAME_NAME,
12120 20 22 63 68 65 63 6b 70 6f 69 6e 74 65 64 22 2c   "checkpointed",
12130 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
12140 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ..    sqlite3Vdb
12150 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68  eAddOp3(v, OP_Ch
12160 65 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65  eckpoint, iBt, e
12170 4d 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20 73 71  Mode, 1);.    sq
12180 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
12190 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
121a0 20 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72   1, 3);.  }.  br
121b0 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  eak;..  /*.  ** 
121c0 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74    PRAGMA wal_aut
121d0 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a  ocheckpoint.  **
121e0 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75     PRAGMA wal_au
121f0 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e  tocheckpoint = N
12200 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69  .  **.  ** Confi
12210 67 75 72 65 20 61 20 64 61 74 61 62 61 73 65 20  gure a database 
12220 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75  connection to au
12230 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68 65 63  tomatically chec
12240 6b 70 6f 69 6e 74 20 61 20 64 61 74 61 62 61 73  kpoint a databas
12250 65 0a 20 20 2a 2a 20 61 66 74 65 72 20 61 63 63  e.  ** after acc
12260 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d  umulating N fram
12270 65 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f  es in the log. O
12280 72 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 20  r query for the 
12290 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 20 20  current value.  
122a0 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20  ** of N..  */.  
122b0 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c  case PragTyp_WAL
122c0 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a  _AUTOCHECKPOINT:
122d0 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
122e0 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
122f0 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  e3_wal_autocheck
12300 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69 74 65  point(db, sqlite
12310 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
12320 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
12330 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
12340 2c 20 22 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  , "wal_autocheck
12350 70 6f 69 6e 74 22 2c 20 0a 20 20 20 20 20 20 20  point", .       
12360 64 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b  db->xWalCallback
12370 3d 3d 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  ==sqlite3WalDefa
12380 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20  ultHook ? .     
12390 20 20 20 20 20 20 53 51 4c 49 54 45 5f 50 54 52        SQLITE_PTR
123a0 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c  _TO_INT(db->pWal
123b0 41 72 67 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20  Arg) : 0);.  }. 
123c0 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a   break;.#endif..
123d0 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
123e0 41 20 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a  A shrink_memory.
123f0 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 70    **.  ** This p
12400 72 61 67 6d 61 20 61 74 74 65 6d 70 74 73 20 74  ragma attempts t
12410 6f 20 66 72 65 65 20 61 73 20 6d 75 63 68 20 6d  o free as much m
12420 65 6d 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c  emory as possibl
12430 65 20 66 72 6f 6d 20 74 68 65 0a 20 20 2a 2a 20  e from the.  ** 
12440 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
12450 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 2a   connection..  *
12460 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
12470 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20  _SHRINK_MEMORY: 
12480 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62  {.    sqlite3_db
12490 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
124a0 64 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  db);.    break;.
124b0 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
124c0 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d   PRAGMA busy_tim
124d0 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  eout.  **   PRAG
124e0 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20  MA busy_timeout 
124f0 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61  = N.  **.  ** Ca
12500 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  ll sqlite3_busy_
12510 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20  timeout(db, N). 
12520 20 52 65 74 75 72 6e 20 74 68 65 20 63 75 72 72   Return the curr
12530 65 6e 74 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  ent timeout valu
12540 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73  e.  ** if one is
12550 20 73 65 74 2e 20 20 49 66 20 6e 6f 20 62 75 73   set.  If no bus
12560 79 20 68 61 6e 64 6c 65 72 20 6f 72 20 61 20 64  y handler or a d
12570 69 66 66 65 72 65 6e 74 20 62 75 73 79 20 68 61  ifferent busy ha
12580 6e 64 6c 65 72 20 69 73 20 73 65 74 0a 20 20 2a  ndler is set.  *
12590 2a 20 74 68 65 6e 20 30 20 69 73 20 72 65 74 75  * then 0 is retu
125a0 72 6e 65 64 2e 20 20 53 65 74 74 69 6e 67 20 74  rned.  Setting t
125b0 68 65 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20  he busy_timeout 
125c0 74 6f 20 30 20 6f 72 20 6e 65 67 61 74 69 76 65  to 0 or negative
125d0 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 73 20 74  .  ** disables t
125e0 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f  he timeout..  */
125f0 0a 20 20 2f 2a 63 61 73 65 20 50 72 61 67 54 79  .  /*case PragTy
12600 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f  p_BUSY_TIMEOUT*/
12610 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
12620 61 73 73 65 72 74 28 20 61 50 72 61 67 6d 61 4e  assert( aPragmaN
12630 61 6d 65 73 5b 6d 69 64 5d 2e 65 50 72 61 67 54  ames[mid].ePragT
12640 79 70 3d 3d 50 72 61 67 54 79 70 5f 42 55 53 59  yp==PragTyp_BUSY
12650 5f 54 49 4d 45 4f 55 54 20 29 3b 0a 20 20 20 20  _TIMEOUT );.    
12660 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
12670 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79      sqlite3_busy
12680 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 73 71 6c  _timeout(db, sql
12690 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
126a0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
126b0 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
126c0 72 73 65 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20  rse, "timeout", 
126d0 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74   db->busyTimeout
126e0 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
126f0 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  }..  /*.  **   P
12700 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f  RAGMA soft_heap_
12710 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 20 50 52 41  limit.  **   PRA
12720 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69  GMA soft_heap_li
12730 6d 69 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  mit = N.  **.  *
12740 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73  * Call sqlite3_s
12750 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34  oft_heap_limit64
12760 28 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65  (N).  Return the
12770 20 72 65 73 75 6c 74 2e 20 20 49 66 20 4e 20 69   result.  If N i
12780 73 20 6f 6d 69 74 74 65 64 2c 0a 20 20 2a 2a 20  s omitted,.  ** 
12790 75 73 65 20 2d 31 2e 0a 20 20 2a 2f 0a 20 20 63  use -1..  */.  c
127a0 61 73 65 20 50 72 61 67 54 79 70 5f 53 4f 46 54  ase PragTyp_SOFT
127b0 5f 48 45 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20  _HEAP_LIMIT: {. 
127c0 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34     sqlite3_int64
127d0 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   N;.    if( zRig
127e0 68 74 20 26 26 20 73 71 6c 69 74 65 33 41 74 6f  ht && sqlite3Ato
127f0 69 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 2c 20  i64(zRight, &N, 
12800 31 30 30 30 30 30 30 2c 20 53 51 4c 49 54 45 5f  1000000, SQLITE_
12810 55 54 46 38 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  UTF8)==SQLITE_OK
12820 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
12830 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  3_soft_heap_limi
12840 74 36 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20  t64(N);.    }.  
12850 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
12860 74 28 70 50 61 72 73 65 2c 20 22 73 6f 66 74 5f  t(pParse, "soft_
12870 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71  heap_limit",  sq
12880 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
12890 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20 20  limit64(-1));.  
128a0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69    break;.  }..#i
128b0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
128c0 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
128d0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
128e0 20 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74    /*.  ** Report
128f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61   the current sta
12900 74 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20  te of file logs 
12910 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65  for all database
12920 73 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  s.  */.  case Pr
12930 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55  agTyp_LOCK_STATU
12940 53 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20  S: {.    static 
12950 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
12960 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d  t azLockName[] =
12970 20 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b   {.      "unlock
12980 65 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22  ed", "shared", "
12990 72 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64  reserved", "pend
129a0 69 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65  ing", "exclusive
129b0 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74  ".    };.    int
129c0 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   i;.    sqlite3V
129d0 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
129e0 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   2);.    pParse-
129f0 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73  >nMem = 2;.    s
12a00 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
12a10 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
12a20 4d 45 5f 4e 41 4d 45 2c 20 22 64 61 74 61 62 61  ME_NAME, "databa
12a30 73 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  se", SQLITE_STAT
12a40 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
12a50 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
12a60 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
12a70 45 2c 20 22 73 74 61 74 75 73 22 2c 20 53 51 4c  E, "status", SQL
12a80 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
12a90 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
12aa0 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nDb; i++){.     
12ab0 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 20   Btree *pBt;.   
12ac0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
12ad0 53 74 61 74 65 20 3d 20 22 75 6e 6b 6e 6f 77 6e  State = "unknown
12ae0 22 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a  ";.      int j;.
12af0 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
12b00 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29 20  b[i].zName==0 ) 
12b10 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
12b20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
12b30 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
12b40 20 30 2c 20 31 2c 20 30 2c 20 64 62 2d 3e 61 44   0, 1, 0, db->aD
12b50 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53  b[i].zName, P4_S
12b60 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70 42  TATIC);.      pB
12b70 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  t = db->aDb[i].p
12b80 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70 42  Bt;.      if( pB
12b90 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 42  t==0 || sqlite3B
12ba0 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3d 3d  treePager(pBt)==
12bb0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 74  0 ){.        zSt
12bc0 61 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b 0a  ate = "closed";.
12bd0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
12be0 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
12bf0 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62 2d  trol(db, i ? db-
12c00 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 20 3a 20  >aDb[i].zName : 
12c10 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  0, .            
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
12c40 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 2c  FCNTL_LOCKSTATE,
12c50 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20   &j)==SQLITE_OK 
12c60 29 7b 0a 20 20 20 20 20 20 20 20 20 7a 53 74 61  ){.         zSta
12c70 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b  te = azLockName[
12c80 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  j];.      }.    
12c90 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
12ca0 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
12cb0 38 2c 20 30 2c 20 32 2c 20 30 2c 20 7a 53 74 61  8, 0, 2, 0, zSta
12cc0 74 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a  te, P4_STATIC);.
12cd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12ce0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
12cf0 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a  sultRow, 1, 2);.
12d00 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
12d10 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
12d20 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43  def SQLITE_HAS_C
12d30 4f 44 45 43 0a 20 20 63 61 73 65 20 50 72 61 67  ODEC.  case Prag
12d40 54 79 70 5f 4b 45 59 3a 20 7b 0a 20 20 20 20 69  Typ_KEY: {.    i
12d50 66 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c 69  f( zRight ) sqli
12d60 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a  te3_key_v2(db, z
12d70 44 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69  Db, zRight, sqli
12d80 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67  te3Strlen30(zRig
12d90 68 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ht));.    break;
12da0 0a 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67  .  }.  case Prag
12db0 54 79 70 5f 52 45 4b 45 59 3a 20 7b 0a 20 20 20  Typ_REKEY: {.   
12dc0 20 69 66 28 20 7a 52 69 67 68 74 20 29 20 73 71   if( zRight ) sq
12dd0 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64  lite3_rekey_v2(d
12de0 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20  b, zDb, zRight, 
12df0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
12e00 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72  zRight));.    br
12e10 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20  eak;.  }.  case 
12e20 50 72 61 67 54 79 70 5f 48 45 58 4b 45 59 3a 20  PragTyp_HEXKEY: 
12e30 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
12e40 20 29 7b 0a 20 20 20 20 20 20 75 38 20 69 42 79   ){.      u8 iBy
12e50 74 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b  te;.      int i;
12e60 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4b 65 79  .      char zKey
12e70 5b 34 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28  [40];.      for(
12e80 69 3d 30 2c 20 69 42 79 74 65 3d 30 3b 20 69 3c  i=0, iByte=0; i<
12e90 73 69 7a 65 6f 66 28 7a 4b 65 79 29 2a 32 20 26  sizeof(zKey)*2 &
12ea0 26 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  & sqlite3Isxdigi
12eb0 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b 20 69 2b  t(zRight[i]); i+
12ec0 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 42 79 74  +){.        iByt
12ed0 65 20 3d 20 28 69 42 79 74 65 3c 3c 34 29 20 2b  e = (iByte<<4) +
12ee0 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
12ef0 28 7a 52 69 67 68 74 5b 69 5d 29 3b 0a 20 20 20  (zRight[i]);.   
12f00 20 20 20 20 20 69 66 28 20 28 69 26 31 29 21 3d       if( (i&1)!=
12f10 30 20 29 20 7a 4b 65 79 5b 69 2f 32 5d 20 3d 20  0 ) zKey[i/2] = 
12f20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 7d 0a 20  iByte;.      }. 
12f30 20 20 20 20 20 69 66 28 20 28 7a 4c 65 66 74 5b       if( (zLeft[
12f40 33 5d 20 26 20 30 78 66 29 3d 3d 30 78 62 20 29  3] & 0xf)==0xb )
12f50 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
12f60 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  3_key_v2(db, zDb
12f70 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20  , zKey, i/2);.  
12f80 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12f90 20 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79     sqlite3_rekey
12fa0 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65  _v2(db, zDb, zKe
12fb0 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d  y, i/2);.      }
12fc0 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
12fd0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66  ;.  }.#endif.#if
12fe0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
12ff0 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65  HAS_CODEC) || de
13000 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
13010 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20 63 61 73  BLE_CEROD).  cas
13020 65 20 50 72 61 67 54 79 70 5f 41 43 54 49 56 41  e PragTyp_ACTIVA
13030 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 3a 20 69  TE_EXTENSIONS: i
13040 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 23 69 66  f( zRight ){.#if
13050 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43  def SQLITE_HAS_C
13060 4f 44 45 43 0a 20 20 20 20 69 66 28 20 73 71 6c  ODEC.    if( sql
13070 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69  ite3StrNICmp(zRi
13080 67 68 74 2c 20 22 73 65 65 2d 22 2c 20 34 29 3d  ght, "see-", 4)=
13090 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
130a0 74 65 33 5f 61 63 74 69 76 61 74 65 5f 73 65 65  te3_activate_see
130b0 28 26 7a 52 69 67 68 74 5b 34 5d 29 3b 0a 20 20  (&zRight[4]);.  
130c0 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65    }.#endif.#ifde
130d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
130e0 43 45 52 4f 44 0a 20 20 20 20 69 66 28 20 73 71  CEROD.    if( sq
130f0 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52  lite3StrNICmp(zR
13100 69 67 68 74 2c 20 22 63 65 72 6f 64 2d 22 2c 20  ight, "cerod-", 
13110 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  6)==0 ){.      s
13120 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f  qlite3_activate_
13130 63 65 72 6f 64 28 26 7a 52 69 67 68 74 5b 36 5d  cerod(&zRight[6]
13140 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
13150 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
13160 64 69 66 0a 0a 20 20 7d 20 2f 2a 20 45 6e 64 20  dif..  } /* End 
13170 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 73 77  of the PRAGMA sw
13180 69 74 63 68 20 2a 2f 0a 0a 70 72 61 67 6d 61 5f  itch */..pragma_
13190 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65 33 44 62  out:.  sqlite3Db
131a0 46 72 65 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b  Free(db, zLeft);
131b0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
131c0 28 64 62 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a  (db, zRight);.}.
131d0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
131e0 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
131f0 0a                                               .