/ Hex Artifact Content
Login

Artifact 24fb88e294ff7cd5bd1859f88503349ce92aa187:


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 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
db50: 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20  e(db, pFK->zTo, 
db60: 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66  zDb);.        if
db70: 28 20 70 50 61 72 65 6e 74 3d 3d 30 20 29 20 63  ( pParent==0 ) c
db80: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
db90: 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20   pIdx = 0;.     
dba0: 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c     sqlite3TableL
dbb0: 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62 2c  ock(pParse, iDb,
dbc0: 20 70 50 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20   pParent->tnum, 
dbd0: 30 2c 20 70 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d  0, pParent->zNam
dbe0: 65 29 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20  e);.        x = 
dbf0: 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
dc00: 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70 50 61  ndex(pParse, pPa
dc10: 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78  rent, pFK, &pIdx
dc20: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 69 66  , 0);.        if
dc30: 28 20 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ( x==0 ){.      
dc40: 20 20 20 20 69 66 28 20 70 49 64 78 3d 3d 30 20      if( pIdx==0 
dc50: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
dc60: 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
dc70: 70 50 61 72 73 65 2c 20 69 2c 20 69 44 62 2c 20  pParse, i, iDb, 
dc80: 70 50 61 72 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e  pParent, OP_Open
dc90: 52 65 61 64 29 3b 0a 20 20 20 20 20 20 20 20 20  Read);.         
dca0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
dcb0: 20 20 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65      KeyInfo *pKe
dcc0: 79 20 3d 20 73 71 6c 69 74 65 33 49 6e 64 65 78  y = sqlite3Index
dcd0: 4b 65 79 69 6e 66 6f 28 70 50 61 72 73 65 2c 20  Keyinfo(pParse, 
dce0: 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20  pIdx);.         
dcf0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
dd00: 64 4f 70 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52  dOp3(v, OP_OpenR
dd10: 65 61 64 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e  ead, i, pIdx->tn
dd20: 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  um, iDb);.      
dd30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
dd40: 65 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c  eChangeP4(v, -1,
dd50: 20 28 63 68 61 72 2a 29 70 4b 65 79 2c 20 50 34   (char*)pKey, P4
dd60: 5f 4b 45 59 49 4e 46 4f 5f 48 41 4e 44 4f 46 46  _KEYINFO_HANDOFF
dd70: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
dd80: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
dd90: 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
dda0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
ddb0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ddc0: 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
ddd0: 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20 7c  pParse->nErr>0 |
dde0: 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20 20 20  | pFK==0 );.    
ddf0: 20 20 69 66 28 20 70 46 4b 20 29 20 62 72 65 61    if( pFK ) brea
de00: 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 61  k;.      if( pPa
de10: 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50  rse->nTab<i ) pP
de20: 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a  arse->nTab = i;.
de30: 20 20 20 20 20 20 61 64 64 72 54 6f 70 20 3d 20        addrTop = 
de40: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
de50: 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20  1(v, OP_Rewind, 
de60: 30 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  0);.      for(i=
de70: 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b  1, pFK=pTab->pFK
de80: 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46  ey; pFK; i++, pF
de90: 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d  K=pFK->pNextFrom
dea0: 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 65  ){.        pPare
deb0: 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  nt = sqlite3Find
dec0: 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a  Table(db, pFK->z
ded0: 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20  To, zDb);.      
dee0: 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20    pIdx = 0;.    
def0: 20 20 20 20 61 69 43 6f 6c 73 20 3d 20 30 3b 0a      aiCols = 0;.
df00: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72          if( pPar
df10: 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ent ){.         
df20: 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f   x = sqlite3FkLo
df30: 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73 65  cateIndex(pParse
df40: 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20  , pParent, pFK, 
df50: 26 70 49 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b  &pIdx, &aiCols);
df60: 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
df70: 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20 20  t( x==0 );.     
df80: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 64 64     }.        add
df90: 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62  rOk = sqlite3Vdb
dfa0: 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20  eMakeLabel(v);. 
dfb0: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
dfc0: 6e 74 20 26 26 20 70 49 64 78 3d 3d 30 20 29 7b  nt && pIdx==0 ){
dfd0: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69  .          int i
dfe0: 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b  Key = pFK->aCol[
dff0: 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20  0].iFrom;.      
e000: 20 20 20 20 61 73 73 65 72 74 28 20 69 4b 65 79      assert( iKey
e010: 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70 54 61 62  >=0 && iKey<pTab
e020: 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20  ->nCol );.      
e030: 20 20 20 20 69 66 28 20 69 4b 65 79 21 3d 70 54      if( iKey!=pT
e040: 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20 20 20  ab->iPKey ){.   
e050: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e060: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
e070: 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65 79  _Column, 0, iKey
e080: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
e090: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f         sqlite3Co
e0a0: 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76 2c 20 70  lumnDefault(v, p
e0b0: 54 61 62 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f  Tab, iKey, regRo
e0c0: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  w);.            
e0d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e0e0: 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20  2(v, OP_IsNull, 
e0f0: 72 65 67 52 6f 77 2c 20 61 64 64 72 4f 6b 29 3b  regRow, addrOk);
e100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e110: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
e120: 2c 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 2c 20  , OP_MustBeInt, 
e130: 72 65 67 52 6f 77 2c 0a 20 20 20 20 20 20 20 20  regRow,.        
e140: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e150: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
e160: 2b 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  +3);.          }
e170: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
e180: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e190: 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c  Op2(v, OP_Rowid,
e1a0: 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20   0, regRow);.   
e1b0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e1c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e1d0: 64 4f 70 33 28 76 2c 20 4f 50 5f 4e 6f 74 45 78  dOp3(v, OP_NotEx
e1e0: 69 73 74 73 2c 20 69 2c 20 30 2c 20 72 65 67 52  ists, i, 0, regR
e1f0: 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  ow);.          s
e200: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
e210: 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20  (v, OP_Goto, 0, 
e220: 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20  addrOk);.       
e230: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
e240: 6d 70 48 65 72 65 28 76 2c 20 73 71 6c 69 74 65  mpHere(v, sqlite
e250: 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72  3VdbeCurrentAddr
e260: 28 76 29 2d 32 29 3b 0a 20 20 20 20 20 20 20 20  (v)-2);.        
e270: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
e280: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d   for(j=0; j<pFK-
e290: 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20  >nCol; j++){.   
e2a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e2b0: 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
e2c0: 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62  nOfTable(v, pTab
e2d0: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2f0: 20 61 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73   aiCols ? aiCols
e300: 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b  [j] : pFK->aCol[
e310: 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65 67 52 6f 77  j].iFrom, regRow
e320: 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  +j);.           
e330: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e340: 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c  p2(v, OP_IsNull,
e350: 20 72 65 67 52 6f 77 2b 6a 2c 20 61 64 64 72 4f   regRow+j, addrO
e360: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  k);.          }.
e370: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
e380: 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  arent ){.       
e390: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e3a0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 61 6b  AddOp3(v, OP_Mak
e3b0: 65 52 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c  eRecord, regRow,
e3c0: 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b   pFK->nCol, regK
e3d0: 65 79 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ey);.           
e3e0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
e3f0: 67 65 50 34 28 76 2c 20 2d 31 2c 0a 20 20 20 20  geP4(v, -1,.    
e400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e410: 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
e420: 69 6e 69 74 79 53 74 72 28 76 2c 70 49 64 78 29  inityStr(v,pIdx)
e430: 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b  , P4_TRANSIENT);
e440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e450: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e  ite3VdbeAddOp4In
e460: 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69  t(v, OP_Found, i
e470: 2c 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79  , addrOk, regKey
e480: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
e490: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
e4a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e4b0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69  ddOp2(v, OP_Rowi
e4c0: 64 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b  d, 0, regResult+
e4d0: 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  1);.        sqli
e4e0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
e4f0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
e500: 72 65 67 52 65 73 75 6c 74 2b 32 2c 20 30 2c 20  regResult+2, 0, 
e510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e520: 20 20 20 20 20 20 20 20 20 20 20 70 46 4b 2d 3e             pFK->
e530: 7a 54 6f 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e  zTo, P4_TRANSIEN
e540: 54 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  T);.        sqli
e550: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
e560: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d 31   OP_Integer, i-1
e570: 2c 20 72 65 67 52 65 73 75 6c 74 2b 33 29 3b 0a  , regResult+3);.
e580: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e590: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
e5a0: 52 65 73 75 6c 74 52 6f 77 2c 20 72 65 67 52 65  ResultRow, regRe
e5b0: 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20 20 20 20  sult, 4);.      
e5c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73    sqlite3VdbeRes
e5d0: 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61 64 64  olveLabel(v, add
e5e0: 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71  rOk);.        sq
e5f0: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
e600: 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 7d  aiCols);.      }
e610: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
e620: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e  beAddOp2(v, OP_N
e630: 65 78 74 2c 20 30 2c 20 61 64 64 72 54 6f 70 2b  ext, 0, addrTop+
e640: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
e650: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
e660: 20 61 64 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d   addrTop);.    }
e670: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
e680: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
e690: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
e6a0: 47 47 45 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20  GGER) */.#endif 
e6b0: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
e6c0: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
e6d0: 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  KEY) */..#ifndef
e6e0: 20 4e 44 45 42 55 47 0a 20 20 63 61 73 65 20 50   NDEBUG.  case P
e6f0: 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52  ragTyp_PARSER_TR
e700: 41 43 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  ACE: {.    if( z
e710: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
e720: 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  f( sqlite3GetBoo
e730: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20  lean(zRight, 0) 
e740: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
e750: 65 33 50 61 72 73 65 72 54 72 61 63 65 28 73 74  e3ParserTrace(st
e760: 64 65 72 72 2c 20 22 70 61 72 73 65 72 3a 20 22  derr, "parser: "
e770: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
e780: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
e790: 61 72 73 65 72 54 72 61 63 65 28 30 2c 20 30 29  arserTrace(0, 0)
e7a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
e7b0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
e7c0: 64 69 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74  dif..  /* Reinst
e7d0: 61 6c 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e 64  all the LIKE and
e7e0: 20 47 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e   GLOB functions.
e7f0: 20 20 54 68 65 20 76 61 72 69 61 6e 74 20 6f 66    The variant of
e800: 20 4c 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20   LIKE.  ** used 
e810: 77 69 6c 6c 20 62 65 20 63 61 73 65 20 73 65 6e  will be case sen
e820: 73 69 74 69 76 65 20 6f 72 20 6e 6f 74 20 64 65  sitive or not de
e830: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 52  pending on the R
e840: 48 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  HS..  */.  case 
e850: 50 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e  PragTyp_CASE_SEN
e860: 53 49 54 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20  SITIVE_LIKE: {. 
e870: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
e880: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
e890: 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
e8a0: 6f 6e 73 28 64 62 2c 20 73 71 6c 69 74 65 33 47  ons(db, sqlite3G
e8b0: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
e8c0: 2c 20 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  , 0));.    }.  }
e8d0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64  .  break;..#ifnd
e8e0: 65 66 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52  ef SQLITE_INTEGR
e8f0: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
e900: 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAX.# define SQL
e910: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
e920: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30  ECK_ERROR_MAX 10
e930: 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  0.#endif..#ifnde
e940: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
e950: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20  TEGRITY_CHECK.  
e960: 2f 2a 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b  /* Pragma "quick
e970: 5f 63 68 65 63 6b 22 20 69 73 20 72 65 64 75 63  _check" is reduc
e980: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20  ed version of . 
e990: 20 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68   ** integrity_ch
e9a0: 65 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20  eck designed to 
e9b0: 64 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61  detect most data
e9c0: 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a  base corruption.
e9d0: 20 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73    ** without mos
e9e0: 74 20 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61  t of the overhea
e9f0: 64 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65  d of a full inte
ea00: 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a  grity-check..  *
ea10: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
ea20: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
ea30: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a  : {.    int i, j
ea40: 2c 20 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a  , addr, mxErr;..
ea50: 20 20 20 20 2f 2a 20 43 6f 64 65 20 74 68 61 74      /* Code that
ea60: 20 61 70 70 65 61 72 73 20 61 74 20 74 68 65 20   appears at the 
ea70: 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 74 65 67  end of the integ
ea80: 72 69 74 79 20 63 68 65 63 6b 2e 20 20 49 66 20  rity check.  If 
ea90: 6e 6f 20 65 72 72 6f 72 0a 20 20 20 20 2a 2a 20  no error.    ** 
eaa0: 6d 65 73 73 61 67 65 73 20 68 61 76 65 20 62 65  messages have be
eab0: 65 6e 20 67 65 6e 65 72 61 74 65 64 2c 20 6f 75  en generated, ou
eac0: 74 70 75 74 20 4f 4b 2e 20 20 4f 74 68 65 72 77  tput OK.  Otherw
ead0: 69 73 65 20 6f 75 74 70 75 74 20 74 68 65 0a 20  ise output the. 
eae0: 20 20 20 2a 2a 20 65 72 72 6f 72 20 6d 65 73 73     ** error mess
eaf0: 61 67 65 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  age.    */.    s
eb00: 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
eb10: 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d  OpList endCode[]
eb20: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
eb30: 41 64 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20  AddImm,      1, 
eb40: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  0,        0},   
eb50: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 0 */.      {
eb60: 20 4f 50 5f 49 66 4e 65 67 2c 20 20 20 20 20 20   OP_IfNeg,      
eb70: 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   1, 0,        0}
eb80: 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
eb90: 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c     { OP_String8,
eba0: 20 20 20 20 20 30 2c 20 33 2c 20 20 20 20 20 20       0, 3,      
ebb0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f    0},    /* 2 */
ebc0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75  .      { OP_Resu
ebd0: 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20  ltRow,   3, 1,  
ebe0: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b        0},.    };
ebf0: 0a 0a 20 20 20 20 69 6e 74 20 69 73 51 75 69 63  ..    int isQuic
ec00: 6b 20 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f  k = (sqlite3Tolo
ec10: 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27  wer(zLeft[0])=='
ec20: 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20  q');..    /* If 
ec30: 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61  the PRAGMA comma
ec40: 6e 64 20 77 61 73 20 6f 66 20 74 68 65 20 66 6f  nd was of the fo
ec50: 72 6d 20 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e  rm "PRAGMA <db>.
ec60: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
ec70: 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e 20 69 44  ,.    ** then iD
ec80: 62 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  b is set to the 
ec90: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
eca0: 61 62 61 73 65 20 69 64 65 6e 74 69 66 69 65 64  abase identified
ecb0: 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a   by <db>..    **
ecc0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74   In this case, t
ecd0: 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20  he integrity of 
ece0: 64 61 74 61 62 61 73 65 20 69 44 62 20 6f 6e 6c  database iDb onl
ecf0: 79 20 69 73 20 76 65 72 69 66 69 65 64 20 62 79  y is verified by
ed00: 0a 20 20 20 20 2a 2a 20 74 68 65 20 56 44 42 45  .    ** the VDBE
ed10: 20 63 72 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a   created below..
ed20: 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74      **.    ** Ot
ed30: 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65 20  herwise, if the 
ed40: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d 70  command was simp
ed50: 6c 79 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67  ly "PRAGMA integ
ed60: 72 69 74 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a  rity_check" (or.
ed70: 20 20 20 20 2a 2a 20 22 50 52 41 47 4d 41 20 71      ** "PRAGMA q
ed80: 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68  uick_check"), th
ed90: 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f  en iDb is set to
eda0: 20 30 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65   0. In this case
edb0: 2c 20 73 65 74 20 69 44 62 0a 20 20 20 20 2a 2a  , set iDb.    **
edc0: 20 74 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f 20   to -1 here, to 
edd0: 69 6e 64 69 63 61 74 65 20 74 68 61 74 20 74 68  indicate that th
ede0: 65 20 56 44 42 45 20 73 68 6f 75 6c 64 20 76 65  e VDBE should ve
edf0: 72 69 66 79 20 74 68 65 20 69 6e 74 65 67 72 69  rify the integri
ee00: 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c  ty.    ** of all
ee10: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
ee20: 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73  ses.  */.    ass
ee30: 65 72 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20  ert( iDb>=0 );. 
ee40: 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d     assert( iDb==
ee50: 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a  0 || pId2->z );.
ee60: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d      if( pId2->z=
ee70: 3d 30 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a  =0 ) iDb = -1;..
ee80: 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a      /* Initializ
ee90: 65 20 74 68 65 20 56 44 42 45 20 70 72 6f 67 72  e the VDBE progr
eea0: 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61 72 73 65  am */.    pParse
eeb0: 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20  ->nMem = 6;.    
eec0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
eed0: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
eee0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
eef0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
ef00: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 74 65  NAME_NAME, "inte
ef10: 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 20 53 51  grity_check", SQ
ef20: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20  LITE_STATIC);.. 
ef30: 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 6d 61     /* Set the ma
ef40: 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e  ximum error coun
ef50: 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d  t */.    mxErr =
ef60: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
ef70: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
ef80: 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  X;.    if( zRigh
ef90: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
efa0: 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68  e3GetInt32(zRigh
efb0: 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20 20 20  t, &mxErr);.    
efc0: 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30 20 29    if( mxErr<=0 )
efd0: 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72 72 20  {.        mxErr 
efe0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  = SQLITE_INTEGRI
eff0: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
f000: 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  AX;.      }.    
f010: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
f020: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
f030: 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20 31 29  teger, mxErr, 1)
f040: 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f 6c  ;  /* reg[1] hol
f050: 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74 20 2a  ds errors left *
f060: 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20  /..    /* Do an 
f070: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20  integrity check 
f080: 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61 73 65  on each database
f090: 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72   file */.    for
f0a0: 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
f0b0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61 73   i++){.      Has
f0c0: 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20  hElem *x;.      
f0d0: 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20  Hash *pTbls;.   
f0e0: 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a     int cnt = 0;.
f0f0: 0a 20 20 20 20 20 20 69 66 28 20 4f 4d 49 54 5f  .      if( OMIT_
f100: 54 45 4d 50 44 42 20 26 26 20 69 3d 3d 31 20 29  TEMPDB && i==1 )
f110: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
f120: 20 69 66 28 20 69 44 62 3e 3d 30 20 26 26 20 69   if( iDb>=0 && i
f130: 21 3d 69 44 62 20 29 20 63 6f 6e 74 69 6e 75 65  !=iDb ) continue
f140: 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ;..      sqlite3
f150: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
f160: 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20 20 20  (pParse, i);.   
f170: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
f180: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
f190: 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 2f 2a 20  P_IfPos, 1); /* 
f1a0: 48 61 6c 74 20 69 66 20 6f 75 74 20 6f 66 20 65  Halt if out of e
f1b0: 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 73  rrors */.      s
f1c0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
f1d0: 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20  (v, OP_Halt, 0, 
f1e0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
f1f0: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
f200: 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f   addr);..      /
f210: 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
f220: 79 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42  y check of the B
f230: 2d 54 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20  -Tree.      **. 
f240: 20 20 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79       ** Begin by
f250: 20 66 69 6c 6c 69 6e 67 20 72 65 67 69 73 74 65   filling registe
f260: 72 73 20 32 2c 20 33 2c 20 2e 2e 2e 20 77 69 74  rs 2, 3, ... wit
f270: 68 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 73  h the root pages
f280: 20 6e 75 6d 62 65 72 73 0a 20 20 20 20 20 20 2a   numbers.      *
f290: 2a 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73  * for all tables
f2a0: 20 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20   and indices in 
f2b0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
f2c0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
f2d0: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
f2e0: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
f2f0: 69 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70  i, 0) );.      p
f300: 54 62 6c 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b  Tbls = &db->aDb[
f310: 69 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48  i].pSchema->tblH
f320: 61 73 68 3b 0a 20 20 20 20 20 20 66 6f 72 28 78  ash;.      for(x
f330: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
f340: 28 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71  (pTbls); x; x=sq
f350: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29  liteHashNext(x))
f360: 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20  {.        Table 
f370: 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61  *pTab = sqliteHa
f380: 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20  shData(x);.     
f390: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
f3a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
f3b0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
f3c0: 49 6e 74 65 67 65 72 2c 20 70 54 61 62 2d 3e 74  Integer, pTab->t
f3d0: 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20  num, 2+cnt);.   
f3e0: 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20       cnt++;.    
f3f0: 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61      for(pIdx=pTa
f400: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
f410: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
f420: 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t){.          sq
f430: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
f440: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
f450: 49 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74  Idx->tnum, 2+cnt
f460: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74  );.          cnt
f470: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ++;.        }.  
f480: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
f490: 4d 61 6b 65 20 73 75 72 65 20 73 75 66 66 69 63  Make sure suffic
f4a0: 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 72  ient number of r
f4b0: 65 67 69 73 74 65 72 73 20 68 61 76 65 20 62 65  egisters have be
f4c0: 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a  en allocated */.
f4d0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
f4e0: 65 6d 20 3d 20 4d 41 58 28 20 70 50 61 72 73 65  em = MAX( pParse
f4f0: 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 37 20 29 3b  ->nMem, cnt+7 );
f500: 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68  ..      /* Do th
f510: 65 20 62 2d 74 72 65 65 20 69 6e 74 65 67 72 69  e b-tree integri
f520: 74 79 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20  ty checks */.   
f530: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f540: 64 4f 70 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp3(v, OP_Integ
f550: 72 69 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20  rityCk, 2, cnt, 
f560: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
f570: 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
f580: 20 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61   (u8)i);.      a
f590: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
f5a0: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73  eAddOp1(v, OP_Is
f5b0: 4e 75 6c 6c 2c 20 32 29 3b 0a 20 20 20 20 20 20  Null, 2);.      
f5c0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f5d0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
f5e0: 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20   0, 3, 0,.      
f5f0: 20 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74     sqlite3MPrint
f600: 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61  f(db, "*** in da
f610: 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22  tabase %s ***\n"
f620: 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
f630: 6d 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34  me),.         P4
f640: 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20  _DYNAMIC);.     
f650: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f660: 70 32 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32  p2(v, OP_Move, 2
f670: 2c 20 34 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 4);.      sqli
f680: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
f690: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33   OP_Concat, 4, 3
f6a0: 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 2);.      sqli
f6b0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
f6c0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32   OP_ResultRow, 2
f6d0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
f6e0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
f6f0: 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20  v, addr);..     
f700: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
f710: 6c 20 74 68 65 20 69 6e 64 69 63 65 73 20 61 72  l the indices ar
f720: 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 63 6f  e constructed co
f730: 72 72 65 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a  rrectly..      *
f740: 2f 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71  /.      for(x=sq
f750: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54  liteHashFirst(pT
f760: 62 6c 73 29 3b 20 78 20 26 26 20 21 69 73 51 75  bls); x && !isQu
f770: 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61 73  ick; x=sqliteHas
f780: 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20  hNext(x)){.     
f790: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
f7a0: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
f7b0: 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  x);.        Inde
f7c0: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20  x *pIdx;.       
f7d0: 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 0a 20   int loopTop;.. 
f7e0: 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d         if( pTab-
f7f0: 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e  >pIndex==0 ) con
f800: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 61  tinue;.        a
f810: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
f820: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66  eAddOp1(v, OP_If
f830: 50 6f 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f  Pos, 1);  /* Sto
f840: 70 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f  p if out of erro
f850: 72 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71  rs */.        sq
f860: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
f870: 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30  v, OP_Halt, 0, 0
f880: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
f890: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
f8a0: 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 20 20 20  , addr);.       
f8b0: 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
f8c0: 65 43 6c 65 61 72 28 70 50 61 72 73 65 29 3b 0a  eClear(pParse);.
f8d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f          sqlite3O
f8e0: 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63  penTableAndIndic
f8f0: 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62 2c  es(pParse, pTab,
f900: 20 31 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29   1, OP_OpenRead)
f910: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  ;.        for(j=
f920: 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
f930: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
f940: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
f950: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  +){.          sq
f960: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
f970: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30  v, OP_Integer, 0
f980: 2c 20 37 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78  , 7+j); /* index
f990: 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74 65 72   entries counter
f9a0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
f9b0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
f9c0: 65 6d 20 3d 20 4d 41 58 28 70 50 61 72 73 65 2d  em = MAX(pParse-
f9d0: 3e 6e 4d 65 6d 2c 20 37 2b 6a 29 3b 0a 20 20 20  >nMem, 7+j);.   
f9e0: 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73       loopTop = s
f9f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
fa00: 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 31  (v, OP_Rewind, 1
fa10: 2c 20 30 29 20 2b 20 31 3b 0a 20 20 20 20 20 20  , 0) + 1;.      
fa20: 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
fa30: 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
fa40: 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
fa50: 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
fa60: 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20        int jmp2, 
fa70: 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp3;.          
fa80: 69 6e 74 20 72 31 3b 0a 20 20 20 20 20 20 20 20  int r1;.        
fa90: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
faa0: 64 62 65 4f 70 4c 69 73 74 20 69 64 78 45 72 72  dbeOpList idxErr
fab0: 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20  [] = {.         
fac0: 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20     { OP_AddImm, 
fad0: 20 20 20 20 20 31 2c 20 2d 31 2c 20 20 30 7d 2c       1, -1,  0},
fae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f  .            { O
faf0: 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30  P_String8,     0
fb00: 2c 20 20 33 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  3,  0},    /*
fb10: 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   1 */.          
fb20: 20 20 7b 20 4f 50 5f 52 6f 77 69 64 2c 20 20 20    { OP_Rowid,   
fb30: 20 20 20 20 31 2c 20 20 34 2c 20 20 30 7d 2c 0a      1,  4,  0},.
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
fb50: 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c  _String8,     0,
fb60: 20 20 35 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    5,  0},    /* 
fb70: 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  3 */.           
fb80: 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20   { OP_String8,  
fb90: 20 20 20 30 2c 20 20 36 2c 20 20 30 7d 2c 20 20     0,  6,  0},  
fba0: 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20    /* 4 */.      
fbb0: 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61        { OP_Conca
fbc0: 74 2c 20 20 20 20 20 20 34 2c 20 20 33 2c 20 20  t,      4,  3,  
fbd0: 33 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  3},.            
fbe0: 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20  { OP_Concat,    
fbf0: 20 20 35 2c 20 20 33 2c 20 20 33 7d 2c 0a 20 20    5,  3,  3},.  
fc00: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43            { OP_C
fc10: 6f 6e 63 61 74 2c 20 20 20 20 20 20 36 2c 20 20  oncat,      6,  
fc20: 33 2c 20 20 33 7d 2c 0a 20 20 20 20 20 20 20 20  3,  3},.        
fc30: 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52      { OP_ResultR
fc40: 6f 77 2c 20 20 20 33 2c 20 20 31 2c 20 20 30 7d  ow,   3,  1,  0}
fc50: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  ,.            { 
fc60: 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20  OP_IfPos,       
fc70: 31 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f  1,  0,  0},    /
fc80: 2a 20 39 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 9 */.         
fc90: 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20     { OP_Halt,   
fca0: 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c       0,  0,  0},
fcb0: 0a 20 20 20 20 20 20 20 20 20 20 7d 3b 0a 20 20  .          };.  
fcc0: 20 20 20 20 20 20 20 20 72 31 20 3d 20 73 71 6c          r1 = sql
fcd0: 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
fce0: 78 4b 65 79 28 70 50 61 72 73 65 2c 20 70 49 64  xKey(pParse, pId
fcf0: 78 2c 20 31 2c 20 33 2c 20 30 2c 20 26 6a 6d 70  x, 1, 3, 0, &jmp
fd00: 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  3);.          sq
fd10: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
fd20: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2b  v, OP_AddImm, 7+
fd30: 6a 2c 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65  j, 1);  /* incre
fd40: 6d 65 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e 74  ment entry count
fd50: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 6a 6d   */.          jm
fd60: 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p2 = sqlite3Vdbe
fd70: 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f  AddOp4Int(v, OP_
fd80: 46 6f 75 6e 64 2c 20 6a 2b 32 2c 20 30 2c 20 72  Found, j+2, 0, r
fd90: 31 2c 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e  1, pIdx->nColumn
fda0: 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  +1);.          a
fdb0: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
fdc0: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
fdd0: 72 61 79 53 69 7a 65 28 69 64 78 45 72 72 29 2c  raySize(idxErr),
fde0: 20 69 64 78 45 72 72 29 3b 0a 20 20 20 20 20 20   idxErr);.      
fdf0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
fe00: 68 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b  hangeP4(v, addr+
fe10: 31 2c 20 22 72 6f 77 69 64 20 22 2c 20 50 34 5f  1, "rowid ", P4_
fe20: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
fe30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
fe40: 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 33  angeP4(v, addr+3
fe50: 2c 20 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d  , " missing from
fe60: 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53 54 41   index ", P4_STA
fe70: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20  TIC);.          
fe80: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
fe90: 65 50 34 28 76 2c 20 61 64 64 72 2b 34 2c 20 70  eP4(v, addr+4, p
fea0: 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54  Idx->zName, P4_T
feb0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
fec0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fed0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
fee0: 2b 39 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  +9);.          s
fef0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
ff00: 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20  re(v, jmp2);.   
ff10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ff20: 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76  beResolveLabel(v
ff30: 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20  , jmp3);.       
ff40: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
ff50: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
ff60: 4f 50 5f 4e 65 78 74 2c 20 31 2c 20 6c 6f 6f 70  OP_Next, 1, loop
ff70: 54 6f 70 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Top);.        sq
ff80: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
ff90: 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b  e(v, loopTop-1);
ffa0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ffb0: 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
ffc0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ffd0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
ffe0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
fff0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
10000 20 20 20 20 20 20 20 20 22 77 72 6f 6e 67 20 23          "wrong #
10010 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
10020 6e 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49  ndex ", P4_STATI
10030 43 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  C);.        for(
10040 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
10050 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
10060 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
10070 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
10080 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
10090 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
100a0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
100b0 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
100c0 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64   OP_IfPos, 1, ad
100d0 64 72 2b 32 29 3b 0a 20 20 20 20 20 20 20 20 20  dr+2);.         
100e0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
100f0 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30  p2(v, OP_Halt, 0
10100 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
10110 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10120 32 28 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 6a  2(v, OP_Count, j
10130 2b 32 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20  +2, 3);.        
10140 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10150 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 37 2b  Op3(v, OP_Eq, 7+
10160 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 0a 20  j, addr+8, 3);. 
10170 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
10180 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
10190 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
101a0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
101b0 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
101c0 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
101d0 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65  , 0, pIdx->zName
101e0 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b  , P4_TRANSIENT);
101f0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10200 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
10210 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c 20 32 2c  OP_Concat, 3, 2,
10220 20 37 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   7);.          s
10230 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10240 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
10250 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , 7, 1);.       
10260 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
10270 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
10280 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20 0a  UNT */.      } .
10290 20 20 20 20 7d 0a 20 20 20 20 61 64 64 72 20 3d      }.    addr =
102a0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
102b0 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
102c0 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64  ze(endCode), end
102d0 43 6f 64 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  Code);.    sqlit
102e0 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  e3VdbeChangeP2(v
102f0 2c 20 61 64 64 72 2c 20 2d 6d 78 45 72 72 29 3b  , addr, -mxErr);
10300 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10310 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
10320 2b 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  +1);.    sqlite3
10330 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20  VdbeChangeP4(v, 
10340 61 64 64 72 2b 32 2c 20 22 6f 6b 22 2c 20 50 34  addr+2, "ok", P4
10350 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 0a 20 20  _STATIC);.  }.  
10360 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
10370 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
10380 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
10390 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
103a0 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a  OMIT_UTF16.  /*.
103b0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e    **   PRAGMA en
103c0 63 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52  coding.  **   PR
103d0 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20  AGMA encoding = 
103e0 22 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36 22  "utf-8"|"utf-16"
103f0 7c 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74 66  |"utf-16le"|"utf
10400 2d 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  -16be".  **.  **
10410 20 49 6e 20 69 74 73 20 66 69 72 73 74 20 66 6f   In its first fo
10420 72 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61 20  rm, this pragma 
10430 72 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63 6f  returns the enco
10440 64 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e  ding of the main
10450 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  .  ** database. 
10460 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
10470 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  is not initializ
10480 65 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69 61  ed, it is initia
10490 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a  lized now..  **.
104a0 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
104b0 66 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72 61  form of this pra
104c0 67 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  gma is a no-op i
104d0 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
104e0 61 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61  ase file.  ** ha
104f0 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62 65  s not already be
10500 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  en initialized. 
10510 49 6e 20 74 68 69 73 20 63 61 73 65 20 69 74 20  In this case it 
10520 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74  sets the default
10530 0a 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74  .  ** encoding t
10540 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64  hat will be used
10550 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
10560 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 61  tabase file if a
10570 20 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69   new file.  ** i
10580 73 20 63 72 65 61 74 65 64 2e 20 49 66 20 61 6e  s created. If an
10590 20 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20 64   existing main d
105a0 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
105b0 6f 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  opened, then the
105c0 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74 65  .  ** default te
105d0 78 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20  xt encoding for 
105e0 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74  the existing dat
105f0 61 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a 20  abase is used.. 
10600 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c   ** .  ** In all
10610 20 63 61 73 65 73 20 6e 65 77 20 64 61 74 61 62   cases new datab
10620 61 73 65 73 20 63 72 65 61 74 65 64 20 75 73 69  ases created usi
10630 6e 67 20 74 68 65 20 41 54 54 41 43 48 20 63 6f  ng the ATTACH co
10640 6d 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63  mmand are.  ** c
10650 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
10660 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20 74  e same default t
10670 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20  ext encoding as 
10680 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
10690 65 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d  e. If.  ** the m
106a0 61 69 6e 20 64 61 74 61 62 61 73 65 20 68 61 73  ain database has
106b0 20 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69 61   not been initia
106c0 6c 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72 65  lized and/or cre
106d0 61 74 65 64 20 77 68 65 6e 20 41 54 54 41 43 48  ated when ATTACH
106e0 0a 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74 65  .  ** is execute
106f0 64 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20  d, this is done 
10700 62 65 66 6f 72 65 20 74 68 65 20 41 54 54 41 43  before the ATTAC
10710 48 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a  H operation..  *
10720 2a 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65  *.  ** In the se
10730 63 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20 70  cond form this p
10740 72 61 67 6d 61 20 73 65 74 73 20 74 68 65 20 74  ragma sets the t
10750 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20  ext encoding to 
10760 62 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20  be used in.  ** 
10770 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c  new database fil
10780 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
10790 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 68   this database h
107a0 61 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c  andle. It is onl
107b0 79 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69 66  y.  ** useful if
107c0 20 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61   invoked immedia
107d0 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6d  tely after the m
107e0 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a 20  ain database i. 
107f0 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
10800 79 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20  yp_ENCODING: {. 
10810 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
10820 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b  struct EncName {
10830 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  .      char *zNa
10840 6d 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e 63  me;.      u8 enc
10850 3b 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73  ;.    } encnames
10860 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22  [] = {.      { "
10870 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54  UTF8",     SQLIT
10880 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c  E_UTF8        },
10890 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22  .      { "UTF-8"
108a0 2c 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38  ,    SQLITE_UTF8
108b0 20 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d          },  /* M
108c0 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
108d0 31 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  1] */.      { "U
108e0 54 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54 45  TF-16le", SQLITE
108f0 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 20  _UTF16LE     }, 
10900 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
10910 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20  ent [2] */.     
10920 20 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20 53   { "UTF-16be", S
10930 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20  QLITE_UTF16BE   
10940 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65    },  /* Must be
10950 20 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a   element [3] */.
10960 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c 65        { "UTF16le
10970 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ",  SQLITE_UTF16
10980 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  LE     },.      
10990 7b 20 22 55 54 46 31 36 62 65 22 2c 20 20 53 51  { "UTF16be",  SQ
109a0 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20  LITE_UTF16BE    
109b0 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46   },.      { "UTF
109c0 2d 31 36 22 2c 20 20 20 30 20 20 20 20 20 20 20  -16",   0       
109d0 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a             }, /*
109e0 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
109f0 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  IVE */.      { "
10a00 55 54 46 31 36 22 2c 20 20 20 20 30 20 20 20 20  UTF16",    0    
10a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
10a20 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36   /* SQLITE_UTF16
10a30 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20  NATIVE */.      
10a40 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a  { 0, 0 }.    };.
10a50 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74      const struct
10a60 20 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a   EncName *pEnc;.
10a70 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
10a80 29 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41  ){    /* "PRAGMA
10a90 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20   encoding" */.  
10aa0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
10ab0 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
10ac0 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
10ad0 6f 75 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  out;.      sqlit
10ae0 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
10af0 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  (v, 1);.      sq
10b00 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
10b10 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
10b20 45 5f 4e 41 4d 45 2c 20 22 65 6e 63 6f 64 69 6e  E_NAME, "encodin
10b30 67 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  g", SQLITE_STATI
10b40 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
10b50 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10b60 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 29  P_String8, 0, 1)
10b70 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
10b80 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
10b90 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54  UTF8].enc==SQLIT
10ba0 45 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20  E_UTF8 );.      
10bb0 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73  assert( encnames
10bc0 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d  [SQLITE_UTF16LE]
10bd0 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  .enc==SQLITE_UTF
10be0 31 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73  16LE );.      as
10bf0 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
10c00 51 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65  QLITE_UTF16BE].e
10c10 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
10c20 42 45 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  BE );.      sqli
10c30 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28  te3VdbeChangeP4(
10c40 76 2c 20 2d 31 2c 20 65 6e 63 6e 61 6d 65 73 5b  v, -1, encnames[
10c50 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 5d  ENC(pParse->db)]
10c60 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49  .zName, P4_STATI
10c70 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
10c80 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10c90 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
10ca0 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20 20  1);.    }else{  
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cc0 20 20 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41        /* "PRAGMA
10cd0 20 65 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58 22   encoding = XXX"
10ce0 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   */.      /* Onl
10cf0 79 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c  y change the val
10d00 75 65 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e 63  ue of sqlite.enc
10d10 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
10d20 20 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a 20   handle is not. 
10d30 20 20 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69       ** initiali
10d40 7a 65 64 2e 20 49 66 20 74 68 65 20 6d 61 69 6e  zed. If the main
10d50 20 64 61 74 61 62 61 73 65 20 65 78 69 73 74 73   database exists
10d60 2c 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65  , the new sqlite
10d70 2e 65 6e 63 20 76 61 6c 75 65 0a 20 20 20 20 20  .enc value.     
10d80 20 2a 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65 72   ** will be over
10d90 77 72 69 74 74 65 6e 20 77 68 65 6e 20 74 68 65  written when the
10da0 20 73 63 68 65 6d 61 20 69 73 20 6e 65 78 74 20   schema is next 
10db0 6c 6f 61 64 65 64 2e 20 49 66 20 69 74 20 64 6f  loaded. If it do
10dc0 65 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  es not.      ** 
10dd0 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20  already exists, 
10de0 69 74 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74  it will be creat
10df0 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65  ed to use the ne
10e00 77 20 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75 65  w encoding value
10e10 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
10e20 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 21 28   if( .        !(
10e30 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
10e40 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  , 0, DB_SchemaLo
10e50 61 64 65 64 29 29 20 7c 7c 20 0a 20 20 20 20 20  aded)) || .     
10e60 20 20 20 44 62 48 61 73 50 72 6f 70 65 72 74 79     DbHasProperty
10e70 28 64 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74 79  (db, 0, DB_Empty
10e80 29 20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  ) .      ){.    
10e90 20 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e      for(pEnc=&en
10ea0 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d  cnames[0]; pEnc-
10eb0 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b  >zName; pEnc++){
10ec0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 30  .          if( 0
10ed0 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
10ee0 28 7a 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e 7a  (zRight, pEnc->z
10ef0 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20 20  Name) ){.       
10f00 20 20 20 20 20 45 4e 43 28 70 50 61 72 73 65 2d       ENC(pParse-
10f10 3e 64 62 29 20 3d 20 70 45 6e 63 2d 3e 65 6e 63  >db) = pEnc->enc
10f20 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53   ? pEnc->enc : S
10f30 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
10f40 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  E;.            b
10f50 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
10f60 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
10f70 20 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a      if( !pEnc->z
10f80 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Name ){.        
10f90 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
10fa0 67 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75 70  g(pParse, "unsup
10fb0 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a  ported encoding:
10fc0 20 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20   %s", zRight);. 
10fd0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
10fe0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
10ff0 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
11000 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
11010 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
11020 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
11030 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20  ERSION_PRAGMAS. 
11040 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
11050 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68  A [database.]sch
11060 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ema_version.  **
11070 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
11080 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73  ase.]schema_vers
11090 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  ion = <integer>.
110a0 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    **.  **   PRAG
110b0 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73  MA [database.]us
110c0 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20  er_version.  ** 
110d0 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
110e0 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e  se.]user_version
110f0 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
11100 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
11110 5b 64 61 74 61 62 61 73 65 2e 5d 66 72 65 65 6c  [database.]freel
11120 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74  ist_count = <int
11130 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
11140 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
11150 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f  se.]application_
11160 69 64 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  id.  **   PRAGMA
11170 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c   [database.]appl
11180 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e  ication_id = <in
11190 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
111a0 20 54 68 65 20 70 72 61 67 6d 61 27 73 20 73 63   The pragma's sc
111b0 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64  hema_version and
111c0 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72   user_version ar
111d0 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72  e used to set or
111e0 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61   get.  ** the va
111f0 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  lue of the schem
11200 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73  a-version and us
11210 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70  er-version, resp
11220 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20  ectively. Both. 
11230 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76   ** the schema-v
11240 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75  ersion and the u
11250 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20  ser-version are 
11260 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  32-bit signed in
11270 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72  tegers.  ** stor
11280 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ed in the databa
11290 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a  se header..  **.
112a0 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d    ** The schema-
112b0 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c  cookie is usuall
112c0 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74  y only manipulat
112d0 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
112e0 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a   SQLite. It.  **
112f0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
11300 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76  by SQLite whenev
11310 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
11320 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69  schema is modifi
11330 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61  ed (by.  ** crea
11340 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67  ting or dropping
11350 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65   a table or inde
11360 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76  x). The schema v
11370 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62  ersion is used b
11380 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61  y.  ** SQLite ea
11390 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20  ch time a query 
113a0 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65  is executed to e
113b0 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69  nsure that the i
113c0 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20  nternal cache.  
113d0 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ** of the schema
113e0 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69   used when compi
113f0 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65  ling the SQL que
11400 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73  ry matches the s
11410 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68  chema of.  ** th
11420 65 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e  e database again
11430 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  st which the com
11440 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61  piled query is a
11450 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64  ctually executed
11460 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e  ..  ** Subvertin
11470 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d  g this mechanism
11480 20 62 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d   by using "PRAGM
11490 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
114a0 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a  " to modify.  **
114b0 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
114c0 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c  ion is potential
114d0 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64  ly dangerous and
114e0 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f   may lead to pro
114f0 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65  gram.  ** crashe
11500 73 20 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f  s or database co
11510 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69  rruption. Use wi
11520 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a  th caution!.  **
11530 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76  .  ** The user-v
11540 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73  ersion is not us
11550 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
11560 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20   SQLite. It may 
11570 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  be used by.  ** 
11580 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72  applications for
11590 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20   any purpose..  
115a0 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
115b0 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a 20  p_HEADER_VALUE: 
115c0 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69  {.    int iCooki
115d0 65 3b 20 20 20 2f 2a 20 43 6f 6f 6b 69 65 20 69  e;   /* Cookie i
115e0 6e 64 65 78 2e 20 31 20 66 6f 72 20 73 63 68 65  ndex. 1 for sche
115f0 6d 61 2d 63 6f 6f 6b 69 65 2c 20 36 20 66 6f 72  ma-cookie, 6 for
11600 20 75 73 65 72 2d 63 6f 6f 6b 69 65 2e 20 2a 2f   user-cookie. */
11610 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
11620 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
11630 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 7a  );.    switch( z
11640 4c 65 66 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  Left[0] ){.     
11650 20 63 61 73 65 20 27 61 27 3a 20 63 61 73 65 20   case 'a': case 
11660 27 41 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f  'A':.        iCo
11670 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 41 50 50  okie = BTREE_APP
11680 4c 49 43 41 54 49 4f 4e 5f 49 44 3b 0a 20 20 20  LICATION_ID;.   
11690 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
116a0 20 20 63 61 73 65 20 27 66 27 3a 20 63 61 73 65    case 'f': case
116b0 20 27 46 27 3a 0a 20 20 20 20 20 20 20 20 69 43   'F':.        iC
116c0 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 46 52  ookie = BTREE_FR
116d0 45 45 5f 50 41 47 45 5f 43 4f 55 4e 54 3b 0a 20  EE_PAGE_COUNT;. 
116e0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
116f0 20 20 20 20 63 61 73 65 20 27 73 27 3a 20 63 61      case 's': ca
11700 73 65 20 27 53 27 3a 0a 20 20 20 20 20 20 20 20  se 'S':.        
11710 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f  iCookie = BTREE_
11720 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 3b 0a  SCHEMA_VERSION;.
11730 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
11740 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20       default:.  
11750 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20        iCookie = 
11760 42 54 52 45 45 5f 55 53 45 52 5f 56 45 52 53 49  BTREE_USER_VERSI
11770 4f 4e 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  ON;.        brea
11780 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  k;.    }..    if
11790 28 20 7a 52 69 67 68 74 20 26 26 20 69 43 6f 6f  ( zRight && iCoo
117a0 6b 69 65 21 3d 42 54 52 45 45 5f 46 52 45 45 5f  kie!=BTREE_FREE_
117b0 50 41 47 45 5f 43 4f 55 4e 54 20 29 7b 0a 20 20  PAGE_COUNT ){.  
117c0 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65      /* Write the
117d0 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69   specified cooki
117e0 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20  e value */.     
117f0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
11800 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b  beOpList setCook
11810 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ie[] = {.       
11820 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
11830 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d  n,    0,  1,  0}
11840 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
11850 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
11860 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c  r,        0,  1,
11870 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
11880 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65  .        { OP_Se
11890 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  tCookie,      0,
118a0 20 20 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20    0,  1},    /* 
118b0 32 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20  2 */.      };.  
118c0 20 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73      int addr = s
118d0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
118e0 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
118f0 28 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74  (setCookie), set
11900 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73  Cookie);.      s
11910 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
11920 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29  P1(v, addr, iDb)
11930 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
11940 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
11950 64 64 72 2b 31 2c 20 73 71 6c 69 74 65 33 41 74  ddr+1, sqlite3At
11960 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
11970 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
11980 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 32  angeP1(v, addr+2
11990 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
119a0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
119b0 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f  2(v, addr+2, iCo
119c0 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  okie);.    }else
119d0 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20  {.      /* Read 
119e0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  the specified co
119f0 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20  okie value */.  
11a00 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
11a10 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65 61 64   VdbeOpList read
11a20 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20  Cookie[] = {.   
11a30 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61       { OP_Transa
11a40 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30  ction,     0,  0
11a50 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a  ,  0},    /* 0 *
11a60 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52  /.        { OP_R
11a70 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20  eadCookie,      
11a80 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  1,  0},    /
11a90 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 1 */.        {
11aa0 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20   OP_ResultRow,  
11ab0 20 20 20 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a       1,  1,  0}.
11ac0 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69        };.      i
11ad0 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65  nt addr = sqlite
11ae0 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
11af0 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65 61 64  , ArraySize(read
11b00 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f  Cookie), readCoo
11b10 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  kie);.      sqli
11b20 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
11b30 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20  v, addr, iDb);. 
11b40 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11b50 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
11b60 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  +1, iDb);.      
11b70 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
11b80 65 50 33 28 76 2c 20 61 64 64 72 2b 31 2c 20 69  eP3(v, addr+1, i
11b90 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73  Cookie);.      s
11ba0 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
11bb0 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
11bc0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
11bd0 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
11be0 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66  LNAME_NAME, zLef
11bf0 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49  t, SQLITE_TRANSI
11c00 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ENT);.    }.  }.
11c10 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
11c20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  /* SQLITE_OMIT_S
11c30 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52  CHEMA_VERSION_PR
11c40 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
11c50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  f SQLITE_OMIT_CO
11c60 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
11c70 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  S.  /*.  **   PR
11c80 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74  AGMA compile_opt
11c90 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ions.  **.  ** R
11ca0 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73 20  eturn the names 
11cb0 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74  of all compile-t
11cc0 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65 64  ime options used
11cd0 20 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c 0a   in this build,.
11ce0 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20    ** one option 
11cf0 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20  per row..  */.  
11d00 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4d  case PragTyp_COM
11d10 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a  PILE_OPTIONS: {.
11d20 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20      int i = 0;. 
11d30 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
11d40 4f 70 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Opt;.    sqlite3
11d50 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
11d60 2c 20 31 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 1);.    pParse
11d70 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20  ->nMem = 1;.    
11d80 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
11d90 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
11da0 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70 69  AME_NAME, "compi
11db0 6c 65 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c 49  le_option", SQLI
11dc0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
11dd0 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73  while( (zOpt = s
11de0 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70  qlite3_compileop
11df0 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d  tion_get(i++))!=
11e00 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 ){.      sqlit
11e10 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
11e20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
11e30 2c 20 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a 20  , 0, zOpt, 0);. 
11e40 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11e50 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
11e60 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
11e70 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
11e80 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
11e90 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
11ea0 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a  PTION_DIAGS */..
11eb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
11ec0 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a  MIT_WAL.  /*.  *
11ed0 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
11ee0 62 61 73 65 2e 5d 77 61 6c 5f 63 68 65 63 6b 70  base.]wal_checkp
11ef0 6f 69 6e 74 20 3d 20 70 61 73 73 69 76 65 7c 66  oint = passive|f
11f00 75 6c 6c 7c 72 65 73 74 61 72 74 0a 20 20 2a 2a  ull|restart.  **
11f10 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74  .  ** Checkpoint
11f20 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20   the database.. 
11f30 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
11f40 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e  yp_WAL_CHECKPOIN
11f50 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 42 74  T: {.    int iBt
11f60 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a   = (pId2->z?iDb:
11f70 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
11f80 48 45 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d  HED);.    int eM
11f90 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45  ode = SQLITE_CHE
11fa0 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b  CKPOINT_PASSIVE;
11fb0 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
11fc0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
11fd0 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
11fe0 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29  ht, "full")==0 )
11ff0 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20  {.        eMode 
12000 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  = SQLITE_CHECKPO
12010 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20  INT_FULL;.      
12020 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
12030 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
12040 20 22 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29   "restart")==0 )
12050 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20  {.        eMode 
12060 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  = SQLITE_CHECKPO
12070 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20  INT_RESTART;.   
12080 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
12090 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
120a0 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20  Cols(v, 3);.    
120b0 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33  pParse->nMem = 3
120c0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
120d0 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
120e0 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
120f0 22 62 75 73 79 22 2c 20 53 51 4c 49 54 45 5f 53  "busy", SQLITE_S
12100 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
12110 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
12120 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
12130 4e 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c  NAME, "log", SQL
12140 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
12150 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
12160 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
12170 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63  NAME_NAME, "chec
12180 6b 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49 54  kpointed", SQLIT
12190 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20  E_STATIC);..    
121a0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
121b0 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69  3(v, OP_Checkpoi
121c0 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20  nt, iBt, eMode, 
121d0 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
121e0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
121f0 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29  ResultRow, 1, 3)
12200 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  ;.  }.  break;..
12210 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
12220 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  MA wal_autocheck
12230 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41  point.  **   PRA
12240 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63  GMA wal_autochec
12250 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a  kpoint = N.  **.
12260 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61    ** Configure a
12270 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12280 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69  tion to automati
12290 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74  cally checkpoint
122a0 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
122b0 20 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74   after accumulat
122c0 69 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20  ing N frames in 
122d0 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72  the log. Or quer
122e0 79 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  y for the curren
122f0 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20  t value.  ** of 
12300 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  N..  */.  case P
12310 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43  ragTyp_WAL_AUTOC
12320 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20  HECKPOINT: {.   
12330 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
12340 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61 6c       sqlite3_wal
12350 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28  _autocheckpoint(
12360 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28  db, sqlite3Atoi(
12370 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a  zRight));.    }.
12380 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
12390 49 6e 74 28 70 50 61 72 73 65 2c 20 22 77 61 6c  Int(pParse, "wal
123a0 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22  _autocheckpoint"
123b0 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57  , .       db->xW
123c0 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69  alCallback==sqli
123d0 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
123e0 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20  k ? .           
123f0 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
12400 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a  T(db->pWalArg) :
12410 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   0);.  }.  break
12420 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20  ;.#endif..  /*. 
12430 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69   **  PRAGMA shri
12440 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20  nk_memory.  **. 
12450 20 2a 2a 20 54 68 69 73 20 70 72 61 67 6d 61 20   ** This pragma 
12460 61 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65  attempts to free
12470 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20   as much memory 
12480 61 73 20 70 6f 73 73 69 62 6c 65 20 66 72 6f 6d  as possible from
12490 20 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e   the.  ** curren
124a0 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  t database conne
124b0 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61  ction..  */.  ca
124c0 73 65 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e  se PragTyp_SHRIN
124d0 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20 20  K_MEMORY: {.    
124e0 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61  sqlite3_db_relea
124f0 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20  se_memory(db);. 
12500 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
12510 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
12520 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20  A busy_timeout. 
12530 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73   **   PRAGMA bus
12540 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20  y_timeout = N.  
12550 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c  **.  ** Call sql
12560 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
12570 74 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72  t(db, N).  Retur
12580 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 69  n the current ti
12590 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a  meout value.  **
125a0 20 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20   if one is set. 
125b0 20 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64   If no busy hand
125c0 6c 65 72 20 6f 72 20 61 20 64 69 66 66 65 72 65  ler or a differe
125d0 6e 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20  nt busy handler 
125e0 69 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e  is set.  ** then
125f0 20 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20   0 is returned. 
12600 20 53 65 74 74 69 6e 67 20 74 68 65 20 62 75 73   Setting the bus
12610 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f  y_timeout to 0 o
12620 72 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20  r negative.  ** 
12630 64 69 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d  disables the tim
12640 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63  eout..  */.  /*c
12650 61 73 65 20 50 72 61 67 54 79 70 5f 42 55 53 59  ase PragTyp_BUSY
12660 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61 75  _TIMEOUT*/ defau
12670 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74  lt: {.    assert
12680 28 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  ( aPragmaNames[m
12690 69 64 5d 2e 65 50 72 61 67 54 79 70 3d 3d 50 72  id].ePragTyp==Pr
126a0 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
126b0 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  UT );.    if( zR
126c0 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
126d0 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
126e0 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74  ut(db, sqlite3At
126f0 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
12700 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
12710 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
12720 74 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62  timeout",  db->b
12730 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20  usyTimeout);.   
12740 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
12750 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
12760 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a  soft_heap_limit.
12770 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f    **   PRAGMA so
12780 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20  ft_heap_limit = 
12790 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c  N.  **.  ** Call
127a0 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
127b0 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 2e 20 20  ap_limit64(N).  
127c0 52 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c  Return the resul
127d0 74 2e 20 20 49 66 20 4e 20 69 73 20 6f 6d 69 74  t.  If N is omit
127e0 74 65 64 2c 0a 20 20 2a 2a 20 75 73 65 20 2d 31  ted,.  ** use -1
127f0 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
12800 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f  agTyp_SOFT_HEAP_
12810 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c  LIMIT: {.    sql
12820 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20  ite3_int64 N;.  
12830 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20    if( zRight && 
12840 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 52  sqlite3Atoi64(zR
12850 69 67 68 74 2c 20 26 4e 2c 20 31 30 30 30 30 30  ight, &N, 100000
12860 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3d  0, SQLITE_UTF8)=
12870 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
12880 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74      sqlite3_soft
12890 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29  _heap_limit64(N)
128a0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
128b0 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
128c0 73 65 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c  se, "soft_heap_l
128d0 69 6d 69 74 22 2c 20 20 73 71 6c 69 74 65 33 5f  imit",  sqlite3_
128e0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36  soft_heap_limit6
128f0 34 28 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61  4(-1));.    brea
12900 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69  k;.  }..#if defi
12910 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
12920 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
12930 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20  ITE_TEST).  /*. 
12940 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63   ** Report the c
12950 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20  urrent state of 
12960 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c  file logs for al
12970 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f  l databases.  */
12980 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
12990 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20  LOCK_STATUS: {. 
129a0 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
129b0 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f  char *const azLo
129c0 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  ckName[] = {.   
129d0 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22     "unlocked", "
129e0 73 68 61 72 65 64 22 2c 20 22 72 65 73 65 72 76  shared", "reserv
129f0 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20  ed", "pending", 
12a00 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20  "exclusive".    
12a10 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  };.    int i;.  
12a20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
12a30 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20  NumCols(v, 2);. 
12a40 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
12a50 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 2;.    sqlite3
12a60 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
12a70 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
12a80 45 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20 53  E, "database", S
12a90 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
12aa0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
12ab0 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
12ac0 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74  OLNAME_NAME, "st
12ad0 61 74 75 73 22 2c 20 53 51 4c 49 54 45 5f 53 54  atus", SQLITE_ST
12ae0 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69  ATIC);.    for(i
12af0 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
12b00 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65  ++){.      Btree
12b10 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e   *pBt;.      con
12b20 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20  st char *zState 
12b30 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20  = "unknown";.   
12b40 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20     int j;.      
12b50 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  if( db->aDb[i].z
12b60 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  Name==0 ) contin
12b70 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
12b80 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
12b90 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
12ba0 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a   0, db->aDb[i].z
12bb0 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29  Name, P4_STATIC)
12bc0 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64 62  ;.      pBt = db
12bd0 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20  ->aDb[i].pBt;.  
12be0 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c      if( pBt==0 |
12bf0 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  | sqlite3BtreePa
12c00 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20  ger(pBt)==0 ){. 
12c10 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
12c20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20  "closed";.      
12c30 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
12c40 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
12c50 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69  b, i ? db->aDb[i
12c60 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20  ].zName : 0, .  
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f     SQLITE_FCNTL_
12ca0 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d  LOCKSTATE, &j)==
12cb0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
12cc0 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61        zState = a
12cd0 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20  zLockName[j];.  
12ce0 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
12cf0 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
12d00 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
12d10 32 2c 20 30 2c 20 7a 53 74 61 74 65 2c 20 50 34  2, 0, zState, P4
12d20 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
12d30 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
12d40 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
12d50 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a  w, 1, 2);.    }.
12d60 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
12d70 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
12d80 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
12d90 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45   case PragTyp_KE
12da0 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
12db0 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65  ght ) sqlite3_ke
12dc0 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52  y_v2(db, zDb, zR
12dd0 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72  ight, sqlite3Str
12de0 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a  len30(zRight));.
12df0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
12e00 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 52 45   case PragTyp_RE
12e10 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  KEY: {.    if( z
12e20 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f  Right ) sqlite3_
12e30 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  rekey_v2(db, zDb
12e40 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65  , zRight, sqlite
12e50 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74  3Strlen30(zRight
12e60 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
12e70 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79   }.  case PragTy
12e80 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20  p_HEXKEY: {.    
12e90 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
12ea0 20 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20      u8 iByte;.  
12eb0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20      int i;.     
12ec0 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a   char zKey[40];.
12ed0 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69        for(i=0, i
12ee0 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  Byte=0; i<sizeof
12ef0 28 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69  (zKey)*2 && sqli
12f00 74 65 33 49 73 78 64 69 67 69 74 28 7a 52 69 67  te3Isxdigit(zRig
12f10 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  ht[i]); i++){.  
12f20 20 20 20 20 20 20 69 42 79 74 65 20 3d 20 28 69        iByte = (i
12f30 42 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74  Byte<<4) + sqlit
12f40 65 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68  e3HexToInt(zRigh
12f50 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69  t[i]);.        i
12f60 66 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b  f( (i&1)!=0 ) zK
12f70 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b  ey[i/2] = iByte;
12f80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
12f90 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30  f( (zLeft[3] & 0
12fa0 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20  xf)==0xb ){.    
12fb0 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f      sqlite3_key_
12fc0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79  v2(db, zDb, zKey
12fd0 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65  , i/2);.      }e
12fe0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
12ff0 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62  ite3_rekey_v2(db
13000 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32  , zDb, zKey, i/2
13010 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
13020 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
13030 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
13040 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
13050 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  DEC) || defined(
13060 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
13070 52 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61 67  ROD).  case Prag
13080 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54  Typ_ACTIVATE_EXT
13090 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69  ENSIONS: if( zRi
130a0 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51  ght ){.#ifdef SQ
130b0 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
130c0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
130d0 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  rNICmp(zRight, "
130e0 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a  see-", 4)==0 ){.
130f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63        sqlite3_ac
13100 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67  tivate_see(&zRig
13110 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ht[4]);.    }.#e
13120 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
13130 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a  TE_ENABLE_CEROD.
13140 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
13150 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  trNICmp(zRight, 
13160 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20  "cerod-", 6)==0 
13170 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
13180 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28  _activate_cerod(
13190 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20  &zRight[6]);.   
131a0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
131b0 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
131c0 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65   } /* End of the
131d0 20 50 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a   PRAGMA switch *
131e0 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20  /..pragma_out:. 
131f0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
13200 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c  b, zLeft);.  sql
13210 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
13220 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69  Right);.}..#endi
13230 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
13240 5f 50 52 41 47 4d 41 20 2a 2f 0a                 _PRAGMA */.