/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 30f3b2ac09fef58320375d78e0e18b976198fc69:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20  e next block of 
02e0: 63 6f 64 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20  code, including 
02f0: 74 68 65 20 50 72 61 67 54 79 70 5f 58 58 58 58  the PragTyp_XXXX
0300: 20 6d 61 63 72 6f 20 64 65 66 69 6e 69 74 69 6f   macro definitio
0310: 6e 73 20 61 6e 64 0a 2a 2a 20 74 68 65 20 61 50  ns and.** the aP
0320: 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 6f 62 6a 65  ragmaName[] obje
0330: 63 74 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f  ct is composed o
0340: 66 20 67 65 6e 65 72 61 74 65 64 20 63 6f 64 65  f generated code
0350: 2e 20 44 4f 20 4e 4f 54 20 45 44 49 54 2e 0a 2a  . DO NOT EDIT..*
0360: 2a 0a 2a 2a 20 54 6f 20 61 64 64 20 6e 65 77 20  *.** To add new 
0370: 70 72 61 67 6d 61 73 2c 20 65 64 69 74 20 74 68  pragmas, edit th
0380: 65 20 63 6f 64 65 20 69 6e 20 2e 2e 2f 74 6f 6f  e code in ../too
0390: 6c 2f 6d 6b 70 72 61 67 6d 61 74 61 62 2e 74 63  l/mkpragmatab.tc
03a0: 6c 20 61 6e 64 20 72 65 72 75 6e 0a 2a 2a 20 74  l and rerun.** t
03b0: 68 61 74 20 73 63 72 69 70 74 2e 20 20 54 68 65  hat script.  The
03c0: 6e 20 63 6f 70 79 2f 70 61 73 74 65 20 74 68 65  n copy/paste the
03d0: 20 6f 75 74 70 75 74 20 69 6e 20 70 6c 61 63 65   output in place
03e0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
03f0: 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 72  g:.*/.#define Pr
0400: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
0410: 55 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UE              
0420: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50       0.#define P
0430: 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55  ragTyp_AUTO_VACU
0440: 55 4d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UM              
0450: 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20        1.#define 
0460: 50 72 61 67 54 79 70 5f 46 4c 41 47 20 20 20 20  PragTyp_FLAG    
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0480: 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65         2.#define
0490: 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49   PragTyp_BUSY_TI
04a0: 4d 45 4f 55 54 20 20 20 20 20 20 20 20 20 20 20  MEOUT           
04b0: 20 20 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e          3.#defin
04c0: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
04d0: 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 20  SIZE            
04e0: 20 20 20 20 20 20 20 20 20 34 0a 23 64 65 66 69           4.#defi
04f0: 6e 65 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f  ne PragTyp_CASE_
0500: 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 20 20  SENSITIVE_LIKE  
0510: 20 20 20 20 20 20 20 20 20 20 35 0a 23 64 65 66            5.#def
0520: 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c  ine PragTyp_COLL
0530: 41 54 49 4f 4e 5f 4c 49 53 54 20 20 20 20 20 20  ATION_LIST      
0540: 20 20 20 20 20 20 20 20 20 20 20 36 0a 23 64 65             6.#de
0550: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4d  fine PragTyp_COM
0560: 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 20 20 20 20  PILE_OPTIONS    
0570: 20 20 20 20 20 20 20 20 20 20 20 20 37 0a 23 64              7.#d
0580: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44 41  efine PragTyp_DA
0590: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
05a0: 52 59 20 20 20 20 20 20 20 20 20 20 20 38 0a 23  RY           8.#
05b0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44  define PragTyp_D
05c0: 41 54 41 42 41 53 45 5f 4c 49 53 54 20 20 20 20  ATABASE_LIST    
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 39 0a                9.
05e0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
05f0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
0600: 5a 45 20 20 20 20 20 20 20 20 20 20 20 20 31 30  ZE            10
0610: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0620: 5f 45 4e 43 4f 44 49 4e 47 20 20 20 20 20 20 20  _ENCODING       
0630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
0640: 31 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  1.#define PragTy
0650: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48  p_FOREIGN_KEY_CH
0660: 45 43 4b 20 20 20 20 20 20 20 20 20 20 20 20 20  ECK             
0670: 31 32 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  12.#define PragT
0680: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c  yp_FOREIGN_KEY_L
0690: 49 53 54 20 20 20 20 20 20 20 20 20 20 20 20 20  IST             
06a0: 20 31 33 0a 23 64 65 66 69 6e 65 20 50 72 61 67   13.#define Prag
06b0: 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f  Typ_INCREMENTAL_
06c0: 56 41 43 55 55 4d 20 20 20 20 20 20 20 20 20 20  VACUUM          
06d0: 20 20 31 34 0a 23 64 65 66 69 6e 65 20 50 72 61    14.#define Pra
06e0: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 20  gTyp_INDEX_INFO 
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0700: 20 20 20 31 35 0a 23 64 65 66 69 6e 65 20 50 72     15.#define Pr
0710: 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54  agTyp_INDEX_LIST
0720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0730: 20 20 20 20 31 36 0a 23 64 65 66 69 6e 65 20 50      16.#define P
0740: 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59  ragTyp_INTEGRITY
0750: 5f 43 48 45 43 4b 20 20 20 20 20 20 20 20 20 20  _CHECK          
0760: 20 20 20 20 20 31 37 0a 23 64 65 66 69 6e 65 20       17.#define 
0770: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
0780: 4d 4f 44 45 20 20 20 20 20 20 20 20 20 20 20 20  MODE            
0790: 20 20 20 20 20 20 31 38 0a 23 64 65 66 69 6e 65        18.#define
07a0: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
07b0: 5f 53 49 5a 45 5f 4c 49 4d 49 54 20 20 20 20 20  _SIZE_LIMIT     
07c0: 20 20 20 20 20 20 20 31 39 0a 23 64 65 66 69 6e         19.#defin
07d0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
07e0: 52 4f 58 59 5f 46 49 4c 45 20 20 20 20 20 20 20  ROXY_FILE       
07f0: 20 20 20 20 20 20 20 20 32 30 0a 23 64 65 66 69          20.#defi
0800: 6e 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49  ne PragTyp_LOCKI
0810: 4e 47 5f 4d 4f 44 45 20 20 20 20 20 20 20 20 20  NG_MODE         
0820: 20 20 20 20 20 20 20 20 20 32 31 0a 23 64 65 66           21.#def
0830: 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41 47 45  ine PragTyp_PAGE
0840: 5f 43 4f 55 4e 54 20 20 20 20 20 20 20 20 20 20  _COUNT          
0850: 20 20 20 20 20 20 20 20 20 20 32 32 0a 23 64 65            22.#de
0860: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4d 4d 41  fine PragTyp_MMA
0870: 50 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  P_SIZE          
0880: 20 20 20 20 20 20 20 20 20 20 20 32 33 0a 23 64             23.#d
0890: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41  efine PragTyp_PA
08a0: 47 45 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20  GE_SIZE         
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 32 34 0a 23              24.#
08c0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 53  define PragTyp_S
08d0: 45 43 55 52 45 5f 44 45 4c 45 54 45 20 20 20 20  ECURE_DELETE    
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 0a               25.
08f0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
0900: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 20 20 20  SHRINK_MEMORY   
0910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 36                26
0920: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0930: 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54  _SOFT_HEAP_LIMIT
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
0950: 37 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  7.#define PragTy
0960: 70 5f 53 54 41 54 53 20 20 20 20 20 20 20 20 20  p_STATS         
0970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0980: 32 38 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  28.#define PragT
0990: 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20  yp_SYNCHRONOUS  
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 32 39 0a 23 64 65 66 69 6e 65 20 50 72 61 67   29.#define Prag
09c0: 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 20 20  Typ_TABLE_INFO  
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 20 20 33 30 0a 23 64 65 66 69 6e 65 20 50 72 61    30.#define Pra
09f0: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 20  gTyp_TEMP_STORE 
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 20 20 20 33 31 0a 23 64 65 66 69 6e 65 20 50 72     31.#define Pr
0a20: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
0a30: 5f 44 49 52 45 43 54 4f 52 59 20 20 20 20 20 20  _DIRECTORY      
0a40: 20 20 20 20 33 32 0a 23 64 65 66 69 6e 65 20 50      32.#define P
0a50: 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43  ragTyp_WAL_AUTOC
0a60: 48 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20  HECKPOINT       
0a70: 20 20 20 20 20 33 33 0a 23 64 65 66 69 6e 65 20       33.#define 
0a80: 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43  PragTyp_WAL_CHEC
0a90: 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20 20 20  KPOINT          
0aa0: 20 20 20 20 20 20 33 34 0a 23 64 65 66 69 6e 65        34.#define
0ab0: 20 50 72 61 67 54 79 70 5f 41 43 54 49 56 41 54   PragTyp_ACTIVAT
0ac0: 45 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20 20 20  E_EXTENSIONS    
0ad0: 20 20 20 20 20 20 20 33 35 0a 23 64 65 66 69 6e         35.#defin
0ae0: 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45 59  e PragTyp_HEXKEY
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b00: 20 20 20 20 20 20 20 20 33 36 0a 23 64 65 66 69          36.#defi
0b10: 6e 65 20 50 72 61 67 54 79 70 5f 4b 45 59 20 20  ne PragTyp_KEY  
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b30: 20 20 20 20 20 20 20 20 20 33 37 0a 23 64 65 66           37.#def
0b40: 69 6e 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45  ine PragTyp_REKE
0b50: 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Y               
0b60: 20 20 20 20 20 20 20 20 20 20 33 38 0a 23 64 65            38.#de
0b70: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4c 4f 43  fine PragTyp_LOC
0b80: 4b 5f 53 54 41 54 55 53 20 20 20 20 20 20 20 20  K_STATUS        
0b90: 20 20 20 20 20 20 20 20 20 20 20 33 39 0a 23 64             39.#d
0ba0: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41  efine PragTyp_PA
0bb0: 52 53 45 52 5f 54 52 41 43 45 20 20 20 20 20 20  RSER_TRACE      
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 34 30 0a 23              40.#
0bd0: 64 65 66 69 6e 65 20 50 72 61 67 46 6c 61 67 5f  define PragFlag_
0be0: 4e 65 65 64 53 63 68 65 6d 61 20 20 20 20 20 20  NeedSchema      
0bf0: 20 20 20 20 20 30 78 30 31 0a 73 74 61 74 69 63       0x01.static
0c00: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50   const struct sP
0c10: 72 61 67 6d 61 4e 61 6d 65 73 20 7b 0a 20 20 63  ragmaNames {.  c
0c20: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
0c30: 20 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65   zName;  /* Name
0c40: 20 6f 66 20 70 72 61 67 6d 61 20 2a 2f 0a 20 20   of pragma */.  
0c50: 75 38 20 65 50 72 61 67 54 79 70 3b 20 20 20 20  u8 ePragTyp;    
0c60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 61            /* Pra
0c70: 67 54 79 70 5f 58 58 58 20 76 61 6c 75 65 20 2a  gTyp_XXX value *
0c80: 2f 0a 20 20 75 38 20 6d 50 72 61 67 46 6c 61 67  /.  u8 mPragFlag
0c90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
0ca0: 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 50 72   Zero or more Pr
0cb0: 61 67 46 6c 61 67 5f 58 58 58 20 76 61 6c 75 65  agFlag_XXX value
0cc0: 73 20 2a 2f 0a 20 20 75 33 32 20 69 41 72 67 3b  s */.  u32 iArg;
0cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ce0: 20 2f 2a 20 45 78 74 72 61 20 61 72 67 75 6d 65   /* Extra argume
0cf0: 6e 74 20 2a 2f 0a 7d 20 61 50 72 61 67 6d 61 4e  nt */.} aPragmaN
0d00: 61 6d 65 73 5b 5d 20 3d 20 7b 0a 23 69 66 20 64  ames[] = {.#if d
0d10: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
0d20: 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69  S_CODEC) || defi
0d30: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
0d40: 45 5f 43 45 52 4f 44 29 0a 20 20 7b 20 2f 2a 20  E_CEROD).  { /* 
0d50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 61  zName:     */ "a
0d60: 63 74 69 76 61 74 65 5f 65 78 74 65 6e 73 69 6f  ctivate_extensio
0d70: 6e 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ns",.    /* ePra
0d80: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0d90: 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e  p_ACTIVATE_EXTEN
0da0: 53 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20 65 50  SIONS,.    /* eP
0db0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
0dc0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
0dd0: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
0de0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
0df0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
0e00: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29  VERSION_PRAGMAS)
0e10: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
0e20: 20 20 20 2a 2f 20 22 61 70 70 6c 69 63 61 74 69     */ "applicati
0e30: 6f 6e 5f 69 64 22 2c 0a 20 20 20 20 2f 2a 20 65  on_id",.    /* e
0e40: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
0e50: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
0e60: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
0e70: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
0e80: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
0e90: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
0ea0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0eb0: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
0ec0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
0ed0: 20 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63 75     */ "auto_vacu
0ee0: 75 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  um",.    /* ePra
0ef0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0f00: 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a 20  p_AUTO_VACUUM,. 
0f10: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
0f20: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
0f30: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
0f40: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
0f50: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
0f60: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0f70: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
0f80: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
0f90: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d 41  LITE_OMIT_AUTOMA
0fa0: 54 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b 20 2f  TIC_INDEX).  { /
0fb0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
0fc0: 22 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78  "automatic_index
0fd0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
0fe0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
0ff0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
1000: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1010: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1020: 2a 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  */ SQLITE_AutoIn
1030: 64 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65  dex },.#endif.#e
1040: 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ndif.  { /* zNam
1050: 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79 5f  e:     */ "busy_
1060: 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f 2a  timeout",.    /*
1070: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1080: 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
1090: 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  OUT,.    /* ePra
10a0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
10b0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
10c0: 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66 69  / 0 },.#if !defi
10d0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
10e0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
10f0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1100: 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65 22   */ "cache_size"
1110: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1120: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43  p:  */ PragTyp_C
1130: 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  ACHE_SIZE,.    /
1140: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1150: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1160: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1170: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1180: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1190: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
11a0: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
11b0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
11c0: 2f 20 22 63 61 63 68 65 5f 73 70 69 6c 6c 22 2c  / "cache_spill",
11d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
11e0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
11f0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1200: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1210: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1220: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
1230: 6c 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b  ll },.#endif.  {
1240: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1250: 2f 20 22 63 61 73 65 5f 73 65 6e 73 69 74 69 76  / "case_sensitiv
1260: 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f 2a 20  e_like",.    /* 
1270: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1280: 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49  agTyp_CASE_SENSI
1290: 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20 20 2f  TIVE_LIKE,.    /
12a0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
12b0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
12c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66       */ 0 },.#if
12d0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
12e0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
12f0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1300: 3a 20 20 20 20 20 2a 2f 20 22 63 68 65 63 6b 70  :     */ "checkp
1310: 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63 22 2c  oint_fullfsync",
1320: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1330: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1340: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1350: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1360: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1370: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
1380: 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66 0a  FSync },.#endif.
1390: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
13a0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
13b0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
13c0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
13d0: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22 2c 0a  ollation_list",.
13e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
13f0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f 4c    */ PragTyp_COL
1400: 4c 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20 20 20  LATION_LIST,.   
1410: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1420: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
1430: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1440: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1450: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
1460: 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
1470: 47 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  GS).  { /* zName
1480: 3a 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70 69 6c  :     */ "compil
1490: 65 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20 20 20  e_options",.    
14a0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
14b0: 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45   PragTyp_COMPILE
14c0: 5f 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a  _OPTIONS,.    /*
14d0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
14e0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
14f0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1500: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1510: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
1520: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
1530: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1540: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a  count_changes",.
1550: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1560: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1570: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1580: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1590: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
15a0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
15b0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
15c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
15d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
15e0: 53 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f  S) && SQLITE_OS_
15f0: 57 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  WIN.  { /* zName
1600: 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61 5f 73  :     */ "data_s
1610: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c  tore_directory",
1620: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1630: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44 41  :  */ PragTyp_DA
1640: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
1650: 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  RY,.    /* ePrag
1660: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1670: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1680: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1690: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
16a0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
16b0: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
16c0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61  me:     */ "data
16d0: 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20  base_list",.    
16e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
16f0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53   PragTyp_DATABAS
1700: 45 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a 20 65  E_LIST,.    /* e
1710: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
1720: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
1730: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1740: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1750: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1760: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
1770: 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21 64  R_PRAGMAS) && !d
1780: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1790: 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20  IT_DEPRECATED). 
17a0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
17b0: 20 2a 2f 20 22 64 65 66 61 75 6c 74 5f 63 61 63   */ "default_cac
17c0: 68 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f 2a  he_size",.    /*
17d0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
17e0: 72 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43  ragTyp_DEFAULT_C
17f0: 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  ACHE_SIZE,.    /
1800: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1810: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1820: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1830: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1840: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1850: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
1860: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66  LAG_PRAGMAS).#if
1870: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1880: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
1890: 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
18a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
18b0: 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  ER).  { /* zName
18c0: 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65 72 5f  :     */ "defer_
18d0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20  foreign_keys",. 
18e0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
18f0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
1900: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1910: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1920: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1930: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 7d  QLITE_DeferFKs }
1940: 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ,.#endif.#endif.
1950: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1960: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
1970: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
1980: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65 6d 70  ame:     */ "emp
1990: 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61  ty_result_callba
19a0: 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  cks",.    /* ePr
19b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
19c0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
19d0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
19e0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
19f0: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e 75 6c     */ SQLITE_Nul
1a00: 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23 65 6e  lCallback },.#en
1a10: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1a20: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46  (SQLITE_OMIT_UTF
1a30: 31 36 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  16).  { /* zName
1a40: 3a 20 20 20 20 20 2a 2f 20 22 65 6e 63 6f 64 69  :     */ "encodi
1a50: 6e 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ng",.    /* ePra
1a60: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1a70: 70 5f 45 4e 43 4f 44 49 4e 47 2c 0a 20 20 20 20  p_ENCODING,.    
1a80: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1a90: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1aa0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
1ab0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1ac0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
1ad0: 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
1ae0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1af0: 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 7b 20  IT_TRIGGER).  { 
1b00: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1b10: 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68   "foreign_key_ch
1b20: 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  eck",.    /* ePr
1b30: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1b40: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43  yp_FOREIGN_KEY_C
1b50: 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50 72  HECK,.    /* ePr
1b60: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
1b70: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
1b80: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
1b90: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
1ba0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
1bc0: 4e 5f 4b 45 59 29 0a 20 20 7b 20 2f 2a 20 7a 4e  N_KEY).  { /* zN
1bd0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72  ame:     */ "for
1be0: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 2c 0a  eign_key_list",.
1bf0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1c00: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f 52    */ PragTyp_FOR
1c10: 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 2c 0a 20  EIGN_KEY_LIST,. 
1c20: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1c30: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
1c40: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
1c50: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
1c60: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
1c70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1c80: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
1c90: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1ca0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
1cb0: 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
1cc0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
1cd0: 52 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a  RIGGER).  { /* z
1ce0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f  Name:     */ "fo
1cf0: 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20 20 20  reign_keys",.   
1d00: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1d10: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
1d20: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1d30: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
1d40: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
1d50: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
1d60: 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  },.#endif.#endif
1d70: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1d80: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
1d90: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
1da0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1db0: 20 20 20 20 2a 2f 20 22 66 72 65 65 6c 69 73 74      */ "freelist
1dc0: 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a 20  _count",.    /* 
1dd0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1de0: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
1df0: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
1e00: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1e10: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1e20: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1e30: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1e40: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
1e50: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1e60: 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 5f 63  :     */ "full_c
1e70: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20  olumn_names",.  
1e80: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1e90: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
1ea0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1eb0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
1ec0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
1ed0: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
1ee0: 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  s },.  { /* zNam
1ef0: 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 66  e:     */ "fullf
1f00: 73 79 6e 63 22 2c 0a 20 20 20 20 2f 2a 20 65 50  sync",.    /* eP
1f10: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1f20: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
1f30: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1f40: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1f50: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46 75      */ SQLITE_Fu
1f60: 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69  llFSync },.#endi
1f70: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
1f80: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a  LITE_HAS_CODEC).
1f90: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1fa0: 20 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a 20    */ "hexkey",. 
1fb0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1fc0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 58 4b   */ PragTyp_HEXK
1fd0: 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  EY,.    /* ePrag
1fe0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1ff0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2000: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
2010: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 68 65 78 72  me:     */ "hexr
2020: 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ekey",.    /* eP
2030: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2040: 54 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20 20  Typ_HEXKEY,.    
2050: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2060: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2070: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
2080: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
2090: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
20a0: 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20  AG_PRAGMAS).#if 
20b0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
20c0: 4f 4d 49 54 5f 43 48 45 43 4b 29 0a 20 20 7b 20  OMIT_CHECK).  { 
20d0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
20e0: 20 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f 63   "ignore_check_c
20f0: 6f 6e 73 74 72 61 69 6e 74 73 22 2c 0a 20 20 20  onstraints",.   
2100: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2110: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
2120: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2130: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
2140: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
2150: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
2160: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69   },.#endif.#endi
2170: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2180: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
2190: 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20 7a 4e  ACUUM).  { /* zN
21a0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 63  ame:     */ "inc
21b0: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 22  remental_vacuum"
21c0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
21d0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
21e0: 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55  NCREMENTAL_VACUU
21f0: 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  M,.    /* ePragF
2200: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2210: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2220: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2230: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
2240: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2250: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
2260: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
2270: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64  ame:     */ "ind
2280: 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a  ex_info",.    /*
2290: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
22a0: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46  ragTyp_INDEX_INF
22b0: 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  O,.    /* ePragF
22c0: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
22d0: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
22e0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
22f0: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2300: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64  ame:     */ "ind
2310: 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f 2a  ex_list",.    /*
2320: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2330: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53  ragTyp_INDEX_LIS
2340: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
2350: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2360: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2370: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2380: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
2390: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
23a0: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
23b0: 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a  _CHECK).  { /* z
23c0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
23d0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
23e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
23f0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54    */ PragTyp_INT
2400: 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20  EGRITY_CHECK,.  
2410: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2420: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
2430: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
2440: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
2450: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
2460: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2470: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
2480: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2490: 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f 6d     */ "journal_m
24a0: 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ode",.    /* ePr
24b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
24c0: 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 2c  yp_JOURNAL_MODE,
24d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
24e0: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
24f0: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2500: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2510: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
2520: 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e  e:     */ "journ
2530: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 0a  al_size_limit",.
2540: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2550: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f 55    */ PragTyp_JOU
2560: 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 2c  RNAL_SIZE_LIMIT,
2570: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2580: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2590: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
25a0: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  },.#endif.#if de
25b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
25c0: 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20 7a  _CODEC).  { /* z
25d0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6b 65  Name:     */ "ke
25e0: 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  y",.    /* ePrag
25f0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2600: 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72  _KEY,.    /* ePr
2610: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2620: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2630: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2640: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2650: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
2660: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
2670: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 65 67 61  me:     */ "lega
2680: 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 22 2c  cy_file_format",
2690: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
26a0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
26b0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
26c0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
26d0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
26e0: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
26f0: 6c 65 46 6d 74 20 7d 2c 0a 23 65 6e 64 69 66 0a  leFmt },.#endif.
2700: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2710: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
2720: 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c 49 54  RAGMAS) && SQLIT
2730: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
2740: 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a 20 7a 4e  _STYLE.  { /* zN
2750: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
2760: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 0a 20  k_proxy_file",. 
2770: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2780: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b   */ PragTyp_LOCK
2790: 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a 20 20 20  _PROXY_FILE,.   
27a0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
27b0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
27c0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
27d0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
27e0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
27f0: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2800: 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f 2a 20 7a  E_TEST).  { /* z
2810: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f  Name:     */ "lo
2820: 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20 20 20 20  ck_status",.    
2830: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2840: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54   PragTyp_LOCK_ST
2850: 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ATUS,.    /* ePr
2860: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2870: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2880: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2890: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
28a0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
28b0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
28c0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
28d0: 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20 20 20  king_mode",.    
28e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
28f0: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47   PragTyp_LOCKING
2900: 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _MODE,.    /* eP
2910: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2920: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2930: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2940: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6d  zName:     */ "m
2950: 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a  ax_page_count",.
2960: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2970: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47    */ PragTyp_PAG
2980: 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20  E_COUNT,.    /* 
2990: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
29a0: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
29b0: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
29c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b       */ 0 },.  {
29d0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
29e0: 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 0a 20  / "mmap_size",. 
29f0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2a00: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d 4d 41 50   */ PragTyp_MMAP
2a10: 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _SIZE,.    /* eP
2a20: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2a30: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2a40: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2a50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2a60: 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  age_count",.    
2a70: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2a80: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f   PragTyp_PAGE_CO
2a90: 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  UNT,.    /* ePra
2aa0: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2ab0: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2ac0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2ad0: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2ae0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2af0: 61 67 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f  age_size",.    /
2b00: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2b10: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
2b20: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
2b30: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2b40: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2b50: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2b60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
2b70: 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  EBUG).  { /* zNa
2b80: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 72 73  me:     */ "pars
2b90: 65 72 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f  er_trace",.    /
2ba0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2bb0: 50 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54  PragTyp_PARSER_T
2bc0: 52 41 43 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  RACE,.    /* ePr
2bd0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2be0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2bf0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2c00: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2c10: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
2c20: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
2c30: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 71 75 65 72  me:     */ "quer
2c40: 79 5f 6f 6e 6c 79 22 2c 0a 20 20 20 20 2f 2a 20  y_only",.    /* 
2c50: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2c60: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
2c70: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2c80: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2c90: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
2ca0: 51 75 65 72 79 4f 6e 6c 79 20 7d 2c 0a 23 65 6e  QueryOnly },.#en
2cb0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
2cc0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54  (SQLITE_OMIT_INT
2cd0: 45 47 52 49 54 59 5f 43 48 45 43 4b 29 0a 20 20  EGRITY_CHECK).  
2ce0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2cf0: 2a 2f 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22  */ "quick_check"
2d00: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2d10: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
2d20: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a  NTEGRITY_CHECK,.
2d30: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2d40: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
2d50: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
2d60: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
2d70: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
2d80: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2d90: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
2da0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2db0: 20 20 20 20 2a 2f 20 22 72 65 61 64 5f 75 6e 63      */ "read_unc
2dc0: 6f 6d 6d 69 74 74 65 64 22 2c 0a 20 20 20 20 2f  ommitted",.    /
2dd0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2de0: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
2df0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2e00: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
2e10: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
2e20: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
2e30: 64 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  d },.  { /* zNam
2e40: 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 63 75 72  e:     */ "recur
2e50: 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 2c 0a  sive_triggers",.
2e60: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2e70: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
2e80: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
2e90: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2ea0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2eb0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
2ec0: 72 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  rs },.#endif.#if
2ed0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2ee0: 48 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f  HAS_CODEC).  { /
2ef0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2f00: 22 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20  "rekey",.    /* 
2f10: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2f20: 61 67 54 79 70 5f 52 45 4b 45 59 2c 0a 20 20 20  agTyp_REKEY,.   
2f30: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2f40: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
2f50: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
2f60: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
2f70: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
2f80: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
2f90: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2fa0: 2f 20 22 72 65 76 65 72 73 65 5f 75 6e 6f 72 64  / "reverse_unord
2fb0: 65 72 65 64 5f 73 65 6c 65 63 74 73 22 2c 0a 20  ered_selects",. 
2fc0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2fd0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2fe0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2ff0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3000: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
3010: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
3020: 65 72 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  er },.#endif.#if
3030: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3040: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
3050: 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20  SION_PRAGMAS).  
3060: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3070: 2a 2f 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69  */ "schema_versi
3080: 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  on",.    /* ePra
3090: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
30a0: 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a  p_HEADER_VALUE,.
30b0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
30c0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
30d0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
30e0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
30f0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3100: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
3110: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3120: 20 20 20 2a 2f 20 22 73 65 63 75 72 65 5f 64 65     */ "secure_de
3130: 6c 65 74 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  lete",.    /* eP
3140: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3150: 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45 54  Typ_SECURE_DELET
3160: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
3170: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3180: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3190: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
31a0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
31b0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
31c0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
31d0: 20 20 20 20 20 2a 2f 20 22 73 68 6f 72 74 5f 63       */ "short_c
31e0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20  olumn_names",.  
31f0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3200: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
3210: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
3220: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3230: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
3240: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
3250: 65 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b  es },.#endif.  {
3260: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3270: 2f 20 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79  / "shrink_memory
3280: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3290: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
32a0: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 2c 0a 20  SHRINK_MEMORY,. 
32b0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
32c0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
32d0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
32e0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
32f0: 20 20 20 2a 2f 20 22 73 6f 66 74 5f 68 65 61 70     */ "soft_heap
3300: 5f 6c 69 6d 69 74 22 2c 0a 20 20 20 20 2f 2a 20  _limit",.    /* 
3310: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3320: 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f  agTyp_SOFT_HEAP_
3330: 4c 49 4d 49 54 2c 0a 20 20 20 20 2f 2a 20 65 50  LIMIT,.    /* eP
3340: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3350: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3360: 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65   */ 0 },.#if !de
3370: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3380: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
3390: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
33a0: 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a  TE_DEBUG).  { /*
33b0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
33c0: 73 71 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  sql_trace",.    
33d0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
33e0: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
33f0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3400: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3410: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
3420: 54 45 5f 53 71 6c 54 72 61 63 65 20 7d 2c 0a 23  TE_SqlTrace },.#
3430: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3440: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3450: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
3460: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
3470: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 74 61 74  me:     */ "stat
3480: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
3490: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
34a0: 5f 53 54 41 54 53 2c 0a 20 20 20 20 2f 2a 20 65  _STATS,.    /* e
34b0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
34c0: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
34d0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
34e0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
34f0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
3500: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3510: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  R_PRAGMAS).  { /
3520: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3530: 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a 20  "synchronous",. 
3540: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3550: 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 59 4e 43   */ PragTyp_SYNC
3560: 48 52 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a 20  HRONOUS,.    /* 
3570: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3580: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3590: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
35a0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
35b0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
35c0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48  (SQLITE_OMIT_SCH
35d0: 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  EMA_PRAGMAS).  {
35e0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
35f0: 2f 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c 0a  / "table_info",.
3600: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3610: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 41 42    */ PragTyp_TAB
3620: 4c 45 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20  LE_INFO,.    /* 
3630: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3640: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3650: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
3660: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3670: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
3680: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
3690: 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  ER_PRAGMAS).  { 
36a0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
36b0: 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a 20   "temp_store",. 
36c0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
36d0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d 50   */ PragTyp_TEMP
36e0: 5f 53 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20 65  _STORE,.    /* e
36f0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3700: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3710: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
3720: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3730: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
3740: 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  tory",.    /* eP
3750: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3760: 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44  Typ_TEMP_STORE_D
3770: 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f 2a  IRECTORY,.    /*
3780: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3790: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
37a0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
37b0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
37c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
37d0: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
37e0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
37f0: 3a 20 20 20 20 20 2a 2f 20 22 75 73 65 72 5f 76  :     */ "user_v
3800: 65 72 73 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20  ersion",.    /* 
3810: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3820: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
3830: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
3840: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3850: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3860: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
3870: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3880: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
3890: 41 53 29 0a 23 69 66 20 64 65 66 69 6e 65 64 28  AS).#if defined(
38a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
38b0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
38c0: 2a 2f 20 22 76 64 62 65 5f 61 64 64 6f 70 74 72  */ "vdbe_addoptr
38d0: 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ace",.    /* ePr
38e0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
38f0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3900: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3910: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3920: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62     */ SQLITE_Vdb
3930: 65 41 64 64 6f 70 54 72 61 63 65 20 7d 2c 0a 20  eAddopTrace },. 
3940: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
3950: 20 2a 2f 20 22 76 64 62 65 5f 64 65 62 75 67 22   */ "vdbe_debug"
3960: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3970: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
3980: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
3990: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
39a0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
39b0: 2f 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  / SQLITE_SqlTrac
39c0: 65 7c 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e|SQLITE_VdbeLis
39d0: 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65  ting|SQLITE_Vdbe
39e0: 54 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20  Trace },.  { /* 
39f0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76  zName:     */ "v
3a00: 64 62 65 5f 65 71 70 22 2c 0a 20 20 20 20 2f 2a  dbe_eqp",.    /*
3a10: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3a20: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3a30: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3a40: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3a50: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3a60: 5f 56 64 62 65 45 51 50 20 7d 2c 0a 20 20 7b 20  _VdbeEQP },.  { 
3a70: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3a80: 20 22 76 64 62 65 5f 6c 69 73 74 69 6e 67 22 2c   "vdbe_listing",
3a90: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3aa0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
3ab0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
3ac0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3ad0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3ae0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
3af0: 69 6e 67 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  ing },.  { /* zN
3b00: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62  ame:     */ "vdb
3b10: 65 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a  e_trace",.    /*
3b20: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3b30: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3b40: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3b50: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3b60: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3b70: 5f 56 64 62 65 54 72 61 63 65 20 7d 2c 0a 23 65  _VdbeTrace },.#e
3b80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20  ndif.#endif.#if 
3b90: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3ba0: 4f 4d 49 54 5f 57 41 4c 29 0a 20 20 7b 20 2f 2a  OMIT_WAL).  { /*
3bb0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3bc0: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
3bd0: 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  nt",.    /* ePra
3be0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3bf0: 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50  p_WAL_AUTOCHECKP
3c00: 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  OINT,.    /* ePr
3c10: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3c20: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3c30: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
3c40: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61  Name:     */ "wa
3c50: 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20  l_checkpoint",. 
3c60: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3c70: 20 2a 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f   */ PragTyp_WAL_
3c80: 43 48 45 43 4b 50 4f 49 4e 54 2c 0a 20 20 20 20  CHECKPOINT,.    
3c90: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
3ca0: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
3cb0: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
3cc0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
3cd0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
3ce0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
3cf0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20  FLAG_PRAGMAS).  
3d00: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3d10: 2a 2f 20 22 77 72 69 74 61 62 6c 65 5f 73 63 68  */ "writable_sch
3d20: 65 6d 61 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ema",.    /* ePr
3d30: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3d40: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3d50: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3d60: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3d70: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 57 72 69     */ SQLITE_Wri
3d80: 74 65 53 63 68 65 6d 61 7c 53 51 4c 49 54 45 5f  teSchema|SQLITE_
3d90: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 7d 2c 0a  RecoveryMode },.
3da0: 23 65 6e 64 69 66 0a 7d 3b 0a 2f 2a 20 4e 75 6d  #endif.};./* Num
3db0: 62 65 72 20 6f 66 20 70 72 61 67 6d 61 73 3a 20  ber of pragmas: 
3dc0: 35 36 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  56 on by default
3dd0: 2c 20 36 39 20 74 6f 74 61 6c 2e 20 2a 2f 0a 2f  , 69 total. */./
3de0: 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 61 75 74  * End of the aut
3df0: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
3e00: 61 74 65 64 20 70 72 61 67 6d 61 20 74 61 62 6c  ated pragma tabl
3e10: 65 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..*************
3e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
3e60: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
3e70: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
3e80: 67 20 61 73 20 61 20 73 61 66 65 74 79 20 6c 65  g as a safety le
3e90: 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30 20 66  vel.  Return 0 f
3ea0: 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72  or OFF,.** 1 for
3eb0: 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e   ON or NORMAL an
3ec0: 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52  d 2 for FULL.  R
3ed0: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
3ee0: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
3ef0: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
3f00: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46  argument.  The F
3f10: 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20 64 69  ULL option is di
3f20: 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74  sallowed.** if t
3f30: 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61  he omitFull para
3f40: 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a  meter it 1..**.*
3f50: 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  * Note that the 
3f60: 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20  values returned 
3f70: 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74 68 61  are one less tha
3f80: 74 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61  t the values tha
3f90: 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 70  t.** should be p
3fa0: 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c 69 74  assed into sqlit
3fb0: 65 33 42 74 72 65 65 53 65 74 53 61 66 65 74 79  e3BtreeSetSafety
3fc0: 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20 69 73  Level().  The is
3fd0: 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70   done.** to supp
3fe0: 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c 20 63  ort legacy SQL c
3ff0: 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65 74 79  ode.  The safety
4000: 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f 20 62   level used to b
4010: 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64  e boolean.** and
4020: 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73 20 6d   older scripts m
4030: 61 79 20 68 61 76 65 20 75 73 65 64 20 6e 75 6d  ay have used num
4040: 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46 20 61  bers 0 for OFF a
4050: 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a  nd 1 for ON..*/.
4060: 73 74 61 74 69 63 20 75 38 20 67 65 74 53 61 66  static u8 getSaf
4070: 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63  etyLevel(const c
4080: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74  har *z, int omit
4090: 46 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29 7b 0a  Full, u8 dflt){.
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
40c0: 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35 36  123456789 123456
40d0: 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69 63 20  789 */.  static 
40e0: 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74  const char zText
40f0: 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79  [] = "onoffalsey
4100: 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20 73  estruefull";.  s
4110: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69  tatic const u8 i
4120: 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20 31  Offset[] = {0, 1
4130: 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20 31  , 2, 4, 9, 12, 1
4140: 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  6};.  static con
4150: 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20  st u8 iLength[] 
4160: 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20 33  = {2, 2, 3, 5, 3
4170: 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74 69  , 4, 4};.  stati
4180: 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61 6c 75  c const u8 iValu
4190: 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30 2c  e[] =  {1, 0, 0,
41a0: 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20 20   0, 1, 1, 2};.  
41b0: 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20  int i, n;.  if( 
41c0: 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a  sqlite3Isdigit(*
41d0: 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  z) ){.    return
41e0: 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69   (u8)sqlite3Atoi
41f0: 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73  (z);.  }.  n = s
4200: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
4210: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
4220: 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74  ArraySize(iLengt
4230: 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b 2b  h)-omitFull; i++
4240: 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65 6e 67  ){.    if( iLeng
4250: 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c 69  th[i]==n && sqli
4260: 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a 54 65  te3StrNICmp(&zTe
4270: 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c 7a  xt[iOffset[i]],z
4280: 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ,n)==0 ){.      
4290: 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d  return iValue[i]
42a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
42b0: 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a  turn dflt;.}../*
42c0: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
42d0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
42e0: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
42f0: 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33  e..*/.u8 sqlite3
4300: 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
4310: 20 63 68 61 72 20 2a 7a 2c 20 75 38 20 64 66 6c   char *z, u8 dfl
4320: 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74  t){.  return get
4330: 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c  SafetyLevel(z,1,
4340: 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20  dflt)!=0;.}../* 
4350: 54 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f  The sqlite3GetBo
4360: 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e  olean() function
4370: 20 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65   is used by othe
4380: 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68  r modules but th
4390: 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f  e.** remainder o
43a0: 66 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73  f this file is s
43b0: 70 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d  pecific to PRAGM
43c0: 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53  A processing.  S
43d0: 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65  o omit.** the re
43e0: 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69  st of the file i
43f0: 66 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d  f PRAGMAs are om
4400: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
4410: 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  uild..*/.#if !de
4420: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
4430: 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a  T_PRAGMA)../*.**
4440: 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67   Interpret the g
4450: 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61  iven string as a
4460: 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61   locking mode va
4470: 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  lue..*/.static i
4480: 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64  nt getLockingMod
4490: 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  e(const char *z)
44a0: 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20  {.  if( z ){.   
44b0: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
44c0: 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75  trICmp(z, "exclu
44d0: 73 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20  sive") ) return 
44e0: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
44f0: 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20  E_EXCLUSIVE;.   
4500: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
4510: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61  trICmp(z, "norma
4520: 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47  l") ) return PAG
4530: 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e  ER_LOCKINGMODE_N
4540: 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74  ORMAL;.  }.  ret
4550: 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e  urn PAGER_LOCKIN
4560: 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a  GMODE_QUERY;.}..
4570: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4580: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f  MIT_AUTOVACUUM./
4590: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
45a0: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
45b0: 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  as an auto-vacuu
45c0: 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a  m mode value..**
45d0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
45e0: 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65  g strings, "none
45f0: 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69  ", "full" and "i
4600: 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20  ncremental" are 
4610: 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20  .** acceptable, 
4620: 61 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d  as are their num
4630: 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73  eric equivalents
4640: 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73  : 0, 1 and 2 res
4650: 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74  pectively..*/.st
4660: 61 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f  atic int getAuto
4670: 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61  Vacuum(const cha
4680: 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a  r *z){.  int i;.
4690: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
46a0: 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65  StrICmp(z, "none
46b0: 22 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45  ") ) return BTRE
46c0: 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e  E_AUTOVACUUM_NON
46d0: 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69  E;.  if( 0==sqli
46e0: 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66  te3StrICmp(z, "f
46f0: 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42  ull") ) return B
4700: 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f  TREE_AUTOVACUUM_
4710: 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73  FULL;.  if( 0==s
4720: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c  qlite3StrICmp(z,
4730: 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20   "incremental") 
4740: 29 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41  ) return BTREE_A
4750: 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a  UTOVACUUM_INCR;.
4760: 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f    i = sqlite3Ato
4770: 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28  i(z);.  return (
4780: 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29  u8)((i>=0&&i<=2)
4790: 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  ?i:0);.}.#endif 
47a0: 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /* ifndef SQLITE
47b0: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
47c0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
47d0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
47e0: 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74  RAGMAS./*.** Int
47f0: 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e  erpret the given
4800: 20 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d   string as a tem
4810: 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52  p db location. R
4820: 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65  eturn 1 for file
4830: 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f  .** backed tempo
4840: 72 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20  rary databases, 
4850: 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c  2 for the Red-Bl
4860: 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f  ack tree in memo
4870: 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61  ry database.** a
4880: 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20  nd 0 to use the 
4890: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66  compile-time def
48a0: 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ault..*/.static 
48b0: 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65  int getTempStore
48c0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
48d0: 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27  .  if( z[0]>='0'
48e0: 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b   && z[0]<='2' ){
48f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d  .    return z[0]
4900: 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20   - '0';.  }else 
4910: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
4920: 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30  mp(z, "file")==0
4930: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31   ){.    return 1
4940: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71  ;.  }else if( sq
4950: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
4960: 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a  "memory")==0 ){.
4970: 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20      return 2;.  
4980: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72  }else{.    retur
4990: 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  n 0;.  }.}.#endi
49a0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45  f /* SQLITE_PAGE
49b0: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  R_PRAGMAS */..#i
49c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
49d0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
49e0: 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65  /*.** Invalidate
49f0: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65   temp storage, e
4a00: 69 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74  ither when the t
4a10: 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63  emp storage is c
4a20: 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64  hanged.** from d
4a30: 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20  efault, or when 
4a40: 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74  'file' and the t
4a50: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
4a60: 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a  ory has changed.
4a70: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e  */.static int in
4a80: 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72  validateTempStor
4a90: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
4aa0: 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e){.  sqlite3 *d
4ab0: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a  b = pParse->db;.
4ac0: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d    if( db->aDb[1]
4ad0: 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69  .pBt!=0 ){.    i
4ae0: 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
4af0: 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  it || sqlite3Btr
4b00: 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28  eeIsInReadTrans(
4b10: 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20  db->aDb[1].pBt) 
4b20: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
4b30: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
4b40: 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72   "temporary stor
4b50: 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68  age cannot be ch
4b60: 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20  anged ".        
4b70: 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74  "from within a t
4b80: 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20  ransaction");.  
4b90: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4ba0: 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
4bb0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
4bc0: 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e  lose(db->aDb[1].
4bd0: 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44  pBt);.    db->aD
4be0: 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20  b[1].pBt = 0;.  
4bf0: 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c    sqlite3ResetAl
4c00: 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
4c10: 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20  tion(db);.  }.  
4c20: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
4c30: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
4c40: 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d  LITE_PAGER_PRAGM
4c50: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
4c60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
4c70: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
4c80: 66 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  f the TEMP datab
4c90: 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f  ase is open, clo
4ca0: 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74  se it and mark t
4cb0: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
4cc0: 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67  ma.** as needing
4cd0: 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69   reloading.  Thi
4ce0: 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77  s must be done w
4cf0: 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51  hen using the SQ
4d00: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a  LITE_TEMP_STORE.
4d10: 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45  ** or DEFAULT_TE
4d20: 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73  MP_STORE pragmas
4d30: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
4d40: 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67  changeTempStorag
4d50: 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  e(Parse *pParse,
4d60: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
4d70: 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e  orageType){.  in
4d80: 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74  t ts = getTempSt
4d90: 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65  ore(zStorageType
4da0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  );.  sqlite3 *db
4db0: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
4dc0: 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74   if( db->temp_st
4dd0: 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e  ore==ts ) return
4de0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66   SQLITE_OK;.  if
4df0: 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70  ( invalidateTemp
4e00: 53 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20  Storage( pParse 
4e10: 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29  ) != SQLITE_OK )
4e20: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
4e30: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  ITE_ERROR;.  }. 
4e40: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20   db->temp_store 
4e50: 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75  = (u8)ts;.  retu
4e60: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
4e70: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
4e80: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a  _PAGER_PRAGMAS *
4e90: 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74  /../*.** Generat
4ea0: 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e  e code to return
4eb0: 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65   a single intege
4ec0: 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74  r value..*/.stat
4ed0: 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69  ic void returnSi
4ee0: 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20 2a 70  ngleInt(Parse *p
4ef0: 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
4f00: 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34 20 76  r *zLabel, i64 v
4f10: 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20 2a 76  alue){.  Vdbe *v
4f20: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
4f30: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69 6e 74  e(pParse);.  int
4f40: 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d   mem = ++pParse-
4f50: 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a 70 49  >nMem;.  i64 *pI
4f60: 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  64 = sqlite3DbMa
4f70: 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65 2d 3e  llocRaw(pParse->
4f80: 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75 65  db, sizeof(value
4f90: 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34 20 29  ));.  if( pI64 )
4fa0: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 49 36  {.    memcpy(pI6
4fb0: 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a 65 6f  4, &value, sizeo
4fc0: 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d 0a 20  f(value));.  }. 
4fd0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
4fe0: 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20  p4(v, OP_Int64, 
4ff0: 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68 61 72  0, mem, 0, (char
5000: 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54 36 34  *)pI64, P4_INT64
5010: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
5020: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
5030: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  ;.  sqlite3VdbeS
5040: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
5050: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c  COLNAME_NAME, zL
5060: 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53 54 41  abel, SQLITE_STA
5070: 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  TIC);.  sqlite3V
5080: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
5090: 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20  ResultRow, mem, 
50a0: 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65  1);.}.../*.** Se
50b0: 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76  t the safety_lev
50c0: 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66 6c 61  el and pager fla
50d0: 67 73 20 66 6f 72 20 70 61 67 65 72 20 69 44 62  gs for pager iDb
50e0: 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30 0a 2a  .  Or if iDb<0.*
50f0: 2a 20 73 65 74 20 74 68 65 73 65 20 76 61 6c 75  * set these valu
5100: 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67 65 72  es for all pager
5110: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  s..*/.#ifndef SQ
5120: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
5130: 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63 20 76  PRAGMAS.static v
5140: 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65 72 46  oid setAllPagerF
5150: 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a 64 62  lags(sqlite3 *db
5160: 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75 74  ){.  if( db->aut
5170: 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 44  oCommit ){.    D
5180: 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61 44 62  b *pDb = db->aDb
5190: 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 64 62  ;.    int n = db
51a0: 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73 65 72  ->nDb;.    asser
51b0: 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53  t( SQLITE_FullFS
51c0: 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c 4c 46  ync==PAGER_FULLF
51d0: 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65  SYNC );.    asse
51e0: 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  rt( SQLITE_CkptF
51f0: 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f  ullFSync==PAGER_
5200: 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 29  CKPT_FULLFSYNC )
5210: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51  ;.    assert( SQ
5220: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3d  LITE_CacheSpill=
5230: 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c  =PAGER_CACHESPIL
5240: 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  L );.    assert(
5250: 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e   (PAGER_FULLFSYN
5260: 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54 5f 46  C | PAGER_CKPT_F
5270: 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52  ULLFSYNC | PAGER
5280: 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20 20 20  _CACHESPILL).   
5290: 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20 50 41            ==  PA
52a0: 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 20 29  GER_FLAGS_MASK )
52b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
52c0: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
52d0: 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f   & PAGER_SYNCHRO
52e0: 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44 62 2d  NOUS_MASK)==pDb-
52f0: 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 29 3b  >safety_level );
5300: 0a 20 20 20 20 77 68 69 6c 65 28 20 28 6e 2d 2d  .    while( (n--
5310: 29 20 3e 20 30 20 29 7b 0a 20 20 20 20 20 20 69  ) > 0 ){.      i
5320: 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20  f( pDb->pBt ){. 
5330: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
5340: 72 65 65 53 65 74 50 61 67 65 72 46 6c 61 67 73  reeSetPagerFlags
5350: 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20 20 20  (pDb->pBt,.     
5360: 20 20 20 20 20 20 20 20 20 20 20 20 70 44 62 2d              pDb-
5370: 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 7c 20  >safety_level | 
5380: 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50 41 47  (db->flags & PAG
5390: 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29 20 29  ER_FLAGS_MASK) )
53a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
53b0: 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  pDb++;.    }.  }
53c0: 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  .}.#else.# defin
53d0: 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61  e setAllPagerFla
53e0: 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  gs(X)  /* no-op 
53f0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  */.#endif.../*.*
5400: 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d 61 6e  * Return a human
5410: 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65 20 66  -readable name f
5420: 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  or a constraint 
5430: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74 69 6f  resolution actio
5440: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
5450: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
5460: 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63 6f 6e  N_KEY.static con
5470: 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f 6e 4e  st char *actionN
5480: 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29 7b 0a  ame(u8 action){.
5490: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
54a0: 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28 20 61  ame;.  switch( a
54b0: 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63 61 73  ction ){.    cas
54c0: 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20 20 7a  e OE_SetNull:  z
54d0: 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55 4c 4c  Name = "SET NULL
54e0: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
54f0: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74  .    case OE_Set
5500: 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  Dflt:  zName = "
5510: 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20 20 20  SET DEFAULT";   
5520: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
5530: 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20 20 7a  e OE_Cascade:  z
5540: 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44 45 22  Name = "CASCADE"
5550: 3b 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;         break;
5560: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52 65 73  .    case OE_Res
5570: 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d 20 22  trict: zName = "
5580: 52 45 53 54 52 49 43 54 22 3b 20 20 20 20 20 20  RESTRICT";      
5590: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
55a0: 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20 7a  ault:          z
55b0: 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54 49 4f  Name = "NO ACTIO
55c0: 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20 20 20  N";  .          
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
55e0: 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45 5f 4e  rt( action==OE_N
55f0: 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a 20 20  one ); break;.  
5600: 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65  }.  return zName
5610: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ;.}.#endif.../*.
5620: 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65 4d 6f  ** Parameter eMo
5630: 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  de must be one o
5640: 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52  f the PAGER_JOUR
5650: 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73  NALMODE_XXX cons
5660: 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e 65 64  tants.** defined
5670: 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54 68 69   in pager.h. Thi
5680: 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  s function retur
5690: 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  ns the associate
56a0: 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a 20 6a  d lowercase.** j
56b0: 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61 6d 65  ournal-mode name
56c0: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
56d0: 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
56e0: 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d 6f 64  odename(int eMod
56f0: 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63 68 61  e){.  static cha
5700: 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f 64 65  r * const azMode
5710: 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 22  Name[] = {.    "
5720: 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73 69 73  delete", "persis
5730: 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72 75 6e  t", "off", "trun
5740: 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79 22 0a  cate", "memory".
5750: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5760: 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c 20 22  MIT_WAL.     , "
5770: 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20 7d 3b  wal".#endif.  };
5780: 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52  .  assert( PAGER
5790: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c  _JOURNALMODE_DEL
57a0: 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ETE==0 );.  asse
57b0: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
57c0: 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d 3d 31  LMODE_PERSIST==1
57d0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   );.  assert( PA
57e0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
57f0: 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73 73 65  OFF==2 );.  asse
5800: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
5810: 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 3d 3d  LMODE_TRUNCATE==
5820: 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50  3 );.  assert( P
5830: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
5840: 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a 20 20  _MEMORY==4 );.  
5850: 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f  assert( PAGER_JO
5860: 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d 3d 35  URNALMODE_WAL==5
5870: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4d   );.  assert( eM
5880: 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64 65 3c  ode>=0 && eMode<
5890: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64  =ArraySize(azMod
58a0: 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69 66 28  eName) );..  if(
58b0: 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53 69 7a   eMode==ArraySiz
58c0: 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 20  e(azModeName) ) 
58d0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75  return 0;.  retu
58e0: 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 65 4d  rn azModeName[eM
58f0: 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  ode];.}../*.** P
5900: 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d 61 20  rocess a pragma 
5910: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a 2a 0a  statement.  .**.
5920: 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65 20 6f  ** Pragmas are o
5930: 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a 2a 0a  f this form:.**.
5940: 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41 20 5b  **      PRAGMA [
5950: 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b 3d 20  database.]id [= 
5960: 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  value].**.** The
5970: 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69 67 68   identifier migh
5980: 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74 72 69  t also be a stri
5990: 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69  ng.  The value i
59a0: 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e 64 0a  s a string, and.
59b0: 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c 20 6f  ** identifier, o
59c0: 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20  r a number.  If 
59d0: 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74 72 75  minusFlag is tru
59e0: 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  e, then the valu
59f0: 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62 65 72  e is.** a number
5a00: 20 74 68 61 74 20 77 61 73 20 70 72 65 63 65 64   that was preced
5a10: 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20 73 69  ed by a minus si
5a20: 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gn..**.** If the
5a30: 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 22 64   left side is "d
5a40: 61 74 61 62 61 73 65 2e 69 64 22 20 74 68 65 6e  atabase.id" then
5a50: 20 70 49 64 31 20 69 73 20 74 68 65 20 64 61 74   pId1 is the dat
5a60: 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20 61 6e  abase name.** an
5a70: 64 20 70 49 64 32 20 69 73 20 74 68 65 20 69 64  d pId2 is the id
5a80: 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74 20 73  .  If the left s
5a90: 69 64 65 20 69 73 20 6a 75 73 74 20 22 69 64 22  ide is just "id"
5aa0: 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74 68   then pId1 is th
5ab0: 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49 64 32  e.** id and pId2
5ac0: 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20 73 74   is any empty st
5ad0: 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ring..*/.void sq
5ae0: 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20 20 50  lite3Pragma(.  P
5af0: 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 0a 20  arse *pParse, . 
5b00: 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20 20 20   Token *pId1,   
5b10: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 70 61       /* First pa
5b20: 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e  rt of [database.
5b30: 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20 54  ]id field */.  T
5b40: 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20 20  oken *pId2,     
5b50: 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61 72     /* Second par
5b60: 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e 5d  t of [database.]
5b70: 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c  id field, or NUL
5b80: 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56  L */.  Token *pV
5b90: 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f  alue,      /* To
5ba0: 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c  ken for <value>,
5bb0: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
5bc0: 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20  t minusFlag     
5bd0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27    /* True if a '
5be0: 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64 65 64  -' sign preceded
5bf0: 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20   <value> */.){. 
5c00: 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30   char *zLeft = 0
5c10: 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74  ;       /* Nul-t
5c20: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
5c30: 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20  string <id> */. 
5c40: 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20   char *zRight = 
5c50: 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74  0;      /* Nul-t
5c60: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
5c70: 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20  string <value>, 
5c80: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e  or NULL */.  con
5c90: 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30  st char *zDb = 0
5ca0: 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62  ;   /* The datab
5cb0: 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ase name */.  To
5cc0: 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20  ken *pId;       
5cd0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
5ce0: 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f  to <id> token */
5cf0: 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b  .  char *aFcntl[
5d00: 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67  4];       /* Arg
5d10: 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f  ument to SQLITE_
5d20: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a  FCNTL_PRAGMA */.
5d30: 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
5d40: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
5d50: 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c  base index for <
5d60: 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69  database> */.  i
5d70: 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64  nt lwr, upr, mid
5d80: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  ;           /* B
5d90: 69 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f 75  inary search bou
5da0: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  nds */.  int rc;
5db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5dc0: 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20        /* return 
5dd0: 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54  value form SQLIT
5de0: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
5df0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  /.  sqlite3 *db 
5e00: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20  = pParse->db;   
5e10: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
5e20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
5e30: 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20   Db *pDb;       
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5e50: 20 54 68 65 20 73 70 65 63 69 66 69 63 20 64 61   The specific da
5e60: 74 61 62 61 73 65 20 62 65 69 6e 67 20 70 72 61  tabase being pra
5e70: 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20  gmaed */.  Vdbe 
5e80: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
5e90: 64 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a  dbe(pParse);  /*
5ea0: 20 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   Prepared statem
5eb0: 65 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20 76 3d  ent */..  if( v=
5ec0: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 73  =0 ) return;.  s
5ed0: 71 6c 69 74 65 33 56 64 62 65 52 75 6e 4f 6e 6c  qlite3VdbeRunOnl
5ee0: 79 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50 61 72  yOnce(v);.  pPar
5ef0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 0a 20  se->nMem = 2;.. 
5f00: 20 2f 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68   /* Interpret th
5f10: 65 20 5b 64 61 74 61 62 61 73 65 2e 5d 20 70 61  e [database.] pa
5f20: 72 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61  rt of the pragma
5f30: 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44 62 20   statement. iDb 
5f40: 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65  is the.  ** inde
5f50: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
5f60: 65 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73  e this pragma is
5f70: 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64 20 74   being applied t
5f80: 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e 20 2a  o in db.aDb[]. *
5f90: 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69 74 65  /.  iDb = sqlite
5fa0: 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70 50 61  3TwoPartName(pPa
5fb0: 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64 32 2c  rse, pId1, pId2,
5fc0: 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20 69 44   &pId);.  if( iD
5fd0: 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  b<0 ) return;.  
5fe0: 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
5ff0: 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  Db];..  /* If th
6000: 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 20  e temp database 
6010: 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69 63 69  has been explici
6020: 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70 61 72  tly named as par
6030: 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 70  t of the .  ** p
6040: 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75 72 65  ragma, make sure
6050: 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a 20 20   it is open. .  
6060: 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d 31 20  */.  if( iDb==1 
6070: 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  && sqlite3OpenTe
6080: 6d 70 44 61 74 61 62 61 73 65 28 70 50 61 72 73  mpDatabase(pPars
6090: 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  e) ){.    return
60a0: 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74 20 3d  ;.  }..  zLeft =
60b0: 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d   sqlite3NameFrom
60c0: 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29 3b 0a  Token(db, pId);.
60d0: 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29 20 72    if( !zLeft ) r
60e0: 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d 69 6e  eturn;.  if( min
60f0: 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20 7a 52  usFlag ){.    zR
6100: 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4d 50  ight = sqlite3MP
6110: 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54 22 2c  rintf(db, "-%T",
6120: 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73   pValue);.  }els
6130: 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20  e{.    zRight = 
6140: 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
6150: 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75 65 29  oken(db, pValue)
6160: 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
6170: 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62 20 3d   pId2 );.  zDb =
6180: 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70 44 62   pId2->n>0 ? pDb
6190: 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20 20 69  ->zName : 0;.  i
61a0: 66 28 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  f( sqlite3AuthCh
61b0: 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51 4c 49  eck(pParse, SQLI
61c0: 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65 66 74  TE_PRAGMA, zLeft
61d0: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 20 29  , zRight, zDb) )
61e0: 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d  {.    goto pragm
61f0: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  a_out;.  }..  /*
6200: 20 53 65 6e 64 20 61 6e 20 53 51 4c 49 54 45 5f   Send an SQLITE_
6210: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c  FCNTL_PRAGMA fil
6220: 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  e-control to the
6230: 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 0a   underlying VFS.
6240: 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e    ** connection.
6250: 20 20 49 66 20 69 74 20 72 65 74 75 72 6e 73 20    If it returns 
6260: 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65 6e 20  SQLITE_OK, then 
6270: 61 73 73 75 6d 65 20 74 68 61 74 20 74 68 65 20  assume that the 
6280: 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c 65 64  VFS.  ** handled
6290: 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20   the pragma and 
62a0: 67 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d 6f 70  generate a no-op
62b0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
62c0: 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63 6e  ent..  */.  aFcn
62d0: 74 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46 63  tl[0] = 0;.  aFc
62e0: 6e 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a  ntl[1] = zLeft;.
62f0: 20 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52    aFcntl[2] = zR
6300: 69 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 33  ight;.  aFcntl[3
6310: 5d 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73  ] = 0;.  db->bus
6320: 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d  yHandler.nBusy =
6330: 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
6340: 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
6350: 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f  db, zDb, SQLITE_
6360: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28 76  FCNTL_PRAGMA, (v
6370: 6f 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20 20  oid*)aFcntl);.  
6380: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
6390: 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63  K ){.    if( aFc
63a0: 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ntl[0] ){.      
63b0: 69 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72  int mem = ++pPar
63c0: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 20 20  se->nMem;.      
63d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
63e0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
63f0: 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46 63 6e   0, mem, 0, aFcn
6400: 74 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20  tl[0], 0);.     
6410: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
6420: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
6430: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6440: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
6450: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72  COLNAME_NAME, "r
6460: 65 73 75 6c 74 22 2c 20 53 51 4c 49 54 45 5f 53  esult", SQLITE_S
6470: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
6480: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
6490: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
64a0: 20 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20 20 20   mem, 1);.      
64b0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63  sqlite3_free(aFc
64c0: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20  ntl[0]);.    }. 
64d0: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
64e0: 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  ut;.  }.  if( rc
64f0: 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e  !=SQLITE_NOTFOUN
6500: 44 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63  D ){.    if( aFc
6510: 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ntl[0] ){.      
6520: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
6530: 70 50 61 72 73 65 2c 20 22 25 73 22 2c 20 61 46  pParse, "%s", aF
6540: 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20  cntl[0]);.      
6550: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63  sqlite3_free(aFc
6560: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20  ntl[0]);.    }. 
6570: 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b     pParse->nErr+
6580: 2b 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72  +;.    pParse->r
6590: 63 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f 74 6f  c = rc;.    goto
65a0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
65b0: 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68  ..  /* Locate th
65c0: 65 20 70 72 61 67 6d 61 20 69 6e 20 74 68 65 20  e pragma in the 
65d0: 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a 2f 0a  lookup table */.
65e0: 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72    lwr = 0;.  upr
65f0: 20 3d 20 41 72 72 61 79 53 69 7a 65 28 61 50 72   = ArraySize(aPr
6600: 61 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a 20 20  agmaNames)-1;.  
6610: 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70 72 20  while( lwr<=upr 
6620: 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28 6c 77  ){.    mid = (lw
6630: 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20 72 63  r+upr)/2;.    rc
6640: 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63   = sqlite3_stric
6650: 6d 70 28 7a 4c 65 66 74 2c 20 61 50 72 61 67 6d  mp(zLeft, aPragm
6660: 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d  aNames[mid].zNam
6670: 65 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  e);.    if( rc==
6680: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69  0 ) break;.    i
6690: 66 28 20 72 63 3c 30 20 29 7b 0a 20 20 20 20 20  f( rc<0 ){.     
66a0: 20 75 70 72 20 3d 20 6d 69 64 20 2d 20 31 3b 0a   upr = mid - 1;.
66b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
66c0: 20 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31 3b 0a   lwr = mid + 1;.
66d0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
66e0: 6c 77 72 3e 75 70 72 20 29 20 67 6f 74 6f 20 70  lwr>upr ) goto p
66f0: 72 61 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20 2f 2a  ragma_out;..  /*
6700: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64   Make sure the d
6710: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
6720: 73 20 6c 6f 61 64 65 64 20 69 66 20 74 68 65 20  s loaded if the 
6730: 70 72 61 67 6d 61 20 72 65 71 75 69 72 65 73 20  pragma requires 
6740: 74 68 61 74 20 2a 2f 0a 20 20 69 66 28 20 28 61  that */.  if( (a
6750: 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d  PragmaNames[mid]
6760: 2e 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61  .mPragFlag & Pra
6770: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
6780: 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )!=0 ){.    if( 
6790: 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
67a0: 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f  a(pParse) ) goto
67b0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
67c0: 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74  ..  /* Jump to t
67d0: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 70  he appropriate p
67e0: 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f  ragma handler */
67f0: 0a 20 20 73 77 69 74 63 68 28 20 61 50 72 61 67  .  switch( aPrag
6800: 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65 50 72  maNames[mid].ePr
6810: 61 67 54 79 70 20 29 7b 0a 20 20 0a 23 69 66 20  agTyp ){.  .#if 
6820: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
6830: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
6840: 41 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  AS) && !defined(
6850: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
6860: 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20 20 2a  ECATED).  /*.  *
6870: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
6880: 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63  ase.]default_cac
6890: 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  he_size.  **  PR
68a0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
68b0: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
68c0: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
68d0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
68e0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
68f0: 74 20 70 65 72 73 69 73 74 65 6e 74 20 73 65 74  t persistent set
6900: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
6910: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
6920: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72 65  e.  The value re
6930: 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d 61  turned is the ma
6940: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a  ximum number of.
6950: 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74 68    ** pages in th
6960: 65 20 70 61 67 65 20 63 61 63 68 65 2e 20 20 54  e page cache.  T
6970: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73  he second form s
6980: 65 74 73 20 62 6f 74 68 20 74 68 65 20 63 75 72  ets both the cur
6990: 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20 63  rent.  ** page c
69a0: 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 20  ache size value 
69b0: 61 6e 64 20 74 68 65 20 70 65 72 73 69 73 74 65  and the persiste
69c0: 6e 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69  nt page cache si
69d0: 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73 74  ze value.  ** st
69e0: 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61  ored in the data
69f0: 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a  base file..  **.
6a00: 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69    ** Older versi
6a10: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 6f  ons of SQLite wo
6a20: 75 6c 64 20 73 65 74 20 74 68 65 20 64 65 66 61  uld set the defa
6a30: 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20 74  ult cache size t
6a40: 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69 76  o a.  ** negativ
6a50: 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64 69  e number to indi
6a60: 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73  cate synchronous
6a70: 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61 79  =OFF.  These day
6a80: 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20  s, synchronous. 
6a90: 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f 6e   ** is always on
6aa0: 20 62 79 20 64 65 66 61 75 6c 74 20 72 65 67 61   by default rega
6ab0: 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73 69  rdless of the si
6ac0: 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  gn of the defaul
6ad0: 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a  t cache.  ** siz
6ae0: 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75 65  e.  But continue
6af0: 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62 73   to take the abs
6b00: 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74  olute value of t
6b10: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
6b20: 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68 69  .  ** size of hi
6b30: 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74 69  storical compati
6b40: 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20 63  bility..  */.  c
6b50: 61 73 65 20 50 72 61 67 54 79 70 5f 44 45 46 41  ase PragTyp_DEFA
6b60: 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20  ULT_CACHE_SIZE: 
6b70: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
6b80: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
6b90: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
6ba0: 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63  2);.    static c
6bb0: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
6bc0: 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d  getCacheSize[] =
6bd0: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54 72   {.      { OP_Tr
6be0: 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30 2c  ansaction, 0, 0,
6bf0: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20          0},     
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c10: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
6c20: 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
6c30: 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20  e,  0, 1,       
6c40: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
6c50: 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20  ACHE_SIZE},  /* 
6c60: 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  1 */.      { OP_
6c70: 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20  IfPos,       1, 
6c80: 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  8,        0},.  
6c90: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
6ca0: 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20 20  ,     0, 2,     
6cb0: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
6cc0: 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20 31  P_Subtract,    1
6cd0: 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c 0a  , 2,        1},.
6ce0: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73        { OP_IfPos
6cf0: 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20  ,       1, 8,   
6d00: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
6d10: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
6d20: 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   0, 1,        0}
6d30: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
6d40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20 2a            /* 6 *
6d50: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f  /.      { OP_Noo
6d60: 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20  p,        0, 0, 
6d70: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
6d80: 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
6d90: 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20 20     1, 1,        
6da0: 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69  0},.    };.    i
6db0: 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 73 71 6c  nt addr;.    sql
6dc0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
6dd0: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  e(v, iDb);.    i
6de0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
6df0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6e00: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
6e10: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
6e20: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
6e30: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
6e40: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 53   "cache_size", S
6e50: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
6e60: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
6e70: 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 61 64  m += 2;.      ad
6e80: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
6e90: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
6ea0: 61 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53  aySize(getCacheS
6eb0: 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53 69  ize), getCacheSi
6ec0: 7a 65 2c 69 4c 6e 29 3b 0a 20 20 20 20 20 20 73  ze,iLn);.      s
6ed0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
6ee0: 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29  P1(v, addr, iDb)
6ef0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6f00: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
6f10: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
6f20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
6f30: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 36  angeP1(v, addr+6
6f40: 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  , SQLITE_DEFAULT
6f50: 5f 43 41 43 48 45 5f 53 49 5a 45 29 3b 0a 20 20  _CACHE_SIZE);.  
6f60: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
6f70: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
6f80: 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65  3AbsInt32(sqlite
6f90: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
6fa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67        sqlite3Beg
6fb0: 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
6fc0: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29  (pParse, 0, iDb)
6fd0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6fe0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
6ff0: 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c 20 31  Integer, size, 1
7000: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
7010: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
7020: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c  _SetCookie, iDb,
7030: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
7040: 41 43 48 45 5f 53 49 5a 45 2c 20 31 29 3b 0a 20  ACHE_SIZE, 1);. 
7050: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
7060: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
7070: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
7080: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53  );.      pDb->pS
7090: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
70a0: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20  e = size;.      
70b0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
70c0: 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42  acheSize(pDb->pB
70d0: 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  t, pDb->pSchema-
70e0: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
70f0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
7100: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51   }.#endif /* !SQ
7110: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
7120: 50 52 41 47 4d 41 53 20 26 26 20 21 53 51 4c 49  PRAGMAS && !SQLI
7130: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
7140: 45 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  ED */..#if !defi
7150: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
7160: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
7170: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
7180: 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65   [database.]page
7190: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
71a0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61  MA [database.]pa
71b0: 67 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  ge_size=N.  **. 
71c0: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
71d0: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
71e0: 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66  urrent setting f
71f0: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  or the.  ** data
7200: 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 69  base page size i
7210: 6e 20 62 79 74 65 73 2e 20 20 54 68 65 20 73 65  n bytes.  The se
7220: 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 74  cond form sets t
7230: 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  he.  ** database
7240: 20 70 61 67 65 20 73 69 7a 65 20 76 61 6c 75 65   page size value
7250: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e  .  The value can
7260: 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 0a   only be set if.
7270: 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73    ** the databas
7280: 65 20 68 61 73 20 6e 6f 74 20 79 65 74 20 62 65  e has not yet be
7290: 65 6e 20 63 72 65 61 74 65 64 2e 0a 20 20 2a 2f  en created..  */
72a0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
72b0: 50 41 47 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20  PAGE_SIZE: {.   
72c0: 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44   Btree *pBt = pD
72d0: 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65  b->pBt;.    asse
72e0: 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20  rt( pBt!=0 );.  
72f0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
7300: 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20  .      int size 
7310: 3d 20 41 4c 57 41 59 53 28 70 42 74 29 20 3f 20  = ALWAYS(pBt) ? 
7320: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 50  sqlite3BtreeGetP
7330: 61 67 65 53 69 7a 65 28 70 42 74 29 20 3a 20 30  ageSize(pBt) : 0
7340: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  ;.      returnSi
7350: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
7360: 22 70 61 67 65 5f 73 69 7a 65 22 2c 20 73 69 7a  "page_size", siz
7370: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
7380: 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63 20 6d       /* Malloc m
7390: 61 79 20 66 61 69 6c 20 77 68 65 6e 20 73 65 74  ay fail when set
73a0: 74 69 6e 67 20 74 68 65 20 70 61 67 65 2d 73 69  ting the page-si
73b0: 7a 65 2c 20 61 73 20 74 68 65 72 65 20 69 73 20  ze, as there is 
73c0: 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20 20 20  an internal.    
73d0: 20 20 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74    ** buffer that
73e0: 20 74 68 65 20 70 61 67 65 72 20 6d 6f 64 75 6c   the pager modul
73f0: 65 20 72 65 73 69 7a 65 73 20 75 73 69 6e 67 20  e resizes using 
7400: 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28  sqlite3_realloc(
7410: 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
7420: 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69    db->nextPagesi
7430: 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69  ze = sqlite3Atoi
7440: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
7450: 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  if( SQLITE_NOMEM
7460: 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  ==sqlite3BtreeSe
7470: 74 50 61 67 65 53 69 7a 65 28 70 42 74 2c 20 64  tPageSize(pBt, d
7480: 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 2c  b->nextPagesize,
7490: 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20 20 20 20  -1,0) ){.       
74a0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
74b0: 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  d = 1;.      }. 
74c0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
74d0: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
74e0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
74f0: 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a  .]secure_delete.
7500: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7510: 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64  tabase.]secure_d
7520: 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a  elete=ON/OFF.  *
7530: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
7540: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
7550: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
7560: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73  g for the.  ** s
7570: 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61  ecure_delete fla
7580: 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  g.  The second f
7590: 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20  orm changes the 
75a0: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20  secure_delete.  
75b0: 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20  ** flag setting 
75c0: 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e  and reports then
75d0: 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20  ew value..  */. 
75e0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 45   case PragTyp_SE
75f0: 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20  CURE_DELETE: {. 
7600: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
7610: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e  pDb->pBt;.    in
7620: 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73  t b = -1;.    as
7630: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
7640: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
7650: 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69  {.      b = sqli
7660: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
7670: 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  ight, 0);.    }.
7680: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
7690: 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20  =0 && b>=0 ){.  
76a0: 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20      int ii;.    
76b0: 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
76c0: 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
76d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
76e0: 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28  reeSecureDelete(
76f0: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
7700: 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   b);.      }.   
7710: 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74   }.    b = sqlit
7720: 65 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c  e3BtreeSecureDel
7730: 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20  ete(pBt, b);.   
7740: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
7750: 28 70 50 61 72 73 65 2c 20 22 73 65 63 75 72 65  (pParse, "secure
7760: 5f 64 65 6c 65 74 65 22 2c 20 62 29 3b 0a 20 20  _delete", b);.  
7770: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
7780: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
7790: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70  [database.]max_p
77a0: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 20 20  age_count.  **  
77b0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
77c0: 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74  .]max_page_count
77d0: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
77e0: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
77f0: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
7800: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
7810: 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d    ** maximum num
7820: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
7830: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
7840: 65 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20 73 65  e.  The .  ** se
7850: 63 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65 6d 70  cond form attemp
7860: 74 73 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69  ts to change thi
7870: 73 20 73 65 74 74 69 6e 67 2e 20 20 42 6f 74 68  s setting.  Both
7880: 0a 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75  .  ** forms retu
7890: 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  rn the current s
78a0: 65 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a  etting..  **.  *
78b0: 2a 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76  * The absolute v
78c0: 61 6c 75 65 20 6f 66 20 4e 20 69 73 20 75 73 65  alue of N is use
78d0: 64 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f  d.  This is undo
78e0: 63 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d 69 67  cumented and mig
78f0: 68 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20  ht.  ** change. 
7900: 20 54 68 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73   The only purpos
7910: 65 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20  e is to provide 
7920: 61 6e 20 65 61 73 79 20 77 61 79 20 74 6f 20 74  an easy way to t
7930: 65 73 74 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c  est.  ** the sql
7940: 69 74 65 33 41 62 73 49 6e 74 33 32 28 29 20 66  ite3AbsInt32() f
7950: 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20  unction..  **.  
7960: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
7970: 62 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75 6e 74  base.]page_count
7980: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
7990: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
79a0: 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 70 65  pages in the spe
79b0: 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 2e  cified database.
79c0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
79d0: 67 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e 54 3a  gTyp_PAGE_COUNT:
79e0: 20 7b 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b   {.    int iReg;
79f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65  .    sqlite3Code
7a00: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
7a10: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  rse, iDb);.    i
7a20: 52 65 67 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Reg = ++pParse->
7a30: 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20 73 71  nMem;.    if( sq
7a40: 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65  lite3Tolower(zLe
7a50: 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b 0a 20  ft[0])=='p' ){. 
7a60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
7a70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50 61 67  AddOp2(v, OP_Pag
7a80: 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69 52 65  ecount, iDb, iRe
7a90: 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  g);.    }else{. 
7aa0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
7ab0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 61 78  AddOp3(v, OP_Max
7ac0: 50 67 63 6e 74 2c 20 69 44 62 2c 20 69 52 65 67  Pgcnt, iDb, iReg
7ad0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
7ae0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
7af0: 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74  e3AbsInt32(sqlit
7b00: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 29  e3Atoi(zRight)))
7b10: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
7b20: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
7b30: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 69   OP_ResultRow, i
7b40: 52 65 67 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  Reg, 1);.    sql
7b50: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
7b60: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71  ls(v, 1);.    sq
7b70: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
7b80: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
7b90: 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53  E_NAME, zLeft, S
7ba0: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
7bb0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
7bc0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
7bd0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c  GMA [database.]l
7be0: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a 2a  ocking_mode.  **
7bf0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
7c00: 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  se.]locking_mode
7c10: 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75   = (normal|exclu
7c20: 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73  sive).  */.  cas
7c30: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e  e PragTyp_LOCKIN
7c40: 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f  G_MODE: {.    co
7c50: 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d  nst char *zRet =
7c60: 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69   "normal";.    i
7c70: 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f  nt eMode = getLo
7c80: 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74  ckingMode(zRight
7c90: 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32  );..    if( pId2
7ca0: 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d  ->n==0 && eMode=
7cb0: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
7cc0: 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20  DE_QUERY ){.    
7cd0: 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41    /* Simple "PRA
7ce0: 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  GMA locking_mode
7cf0: 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  ;" statement. Th
7d00: 69 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f  is is a query fo
7d10: 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  r.      ** the c
7d20: 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c  urrent default l
7d30: 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69  ocking mode (whi
7d40: 63 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  ch may be differ
7d50: 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  ent to.      ** 
7d60: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
7d70: 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   of the main dat
7d80: 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f  abase)..      */
7d90: 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64  .      eMode = d
7da0: 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  b->dfltLockMode;
7db0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7dc0: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
7dd0: 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d  .      if( pId2-
7de0: 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  >n==0 ){.       
7df0: 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74   /* This indicat
7e00: 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62  es that no datab
7e10: 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65  ase name was spe
7e20: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20  cified as part. 
7e30: 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
7e40: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e   PRAGMA command.
7e50: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
7e60: 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d  e locking-mode m
7e70: 75 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a  ust be.        *
7e80: 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74  * set on all att
7e90: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c  ached databases,
7ea0: 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20   as well as the 
7eb0: 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20  main db file..  
7ec0: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20        **.       
7ed0: 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71   ** Also, the sq
7ee0: 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f  lite3.dfltLockMo
7ef0: 64 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  de variable is s
7f00: 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20  et so that.     
7f10: 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71     ** any subseq
7f20: 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20  uently attached 
7f30: 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75  databases also u
7f40: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  se the specified
7f50: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b  .        ** lock
7f60: 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20  ing mode..      
7f70: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74    */.        int
7f80: 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73   ii;.        ass
7f90: 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44  ert(pDb==&db->aD
7fa0: 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66  b[0]);.        f
7fb0: 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e  or(ii=2; ii<db->
7fc0: 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
7fd0: 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73        pPager = s
7fe0: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
7ff0: 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
8000: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
8010: 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67  ite3PagerLocking
8020: 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f  Mode(pPager, eMo
8030: 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  de);.        }. 
8040: 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c         db->dfltL
8050: 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d  ockMode = (u8)eM
8060: 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ode;.      }.   
8070: 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69     pPager = sqli
8080: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
8090: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65  b->pBt);.      e
80a0: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61  Mode = sqlite3Pa
80b0: 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70  gerLockingMode(p
80c0: 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20  Pager, eMode);. 
80d0: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
80e0: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  ( eMode==PAGER_L
80f0: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41  OCKINGMODE_NORMA
8100: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  L.            ||
8110: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
8120: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
8130: 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65  IVE );.    if( e
8140: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
8150: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
8160: 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20  E ){.      zRet 
8170: 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20  = "exclusive";. 
8180: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
8190: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
81a0: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
81b0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
81c0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
81d0: 4d 45 2c 20 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ME, "locking_mod
81e0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
81f0: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
8200: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
8210: 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
8220: 2c 20 7a 52 65 74 2c 20 30 29 3b 0a 20 20 20 20  , zRet, 0);.    
8230: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8240: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
8250: 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72  w, 1, 1);.    br
8260: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
8270: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
8280: 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d  abase.]journal_m
8290: 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ode.  **  PRAGMA
82a0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72   [database.]jour
82b0: 6e 61 6c 5f 6d 6f 64 65 20 3d 0a 20 20 2a 2a 20  nal_mode =.  ** 
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82d0: 20 20 20 20 20 28 64 65 6c 65 74 65 7c 70 65 72       (delete|per
82e0: 73 69 73 74 7c 6f 66 66 7c 74 72 75 6e 63 61 74  sist|off|truncat
82f0: 65 7c 6d 65 6d 6f 72 79 7c 77 61 6c 7c 6f 66 66  e|memory|wal|off
8300: 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ).  */.  case Pr
8310: 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f  agTyp_JOURNAL_MO
8320: 44 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 65 4d  DE: {.    int eM
8330: 6f 64 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  ode;        /* O
8340: 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f  ne of the PAGER_
8350: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
8360: 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20 20 20 20 69  symbols */.    i
8370: 6e 74 20 69 69 3b 20 20 20 20 20 20 20 20 20 20  nt ii;          
8380: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
8390: 20 2a 2f 0a 0a 20 20 20 20 73 71 6c 69 74 65 33   */..    sqlite3
83a0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
83b0: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
83c0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
83d0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
83e0: 4d 45 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ME, "journal_mod
83f0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
8400: 43 29 3b 0a 0a 20 20 20 20 69 66 28 20 7a 52 69  C);..    if( zRi
8410: 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ght==0 ){.      
8420: 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
8430: 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f  o "=MODE" part o
8440: 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f  f the pragma, do
8450: 20 61 20 71 75 65 72 79 20 66 6f 72 20 74 68 65   a query for the
8460: 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e  .      ** curren
8470: 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20  t mode */.      
8480: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
8490: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
84a0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
84b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
84c0: 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ode;.      int n
84d0: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
84e0: 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  30(zRight);.    
84f0: 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28    for(eMode=0; (
8500: 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a  zMode = sqlite3J
8510: 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
8520: 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65  Mode))!=0; eMode
8530: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
8540: 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
8550: 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20  (zRight, zMode, 
8560: 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  n)==0 ) break;. 
8570: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
8580: 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20   !zMode ){.     
8590: 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d     /* If the "=M
85a0: 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e  ODE" part does n
85b0: 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f  ot match any kno
85c0: 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c  wn journal mode,
85d0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
85e0: 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20   do a query */. 
85f0: 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50         eMode = P
8600: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
8610: 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a  _QUERY;.      }.
8620: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d      }.    if( eM
8630: 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  ode==PAGER_JOURN
8640: 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20  ALMODE_QUERY && 
8650: 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20  pId2->n==0 ){.  
8660: 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22      /* Convert "
8670: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
8680: 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d  ode" into "PRAGM
8690: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
86a0: 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44  ode" */.      iD
86b0: 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64  b = 0;.      pId
86c0: 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  2->n = 1;.    }.
86d0: 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e      for(ii=db->n
86e0: 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d  Db-1; ii>=0; ii-
86f0: 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  -){.      if( db
8700: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26  ->aDb[ii].pBt &&
8710: 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64   (ii==iDb || pId
8720: 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20  2->n==0) ){.    
8730: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
8740: 73 65 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b  sesBtree(v, ii);
8750: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8760: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
8770: 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69  _JournalMode, ii
8780: 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  , 1, eMode);.   
8790: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
87a0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
87b0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
87c0: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65  , 1, 1);.    bre
87d0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
87e0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
87f0: 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69  base.]journal_si
8800: 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50  ze_limit.  **  P
8810: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
8820: 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  ]journal_size_li
8830: 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  mit=N.  **.  ** 
8840: 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 73  Get or set the s
8850: 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c  ize limit on rol
8860: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
8870: 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  les..  */.  case
8880: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
8890: 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20  _SIZE_LIMIT: {. 
88a0: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
88b0: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
88c0: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
88d0: 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d      i64 iLimit =
88e0: 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69   -2;.    if( zRi
88f0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
8900: 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
8910: 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69  4(zRight, &iLimi
8920: 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c  t);.      if( iL
8930: 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74  imit<-1 ) iLimit
8940: 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20   = -1;.    }.   
8950: 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65   iLimit = sqlite
8960: 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a  3PagerJournalSiz
8970: 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69  eLimit(pPager, i
8980: 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75  Limit);.    retu
8990: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
89a0: 73 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a  se, "journal_siz
89b0: 65 5f 6c 69 6d 69 74 22 2c 20 69 4c 69 6d 69 74  e_limit", iLimit
89c0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
89d0: 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
89e0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
89f0: 52 41 47 4d 41 53 20 2a 2f 0a 0a 20 20 2f 2a 0a  RAGMAS */..  /*.
8a00: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
8a10: 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63  tabase.]auto_vac
8a20: 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  uum.  **  PRAGMA
8a30: 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75 74 6f   [database.]auto
8a40: 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20  _vacuum=N.  **. 
8a50: 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74   ** Get or set t
8a60: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
8a70: 64 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d 76  database 'auto-v
8a80: 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65 72  acuum' parameter
8a90: 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75 65  ..  ** The value
8aa0: 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20 4e   is one of:  0 N
8ab0: 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e 43  ONE 1 FULL 2 INC
8ac0: 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23 69  REMENTAL.  */.#i
8ad0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8ae0: 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63  T_AUTOVACUUM.  c
8af0: 61 73 65 20 50 72 61 67 54 79 70 5f 41 55 54 4f  ase PragTyp_AUTO
8b00: 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 42  _VACUUM: {.    B
8b10: 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d  tree *pBt = pDb-
8b20: 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74  >pBt;.    assert
8b30: 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ( pBt!=0 );.    
8b40: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
8b50: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
8b60: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 61 75  eInt(pParse, "au
8b70: 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69  to_vacuum", sqli
8b80: 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56  te3BtreeGetAutoV
8b90: 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20  acuum(pBt));.   
8ba0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
8bb0: 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74  t eAuto = getAut
8bc0: 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b  oVacuum(zRight);
8bd0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
8be0: 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f  Auto>=0 && eAuto
8bf0: 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  <=2 );.      db-
8c00: 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28  >nextAutovac = (
8c10: 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20  u8)eAuto;.      
8c20: 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56  /* Call SetAutoV
8c30: 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69  acuum() to set i
8c40: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e  nitialize the in
8c50: 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a  ternal auto and.
8c60: 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61        ** incr-va
8c70: 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73  cuum flags. This
8c80: 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20   is required in 
8c90: 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63  case this connec
8ca0: 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72  tion.      ** cr
8cb0: 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61  eates the databa
8cc0: 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69  se file. It is i
8cd0: 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74  mportant that it
8ce0: 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20 20   is created.    
8cf0: 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d    ** as an auto-
8d00: 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64  vacuum capable d
8d10: 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  b..      */.    
8d20: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
8d30: 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d  reeSetAutoVacuum
8d40: 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20  (pBt, eAuto);.  
8d50: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
8d60: 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d  TE_OK && (eAuto=
8d70: 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20  =1 || eAuto==2) 
8d80: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ){.        /* Wh
8d90: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61  en setting the a
8da0: 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20  uto_vacuum mode 
8db0: 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22  to either "full"
8dc0: 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20   or .        ** 
8dd0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77  "incremental", w
8de0: 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f  rite the value o
8df0: 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65  f meta[6] in the
8e00: 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
8e10: 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72    ** file. Befor
8e20: 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74  e writing to met
8e30: 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74  a[6], check that
8e40: 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74   meta[3] indicat
8e50: 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  es.        ** th
8e60: 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69  at this really i
8e70: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
8e80: 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61 73   capable databas
8e90: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
8ea0: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
8eb0: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
8ec0: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
8ed0: 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74  2);.        stat
8ee0: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
8ef0: 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d  ist setMeta6[] =
8f00: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f   {.          { O
8f10: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
8f20: 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20    0,         1, 
8f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f40: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
8f50: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65           { OP_Re
8f60: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c  adCookie,     0,
8f70: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
8f80: 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53      BTREE_LARGES
8f90: 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20  T_ROOT_PAGE},.  
8fa0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c          { OP_If,
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
8fc0: 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20          0,      
8fd0: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
8fe0: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
8ff0: 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20      { OP_Halt,  
9000: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
9010: 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20  OK, OE_Abort,   
9020: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
9030: 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   3 */.          
9040: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
9050: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
9060: 31 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1,              
9070: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a     0},    /* 4 *
9080: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
9090: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20  _SetCookie,     
90a0: 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45   0,         BTRE
90b0: 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 31  E_INCR_VACUUM, 1
90c0: 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a 20 20  },    /* 5 */.  
90d0: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20        };.       
90e0: 20 69 6e 74 20 69 41 64 64 72 3b 0a 20 20 20 20   int iAddr;.    
90f0: 20 20 20 20 69 41 64 64 72 20 3d 20 73 71 6c 69      iAddr = sqli
9100: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
9110: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65  (v, ArraySize(se
9120: 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65 74 61  tMeta6), setMeta
9130: 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20 20  6, iLn);.       
9140: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
9150: 67 65 50 31 28 76 2c 20 69 41 64 64 72 2c 20 69  geP1(v, iAddr, i
9160: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
9170: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
9180: 28 76 2c 20 69 41 64 64 72 2b 31 2c 20 69 44 62  (v, iAddr+1, iDb
9190: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
91a0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  e3VdbeChangeP2(v
91b0: 2c 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64 72  , iAddr+2, iAddr
91c0: 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +4);.        sql
91d0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
91e0: 28 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75  (v, iAddr+4, eAu
91f0: 74 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73  to-1);.        s
9200: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
9210: 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69  P1(v, iAddr+5, i
9220: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
9230: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
9240: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  e(v, iDb);.     
9250: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
9260: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
9270: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
9280: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 6e 63  A [database.]inc
9290: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28  remental_vacuum(
92a0: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20  N).  **.  ** Do 
92b0: 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65  N steps of incre
92c0: 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67  mental vacuuming
92d0: 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a   on a database..
92e0: 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c    */.#ifndef SQL
92f0: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
9300: 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54  UUM.  case PragT
9310: 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56  yp_INCREMENTAL_V
9320: 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74  ACUUM: {.    int
9330: 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20   iLimit, addr;. 
9340: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
9350: 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49   || !sqlite3GetI
9360: 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c  nt32(zRight, &iL
9370: 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c  imit) || iLimit<
9380: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d  =0 ){.      iLim
9390: 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b  it = 0x7fffffff;
93a0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
93b0: 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
93c0: 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c  ation(pParse, 0,
93d0: 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74   iDb);.    sqlit
93e0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
93f0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d  OP_Integer, iLim
9400: 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72  it, 1);.    addr
9410: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
9420: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56  dOp1(v, OP_IncrV
9430: 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62  acuum, iDb); Vdb
9440: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
9450: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9460: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op1(v, OP_Result
9470: 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  Row, 1);.    sql
9480: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9490: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
94a0: 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  -1);.    sqlite3
94b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
94c0: 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29  _IfPos, 1, addr)
94d0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
94e0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
94f0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
9500: 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  dr);.    break;.
9510: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e    }.#endif..#ifn
9520: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9530: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20  PAGER_PRAGMAS.  
9540: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
9550: 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65  [database.]cache
9560: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
9570: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61  MA [database.]ca
9580: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
9590: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
95a0: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
95b0: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65  current local se
95c0: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
95d0: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
95e0: 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66  ze. The second f
95f0: 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63  orm sets the loc
9600: 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  al.  ** page cac
9610: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  he size value.  
9620: 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65  If N is positive
9630: 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68   then that is th
9640: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
9650: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61   pages in the ca
9660: 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  che.  If N is ne
9670: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
9680: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
9690: 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65  pages is adjuste
96a0: 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61  d so that the ca
96b0: 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69  che uses -N kibi
96c0: 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65  bytes.  ** of me
96d0: 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  mory..  */.  cas
96e0: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
96f0: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65  SIZE: {.    asse
9700: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
9710: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
9720: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
9730: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
9740: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
9750: 6e 74 28 70 50 61 72 73 65 2c 20 22 63 61 63 68  nt(pParse, "cach
9760: 65 5f 73 69 7a 65 22 2c 20 70 44 62 2d 3e 70 53  e_size", pDb->pS
9770: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
9780: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
9790: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
97a0: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
97b0: 68 74 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e  ht);.      pDb->
97c0: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
97d0: 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20  ize = size;.    
97e0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
97f0: 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e  tCacheSize(pDb->
9800: 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  pBt, pDb->pSchem
9810: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
9820: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
9830: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
9840: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
9850: 65 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29 0a  e.]mmap_size(N).
9860: 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20 74    **.  ** Used t
9870: 6f 20 73 65 74 20 6d 61 70 70 69 6e 67 20 73 69  o set mapping si
9880: 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d 61  ze limit. The ma
9890: 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74  pping size limit
98a0: 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 20 74 6f   is.  ** used to
98b0: 20 6c 69 6d 69 74 20 74 68 65 20 61 67 67 72 65   limit the aggre
98c0: 67 61 74 65 20 73 69 7a 65 20 6f 66 20 61 6c 6c  gate size of all
98d0: 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64 20 72   memory mapped r
98e0: 65 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20 20  egions of the.  
98f0: 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
9900: 2e 20 49 66 20 74 68 69 73 20 70 61 72 61 6d 65  . If this parame
9910: 74 65 72 20 69 73 20 73 65 74 20 74 6f 20 7a 65  ter is set to ze
9920: 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20  ro, then memory 
9930: 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73 20  mapping.  ** is 
9940: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 2e  not used at all.
9950: 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69    If N is negati
9960: 76 65 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66  ve, then the def
9970: 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70 0a  ault memory map.
9980: 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65 72    ** limit deter
9990: 6d 69 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  mined by sqlite3
99a0: 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43  _config(SQLITE_C
99b0: 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 29  ONFIG_MMAP_SIZE)
99c0: 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54 68   is set..  ** Th
99d0: 65 20 70 61 72 61 6d 65 74 65 72 20 4e 20 69 73  e parameter N is
99e0: 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79 74   measured in byt
99f0: 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  es..  **.  ** Th
9a00: 69 73 20 76 61 6c 75 65 20 69 73 20 61 64 76 69  is value is advi
9a10: 73 6f 72 79 2e 20 20 54 68 65 20 75 6e 64 65 72  sory.  The under
9a20: 6c 79 69 6e 67 20 56 46 53 20 69 73 20 66 72 65  lying VFS is fre
9a30: 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70 0a  e to memory map.
9a40: 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20 6f    ** as little o
9a50: 72 20 61 73 20 6d 75 63 68 20 61 73 20 69 74 20  r as much as it 
9a60: 77 61 6e 74 73 2e 20 20 45 78 63 65 70 74 2c 20  wants.  Except, 
9a70: 69 66 20 4e 20 69 73 20 73 65 74 20 74 6f 20 30  if N is set to 0
9a80: 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 75   then the.  ** u
9a90: 70 70 65 72 20 6c 61 79 65 72 73 20 77 69 6c 6c  pper layers will
9aa0: 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 74 68   never invoke th
9ab0: 65 20 78 46 65 74 63 68 20 69 6e 74 65 72 66 61  e xFetch interfa
9ac0: 63 65 73 20 74 6f 20 74 68 65 20 56 46 53 2e 0a  ces to the VFS..
9ad0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
9ae0: 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b  Typ_MMAP_SIZE: {
9af0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  .    sqlite3_int
9b00: 36 34 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49 54  64 sz;.#if SQLIT
9b10: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e  E_MAX_MMAP_SIZE>
9b20: 30 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  0.    assert( sq
9b30: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
9b40: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
9b50: 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   );.    if( zRig
9b60: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  ht ){.      int 
9b70: 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ii;.      sqlite
9b80: 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
9b90: 52 69 67 68 74 2c 20 26 73 7a 29 3b 0a 20 20 20  Right, &sz);.   
9ba0: 20 20 20 69 66 28 20 73 7a 3c 30 20 29 20 73 7a     if( sz<0 ) sz
9bb0: 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c   = sqlite3Global
9bc0: 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20  Config.szMmap;. 
9bd0: 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e       if( pId2->n
9be0: 3d 3d 30 20 29 20 64 62 2d 3e 73 7a 4d 6d 61 70  ==0 ) db->szMmap
9bf0: 20 3d 20 73 7a 3b 0a 20 20 20 20 20 20 66 6f 72   = sz;.      for
9c00: 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69  (ii=db->nDb-1; i
9c10: 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20  i>=0; ii--){.   
9c20: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
9c30: 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d  [ii].pBt && (ii=
9c40: 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d  =iDb || pId2->n=
9c50: 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  =0) ){.         
9c60: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
9c70: 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d 3e 61 44  MmapLimit(db->aD
9c80: 62 5b 69 69 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a  b[ii].pBt, sz);.
9c90: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9ca0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 7a 20 3d  }.    }.    sz =
9cb0: 20 2d 31 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   -1;.    rc = sq
9cc0: 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
9cd0: 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49  ol(db, zDb, SQLI
9ce0: 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49  TE_FCNTL_MMAP_SI
9cf0: 5a 45 2c 20 26 73 7a 29 3b 0a 23 65 6c 73 65 0a  ZE, &sz);.#else.
9d00: 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20      sz = 0;.    
9d10: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
9d20: 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 72  #endif.    if( r
9d30: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
9d40: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
9d50: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6d  leInt(pParse, "m
9d60: 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a  map_size", sz);.
9d70: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
9d80: 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e  !=SQLITE_NOTFOUN
9d90: 44 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73  D ){.      pPars
9da0: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20  e->nErr++;.     
9db0: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63   pParse->rc = rc
9dc0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
9dd0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
9de0: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
9df0: 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41  store.  **   PRA
9e00: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  GMA temp_store =
9e10: 20 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f   "default"|"memo
9e20: 72 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a  ry"|"file".  **.
9e30: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
9e40: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
9e50: 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73  ue of the temp_s
9e60: 74 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  tore flag.  Chan
9e70: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f  ging.  ** the lo
9e80: 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e  cal value does n
9e90: 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20  ot make changes 
9ea0: 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  to the disk file
9eb0: 20 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74   and the default
9ec0: 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c  .  ** value will
9ed0: 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65   be restored the
9ee0: 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64   next time the d
9ef0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65  atabase is opene
9f00: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74  d..  **.  ** Not
9f10: 65 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73  e that it is pos
9f20: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69  sible for the li
9f30: 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69  brary compile-ti
9f40: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20  me options to.  
9f50: 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  ** override this
9f60: 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20   setting.  */.  
9f70: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
9f80: 50 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69  P_STORE: {.    i
9f90: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
9fa0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
9fb0: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 65 6d  Int(pParse, "tem
9fc0: 70 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65  p_store", db->te
9fd0: 6d 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d  mp_store);.    }
9fe0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e  else{.      chan
9ff0: 67 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50  geTempStorage(pP
a000: 61 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20  arse, zRight);. 
a010: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
a020: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
a030: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
a040: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
a050: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
a060: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
a070: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
a080: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
a090: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
a0a0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
a0b0: 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f   the temp_store_
a0c0: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
a0d0: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
a0e0: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
a0f0: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
a100: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
a110: 72 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  r temporary file
a120: 73 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20  s..  ** Setting 
a130: 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67  to a null string
a140: 20 72 65 76 65 72 74 73 20 74 6f 20 74 68 65 20   reverts to the 
a150: 64 65 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72  default temporar
a160: 79 20 64 69 72 65 63 74 6f 72 79 20 73 65 61 72  y directory sear
a170: 63 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70  ch..  ** If temp
a180: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory 
a190: 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e  is changed, then
a1a0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
a1b0: 74 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a  torage..  **.  *
a1c0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
a1d0: 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45  _TEMP_STORE_DIRE
a1e0: 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28  CTORY: {.    if(
a1f0: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
a200: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74 65    if( sqlite3_te
a210: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a  mp_directory ){.
a220: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a230: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
a240: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
a250: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a260: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
a270: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
a280: 20 20 20 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f      "temp_store_
a290: 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49  directory", SQLI
a2a0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
a2b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a2c0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
a2d0: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71  ng8, 0, 1, 0, sq
a2e0: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
a2f0: 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  tory, 0);.      
a300: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a310: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
a320: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
a330: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23    }.    }else{.#
a340: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a350: 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28  IT_WSD.      if(
a360: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
a370: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
a380: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
a390: 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e  te3OsAccess(db->
a3a0: 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51  pVfs, zRight, SQ
a3b0: 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44  LITE_ACCESS_READ
a3c0: 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20  WRITE, &res);.  
a3d0: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
a3e0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
a3f0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
a400: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
a410: 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72  Parse, "not a wr
a420: 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79  itable directory
a430: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  ");.          go
a440: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
a450: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
a460: 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54  .      if( SQLIT
a470: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a  E_TEMP_STORE==0.
a480: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
a490: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20  E_TEMP_STORE==1 
a4a0: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
a4b0: 65 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20  e<=1).       || 
a4c0: 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f  (SQLITE_TEMP_STO
a4d0: 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d  RE==2 && db->tem
a4e0: 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20  p_store==1).    
a4f0: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76    ){.        inv
a500: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
a510: 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ge(pParse);.    
a520: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
a530: 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74  3_free(sqlite3_t
a540: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  emp_directory);.
a550: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
a560: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  [0] ){.        s
a570: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
a580: 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  ctory = sqlite3_
a590: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52  mprintf("%s", zR
a5a0: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ight);.      }el
a5b0: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
a5c0: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
a5d0: 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ry = 0;.      }.
a5e0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
a5f0: 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20  _OMIT_WSD */.   
a600: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
a610: 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53  }..#if SQLITE_OS
a620: 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  _WIN.  /*.  **  
a630: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
a640: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
a650: 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f  *   PRAGMA data_
a660: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
a670: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
a680: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
a690: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
a6a0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
a6b0: 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f   the data_store_
a6c0: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
a6d0: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
a6e0: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
a6f0: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
a700: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
a710: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
a720: 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20   that.  ** were 
a730: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
a740: 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61   relative pathna
a750: 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20  me.  Setting to 
a760: 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65  a null string re
a770: 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68  verts.  ** to th
a780: 65 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61  e default databa
a790: 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68  se directory, wh
a7a0: 69 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65  ich for database
a7b0: 20 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64   files specified
a7c0: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c   with.  ** a rel
a7d0: 61 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20  ative path will 
a7e0: 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65  probably be base
a7f0: 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d on the current
a800: 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
a810: 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e  he.  ** process.
a820: 20 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20    Database file 
a830: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
a840: 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20  n absolute path 
a850: 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64  are not impacted
a860: 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65  .  ** by this se
a870: 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73  tting, regardles
a880: 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a  s of its value..
a890: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
a8a0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54   PragTyp_DATA_ST
a8b0: 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b  ORE_DIRECTORY: {
a8c0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
a8d0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
a8e0: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
a8f0: 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20  tory ){.        
a900: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
a910: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
a920: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a930: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
a940: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a   COLNAME_NAME, .
a950: 20 20 20 20 20 20 20 20 20 20 20 20 22 64 61 74              "dat
a960: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
a970: 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  y", SQLITE_STATI
a980: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
a990: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
a9a0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
a9b0: 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f 64 61  1, 0, sqlite3_da
a9c0: 74 61 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29  ta_directory, 0)
a9d0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
a9e0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
a9f0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
aa00: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1);.      }.    
aa10: 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53  }else{.#ifndef S
aa20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
aa30: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
aa40: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  0] ){.        in
aa50: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72  t res;.        r
aa60: 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63  c = sqlite3OsAcc
aa70: 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52  ess(db->pVfs, zR
aa80: 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43  ight, SQLITE_ACC
aa90: 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26  ESS_READWRITE, &
aaa0: 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
aab0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
aac0: 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  || res==0 ){.   
aad0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
aae0: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
aaf0: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
ab00: 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20  irectory");.    
ab10: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
ab20: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d  a_out;.        }
ab30: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
ab40: 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69  qlite3_free(sqli
ab50: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
ab60: 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ry);.      if( z
ab70: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
ab80: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61      sqlite3_data
ab90: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c  _directory = sql
aba0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
abb0: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
abc0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
abd0: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
abe0: 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20  rectory = 0;.   
abf0: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
ac00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a  QLITE_OMIT_WSD *
ac10: 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  /.    }.    brea
ac20: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  k;.  }.#endif..#
ac30: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
ac40: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20  _LOCKING_STYLE. 
ac50: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
ac60: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
ac70: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a  k_proxy_file.  *
ac80: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
ac90: 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79  base.]lock_proxy
aca0: 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22  _file = ":auto:"
acb0: 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68  |"lock_file_path
acc0: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
acd0: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  rn or set the va
ace0: 6c 75 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f  lue of the lock_
acf0: 70 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e  proxy_file flag.
ad00: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
ad10: 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61  the value sets a
ad20: 20 73 70 65 63 69 66 69 63 20 66 69 6c 65 20 74   specific file t
ad30: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
ad40: 74 61 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f  tabase access lo
ad50: 63 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  cks..  **.  */. 
ad60: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
ad70: 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b  CK_PROXY_FILE: {
ad80: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
ad90: 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20   ){.      Pager 
ada0: 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65  *pPager = sqlite
adb0: 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d  3BtreePager(pDb-
adc0: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 63 68 61  >pBt);.      cha
add0: 72 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61  r *proxy_file_pa
ade0: 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20  th = NULL;.     
adf0: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70   sqlite3_file *p
ae00: 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61  File = sqlite3Pa
ae10: 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b  gerFile(pPager);
ae20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73  .      sqlite3Os
ae30: 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28  FileControlHint(
ae40: 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45  pFile, SQLITE_GE
ae50: 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c  T_LOCKPROXYFILE,
ae60: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70 72               &pr
ae80: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a  oxy_file_path);.
ae90: 20 20 20 20 20 20 0a 20 20 20 20 20 20 69 66 28        .      if(
aea0: 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68   proxy_file_path
aeb0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
aec0: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
aed0: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  s(v, 1);.       
aee0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
aef0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
af00: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20  NAME_NAME, .    
af10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af20: 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63 6b 5f            "lock_
af30: 70 72 6f 78 79 5f 66 69 6c 65 22 2c 20 53 51 4c  proxy_file", SQL
af40: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
af50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
af60: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
af70: 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70  ing8, 0, 1, 0, p
af80: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 2c 20  roxy_file_path, 
af90: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
afa0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
afb0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
afc0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
afd0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50    }else{.      P
afe0: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
aff0: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
b000: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
b010: 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a    sqlite3_file *
b020: 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50  pFile = sqlite3P
b030: 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29  agerFile(pPager)
b040: 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b  ;.      int res;
b050: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
b060: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
b070: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
b080: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
b090: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
b0a0: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
b0e0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
b0f0: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
b100: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
b110: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
b120: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
b130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b150: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  NULL);.      }. 
b160: 20 20 20 20 20 69 66 28 20 72 65 73 21 3d 53 51       if( res!=SQ
b170: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
b180: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
b190: 73 67 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c  sg(pParse, "fail
b1a0: 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70  ed to set lock p
b1b0: 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20  roxy file");.   
b1c0: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
b1d0: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
b1e0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
b1f0: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
b200: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
b210: 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20  NG_STYLE */     
b220: 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a   .    .  /*.  **
b230: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
b240: 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ase.]synchronous
b250: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
b260: 64 61 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72  database.]synchr
b270: 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52  onous=OFF|ON|NOR
b280: 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20  MAL|FULL.  **.  
b290: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
b2a0: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
b2b0: 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e   of the synchron
b2c0: 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ous flag.  Chang
b2d0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
b2e0: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
b2f0: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
b300: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
b310: 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  and the.  ** def
b320: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will 
b330: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
b340: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
b350: 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f  tabase is.  ** o
b360: 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  pened..  */.  ca
b370: 73 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48  se PragTyp_SYNCH
b380: 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66  RONOUS: {.    if
b390: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
b3a0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
b3b0: 6e 74 28 70 50 61 72 73 65 2c 20 22 73 79 6e 63  nt(pParse, "sync
b3c0: 68 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73  hronous", pDb->s
b3d0: 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a  afety_level-1);.
b3e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b3f0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
b400: 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
b410: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
b420: 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20  pParse, .       
b430: 20 20 20 20 20 22 53 61 66 65 74 79 20 6c 65 76       "Safety lev
b440: 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68  el may not be ch
b450: 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74  anged inside a t
b460: 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20  ransaction");.  
b470: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b480: 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c     pDb->safety_l
b490: 65 76 65 6c 20 3d 20 67 65 74 53 61 66 65 74 79  evel = getSafety
b4a0: 4c 65 76 65 6c 28 7a 52 69 67 68 74 2c 30 2c 31  Level(zRight,0,1
b4b0: 29 2b 31 3b 0a 20 20 20 20 20 20 20 20 73 65 74  )+1;.        set
b4c0: 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62  AllPagerFlags(db
b4d0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
b4e0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
b4f0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
b500: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
b510: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
b520: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
b530: 5f 50 52 41 47 4d 41 53 0a 20 20 63 61 73 65 20  _PRAGMAS.  case 
b540: 50 72 61 67 54 79 70 5f 46 4c 41 47 3a 20 7b 0a  PragTyp_FLAG: {.
b550: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
b560: 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  0 ){.      retur
b570: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
b580: 65 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  e, aPragmaNames[
b590: 6d 69 64 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20  mid].zName,.    
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5b0: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 61 50   (db->flags & aP
b5c0: 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e  ragmaNames[mid].
b5d0: 69 41 72 67 29 21 3d 30 20 29 3b 0a 20 20 20 20  iArg)!=0 );.    
b5e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
b5f0: 20 6d 61 73 6b 20 3d 20 61 50 72 61 67 6d 61 4e   mask = aPragmaN
b600: 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 3b 20  ames[mid].iArg; 
b610: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69     /* Mask of bi
b620: 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65  ts to set or cle
b630: 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ar. */.      if(
b640: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
b650: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
b660: 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70   Foreign key sup
b670: 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20  port may not be 
b680: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
b690: 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20  led while not.  
b6a0: 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f        ** in auto
b6b0: 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a  -commit mode.  *
b6c0: 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26  /.        mask &
b6d0: 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69  = ~(SQLITE_Forei
b6e0: 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d  gnKeys);.      }
b6f0: 0a 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ..      if( sqli
b700: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
b710: 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20  ight, 0) ){.    
b720: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
b730: 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c   mask;.      }el
b740: 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
b750: 66 6c 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a  flags &= ~mask;.
b760: 20 20 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b          if( mask
b770: 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  ==SQLITE_DeferFK
b780: 73 20 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s ) db->nDeferre
b790: 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20  dImmCons = 0;.  
b7a0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
b7b0: 4d 61 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67  Many of the flag
b7c0: 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20  -pragmas modify 
b7d0: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
b7e0: 65 64 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20  ed by the SQL . 
b7f0: 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72       ** compiler
b800: 20 28 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e   (eg. count_chan
b810: 67 65 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20  ges). So add an 
b820: 6f 70 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65  opcode to expire
b830: 20 61 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f   all.      ** co
b840: 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65  mpiled SQL state
b850: 6d 65 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69  ments after modi
b860: 66 79 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76  fying a pragma v
b870: 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  alue..      */. 
b880: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b890: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70  AddOp2(v, OP_Exp
b8a0: 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  ire, 0, 0);.    
b8b0: 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61    setAllPagerFla
b8c0: 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20  gs(db);.    }.  
b8d0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
b8e0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
b8f0: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20  IT_FLAG_PRAGMAS 
b900: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
b910: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
b920: 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a  RAGMAS.  /*.  **
b930: 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f     PRAGMA table_
b940: 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20  info(<table>).  
b950: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61  **.  ** Return a
b960: 20 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20   single row for 
b970: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  each column of t
b980: 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20  he named table. 
b990: 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20  The columns of. 
b9a0: 20 2a 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64   ** the returned
b9b0: 20 64 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20   data set are:. 
b9c0: 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20   **.  ** cid:   
b9d0: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28       Column id (
b9e0: 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65  numbered from le
b9f0: 66 74 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61  ft to right, sta
ba00: 72 74 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a  rting at 0).  **
ba10: 20 6e 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c   name:       Col
ba20: 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79  umn name.  ** ty
ba30: 70 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  pe:       Column
ba40: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
ba50: 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a  e..  ** notnull:
ba60: 20 20 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54      True if 'NOT
ba70: 20 4e 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f   NULL' is part o
ba80: 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61  f column declara
ba90: 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76  tion.  ** dflt_v
baa0: 61 6c 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c  alue: The defaul
bab0: 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  t value for the 
bac0: 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a  column, if any..
bad0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
bae0: 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20  Typ_TABLE_INFO: 
baf0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
bb00: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
bb10: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
bb20: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
bb30: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
bb40: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
bb50: 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20     int i, k;.   
bb60: 20 20 20 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d     int nHidden =
bb70: 20 30 3b 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e   0;.      Column
bb80: 20 2a 70 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e   *pCol;.      In
bb90: 64 65 78 20 2a 70 50 6b 20 3d 20 73 71 6c 69 74  dex *pPk = sqlit
bba0: 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
bbb0: 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20 73  x(pTab);.      s
bbc0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
bbd0: 43 6f 6c 73 28 76 2c 20 36 29 3b 0a 20 20 20 20  Cols(v, 6);.    
bbe0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
bbf0: 20 36 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   6;.      sqlite
bc00: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
bc10: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
bc20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bc30: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
bc40: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
bc50: 22 63 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54  "cid", SQLITE_ST
bc60: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
bc70: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
bc80: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
bc90: 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53  _NAME, "name", S
bca0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
bcb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bcc0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
bcd0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
bce0: 74 79 70 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  type", SQLITE_ST
bcf0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
bd00: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
bd10: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
bd20: 5f 4e 41 4d 45 2c 20 22 6e 6f 74 6e 75 6c 6c 22  _NAME, "notnull"
bd30: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
bd40: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
bd50: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
bd60: 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   4, COLNAME_NAME
bd70: 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20  , "dflt_value", 
bd80: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
bd90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bda0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35  eSetColName(v, 5
bdb0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
bdc0: 22 70 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  "pk", SQLITE_STA
bdd0: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
bde0: 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
bdf0: 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54  Names(pParse, pT
be00: 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  ab);.      for(i
be10: 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61  =0, pCol=pTab->a
be20: 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f  Col; i<pTab->nCo
be30: 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b  l; i++, pCol++){
be40: 0a 20 20 20 20 20 20 20 20 69 66 28 20 49 73 48  .        if( IsH
be50: 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c  iddenColumn(pCol
be60: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e  ) ){.          n
be70: 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20  Hidden++;.      
be80: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
be90: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
bea0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
beb0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
bec0: 20 69 2d 6e 48 69 64 64 65 6e 2c 20 31 29 3b 0a   i-nHidden, 1);.
bed0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bee0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
bef0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
bf00: 2c 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 30  , pCol->zName, 0
bf10: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
bf20: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
bf30: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
bf40: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
bf50: 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43  pCol->zType ? pC
bf60: 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c 20  ol->zType : "", 
bf70: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
bf80: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bf90: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 28 70 43   OP_Integer, (pC
bfa0: 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20  ol->notNull ? 1 
bfb0: 3a 20 30 29 2c 20 34 29 3b 0a 20 20 20 20 20 20  : 0), 4);.      
bfc0: 20 20 69 66 28 20 70 43 6f 6c 2d 3e 7a 44 66 6c    if( pCol->zDfl
bfd0: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  t ){.          s
bfe0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
bff0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
c000: 30 2c 20 35 2c 20 30 2c 20 28 63 68 61 72 2a 29  0, 5, 0, (char*)
c010: 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 20 30 29 3b  pCol->zDflt, 0);
c020: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
c030: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c040: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c050: 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 29 3b 0a 20  P_Null, 0, 5);. 
c060: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
c070: 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46   if( (pCol->colF
c080: 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50  lags & COLFLAG_P
c090: 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20  RIMKEY)==0 ){.  
c0a0: 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
c0b0: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
c0c0: 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20   pPk==0 ){.     
c0d0: 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20       k = 1;.    
c0e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c0f0: 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b 20 41 4c       for(k=1; AL
c100: 57 41 59 53 28 6b 3c 3d 70 54 61 62 2d 3e 6e 43  WAYS(k<=pTab->nC
c110: 6f 6c 29 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f  ol) && pPk->aiCo
c120: 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b  lumn[k-1]!=i; k+
c130: 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  +){}.        }. 
c140: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c150: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
c160: 6e 74 65 67 65 72 2c 20 6b 2c 20 36 29 3b 0a 20  nteger, k, 6);. 
c170: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c180: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
c190: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b  esultRow, 1, 6);
c1a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
c1b0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
c1c0: 61 73 65 20 50 72 61 67 54 79 70 5f 53 54 41 54  ase PragTyp_STAT
c1d0: 53 3a 20 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  S: {.    Index *
c1e0: 70 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45 6c  pIdx;.    HashEl
c1f0: 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73  em *i;.    v = s
c200: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
c210: 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  arse);.    sqlit
c220: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
c230: 28 76 2c 20 34 29 3b 0a 20 20 20 20 70 50 61 72  (v, 4);.    pPar
c240: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20  se->nMem = 4;.  
c250: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
c260: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
c270: 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69  , iDb);.    sqli
c280: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c290: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
c2a0: 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53  NAME, "table", S
c2b0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c2c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c2d0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
c2e0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e  OLNAME_NAME, "in
c2f0: 64 65 78 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  dex", SQLITE_STA
c300: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
c310: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
c320: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
c330: 4d 45 2c 20 22 77 69 64 74 68 22 2c 20 53 51 4c  ME, "width", SQL
c340: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c350: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
c360: 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c  olName(v, 3, COL
c370: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 68 65 69 67  NAME_NAME, "heig
c380: 68 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ht", SQLITE_STAT
c390: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 73  IC);.    for(i=s
c3a0: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
c3b0: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 74 62  pDb->pSchema->tb
c3c0: 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d 73 71 6c  lHash); i; i=sql
c3d0: 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b  iteHashNext(i)){
c3e0: 0a 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54  .      Table *pT
c3f0: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
c400: 61 74 61 28 69 29 3b 0a 20 20 20 20 20 20 73 71  ata(i);.      sq
c410: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c420: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c430: 2c 20 31 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e  , 1, 0, pTab->zN
c440: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  ame, 0);.      s
c450: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c460: 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20  (v, OP_Null, 0, 
c470: 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2);.      sqlite
c480: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c490: 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20  P_Integer,.     
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4b0: 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74        (int)sqlit
c4c0: 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54  e3LogEstToInt(pT
c4d0: 61 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 20 33  ab->szTabRow), 3
c4e0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c4f0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c500: 5f 49 6e 74 65 67 65 72 2c 20 0a 20 20 20 20 20  _Integer, .     
c510: 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65       (int)sqlite
c520: 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54 61  3LogEstToInt(pTa
c530: 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74 29 2c 20  b->nRowLogEst), 
c540: 34 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  4);.      sqlite
c550: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c560: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
c570: 34 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49  4);.      for(pI
c580: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
c590: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
c5a0: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20  ->pNext){.      
c5b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c5c0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
c5d0: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64 78  8, 0, 2, 0, pIdx
c5e0: 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ->zName, 0);.   
c5f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c600: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c610: 65 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  eger,.          
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c630: 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c     (int)sqlite3L
c640: 6f 67 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d  ogEstToInt(pIdx-
c650: 3e 73 7a 49 64 78 52 6f 77 29 2c 20 33 29 3b 0a  >szIdxRow), 3);.
c660: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c670: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c680: 49 6e 74 65 67 65 72 2c 20 0a 20 20 20 20 20 20  Integer, .      
c690: 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74        (int)sqlit
c6a0: 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 49  e3LogEstToInt(pI
c6b0: 64 78 2d 3e 61 69 52 6f 77 4c 6f 67 45 73 74 5b  dx->aiRowLogEst[
c6c0: 30 5d 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 20  0]), 4);.       
c6d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c6e0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
c6f0: 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20  ow, 1, 4);.     
c700: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
c710: 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72  reak;..  case Pr
c720: 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f  agTyp_INDEX_INFO
c730: 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
c740: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
c750: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
c760: 3b 0a 20 20 20 20 70 49 64 78 20 3d 20 73 71 6c  ;.    pIdx = sql
c770: 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62  ite3FindIndex(db
c780: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
c790: 20 20 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a      if( pIdx ){.
c7a0: 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20        int i;.   
c7b0: 20 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e     pTab = pIdx->
c7c0: 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71  pTable;.      sq
c7d0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
c7e0: 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 20  ols(v, 3);.     
c7f0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
c800: 33 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  3;.      sqlite3
c810: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
c820: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
c830: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c840: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
c850: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
c860: 73 65 71 6e 6f 22 2c 20 53 51 4c 49 54 45 5f 53  seqno", SQLITE_S
c870: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
c880: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
c890: 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
c8a0: 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20 53  E_NAME, "cid", S
c8b0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c8c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c8d0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
c8e0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
c8f0: 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  name", SQLITE_ST
c900: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 66 6f 72  ATIC);.      for
c910: 28 69 3d 30 3b 20 69 3c 70 49 64 78 2d 3e 6e 4b  (i=0; i<pIdx->nK
c920: 65 79 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  eyCol; i++){.   
c930: 20 20 20 20 20 69 31 36 20 63 6e 75 6d 20 3d 20       i16 cnum = 
c940: 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69  pIdx->aiColumn[i
c950: 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ];.        sqlit
c960: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c970: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31  OP_Integer, i, 1
c980: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c990: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c9a0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 63 6e 75 6d  OP_Integer, cnum
c9b0: 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 61 73  , 2);.        as
c9c0: 73 65 72 74 28 20 70 54 61 62 2d 3e 6e 43 6f 6c  sert( pTab->nCol
c9d0: 3e 63 6e 75 6d 20 29 3b 0a 20 20 20 20 20 20 20  >cnum );.       
c9e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c9f0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
ca00: 2c 20 30 2c 20 33 2c 20 30 2c 20 70 54 61 62 2d  , 0, 3, 0, pTab-
ca10: 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d  >aCol[cnum].zNam
ca20: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  e, 0);.        s
ca30: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ca40: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
ca50: 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 7d  , 1, 3);.      }
ca60: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
ca70: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
ca80: 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20  Typ_INDEX_LIST: 
ca90: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
caa0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20    Index *pIdx;. 
cab0: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
cac0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70      int i;.    p
cad0: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
cae0: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
caf0: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
cb00: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76   pTab ){.      v
cb10: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
cb20: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
cb30: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
cb40: 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20  umCols(v, 3);.  
cb50: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
cb60: 20 3d 20 33 3b 0a 20 20 20 20 20 20 73 71 6c 69   = 3;.      sqli
cb70: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
cb80: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
cb90: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
cba0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
cbb0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
cbc0: 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f  , "seq", SQLITE_
cbd0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
cbe0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
cbf0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
cc00: 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c  ME_NAME, "name",
cc10: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
cc20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
cc30: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
cc40: 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  2, COLNAME_NAME,
cc50: 20 22 75 6e 69 71 75 65 22 2c 20 53 51 4c 49 54   "unique", SQLIT
cc60: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
cc70: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
cc80: 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49 64  pIndex, i=0; pId
cc90: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
cca0: 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ext, i++){.     
ccb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ccc0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
ccd0: 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20  er, i, 1);.     
cce0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ccf0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
cd00: 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64  g8, 0, 2, 0, pId
cd10: 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  x->zName, 0);.  
cd20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cd30: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
cd40: 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 6f 6e 45  teger, pIdx->onE
cd50: 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 2c 20 33  rror!=OE_None, 3
cd60: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
cd70: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
cd80: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
cd90: 20 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   3);.      }.   
cda0: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
cdb0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
cdc0: 44 41 54 41 42 41 53 45 5f 4c 49 53 54 3a 20 7b  DATABASE_LIST: {
cdd0: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
cde0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
cdf0: 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20  mCols(v, 3);.   
ce00: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
ce10: 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  3;.    sqlite3Vd
ce20: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
ce30: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
ce40: 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53   "seq", SQLITE_S
ce50: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
ce60: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
ce70: 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
ce80: 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51  NAME, "name", SQ
ce90: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
cea0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
ceb0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f  ColName(v, 2, CO
cec0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 69 6c  LNAME_NAME, "fil
ced0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
cee0: 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  C);.    for(i=0;
cef0: 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
cf00: 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e  {.      if( db->
cf10: 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20  aDb[i].pBt==0 ) 
cf20: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
cf30: 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b  assert( db->aDb[
cf40: 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20  i].zName!=0 );. 
cf50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cf60: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
cf70: 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20  eger, i, 1);.   
cf80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cf90: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
cfa0: 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 64 62 2d  g8, 0, 2, 0, db-
cfb0: 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 30  >aDb[i].zName, 0
cfc0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
cfd0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
cfe0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
cff0: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 73 71  0,.           sq
d000: 6c 69 74 65 33 42 74 72 65 65 47 65 74 46 69 6c  lite3BtreeGetFil
d010: 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d  ename(db->aDb[i]
d020: 2e 70 42 74 29 2c 20 30 29 3b 0a 20 20 20 20 20  .pBt), 0);.     
d030: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d040: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
d050: 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d  ow, 1, 3);.    }
d060: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
d070: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f   case PragTyp_CO
d080: 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a  LLATION_LIST: {.
d090: 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20      int i = 0;. 
d0a0: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a     HashElem *p;.
d0b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d0c0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b  etNumCols(v, 2);
d0d0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
d0e0: 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74  m = 2;.    sqlit
d0f0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d100: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
d110: 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49  AME, "seq", SQLI
d120: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d130: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d140: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
d150: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
d160: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d170: 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73 71 6c 69  ;.    for(p=sqli
d180: 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d  teHashFirst(&db-
d190: 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b 20 70  >aCollSeq); p; p
d1a0: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
d1b0: 70 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c 6c 53  p)){.      CollS
d1c0: 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c  eq *pColl = (Col
d1d0: 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61 73  lSeq *)sqliteHas
d1e0: 68 44 61 74 61 28 70 29 3b 0a 20 20 20 20 20 20  hData(p);.      
d1f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d200: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
d210: 20 69 2b 2b 2c 20 31 29 3b 0a 20 20 20 20 20 20   i++, 1);.      
d220: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d230: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
d240: 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 6c 2d   0, 2, 0, pColl-
d250: 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  >zName, 0);.    
d260: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d270: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
d280: 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20  Row, 1, 2);.    
d290: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
d2a0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
d2b0: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47  OMIT_SCHEMA_PRAG
d2c0: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
d2d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
d2e0: 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20 50  IGN_KEY.  case P
d2f0: 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b  ragTyp_FOREIGN_K
d300: 45 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69  EY_LIST: if( zRi
d310: 67 68 74 20 29 7b 0a 20 20 20 20 46 4b 65 79 20  ght ){.    FKey 
d320: 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20  *pFK;.    Table 
d330: 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20  *pTab;.    pTab 
d340: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
d350: 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  le(db, zRight, z
d360: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61  Db);.    if( pTa
d370: 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73  b ){.      v = s
d380: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
d390: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70 46 4b  arse);.      pFK
d3a0: 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a   = pTab->pFKey;.
d3b0: 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 7b        if( pFK ){
d3c0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d  .        int i =
d3d0: 20 30 3b 20 0a 20 20 20 20 20 20 20 20 73 71 6c   0; .        sql
d3e0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
d3f0: 6c 73 28 76 2c 20 38 29 3b 0a 20 20 20 20 20 20  ls(v, 8);.      
d400: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
d410: 20 38 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   8;.        sqli
d420: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
d430: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
d440: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d450: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d460: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
d470: 4d 45 2c 20 22 69 64 22 2c 20 53 51 4c 49 54 45  ME, "id", SQLITE
d480: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
d490: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
d4a0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
d4b0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71  LNAME_NAME, "seq
d4c0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d4d0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
d4e0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d4f0: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
d500: 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51  AME, "table", SQ
d510: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
d520: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d530: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33  eSetColName(v, 3
d540: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
d550: 22 66 72 6f 6d 22 2c 20 53 51 4c 49 54 45 5f 53  "from", SQLITE_S
d560: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
d570: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d580: 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e  lName(v, 4, COLN
d590: 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 6f 22 2c 20  AME_NAME, "to", 
d5a0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
d5b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d5c0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
d5d0: 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   5, COLNAME_NAME
d5e0: 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22 2c 20 53  , "on_update", S
d5f0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
d600: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d610: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
d620: 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  6, COLNAME_NAME,
d630: 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c 20 53 51   "on_delete", SQ
d640: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
d650: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d660: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 37  eSetColName(v, 7
d670: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
d680: 22 6d 61 74 63 68 22 2c 20 53 51 4c 49 54 45 5f  "match", SQLITE_
d690: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
d6a0: 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a 20 20 20   while(pFK){.   
d6b0: 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20         int j;.  
d6c0: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b          for(j=0;
d6d0: 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b   j<pFK->nCol; j+
d6e0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
d6f0: 63 68 61 72 20 2a 7a 43 6f 6c 20 3d 20 70 46 4b  char *zCol = pFK
d700: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 3b 0a  ->aCol[j].zCol;.
d710: 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72              char
d720: 20 2a 7a 4f 6e 44 65 6c 65 74 65 20 3d 20 28 63   *zOnDelete = (c
d730: 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65  har *)actionName
d740: 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d  (pFK->aAction[0]
d750: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  );.            c
d760: 68 61 72 20 2a 7a 4f 6e 55 70 64 61 74 65 20 3d  har *zOnUpdate =
d770: 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e   (char *)actionN
d780: 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e  ame(pFK->aAction
d790: 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [1]);.          
d7a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d7b0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
d7c0: 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20  r, i, 1);.      
d7d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d7e0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
d7f0: 74 65 67 65 72 2c 20 6a 2c 20 32 29 3b 0a 20 20  teger, j, 2);.  
d800: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d810: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
d820: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
d830: 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 30 29   0, pFK->zTo, 0)
d840: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d850: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
d860: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
d870: 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 4, 0,.        
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d890: 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c        pTab->aCol
d8a0: 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46  [pFK->aCol[j].iF
d8b0: 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  rom].zName, 0);.
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d8d0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
d8e0: 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53 74 72 69 6e   zCol ? OP_Strin
d8f0: 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c  g8 : OP_Null, 0,
d900: 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c 20 30 29 3b   5, 0, zCol, 0);
d910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d920: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
d930: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
d940: 20 36 2c 20 30 2c 20 7a 4f 6e 55 70 64 61 74 65   6, 0, zOnUpdate
d950: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
d960: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d970: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
d980: 38 2c 20 30 2c 20 37 2c 20 30 2c 20 7a 4f 6e 44  8, 0, 7, 0, zOnD
d990: 65 6c 65 74 65 2c 20 30 29 3b 0a 20 20 20 20 20  elete, 0);.     
d9a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d9b0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
d9c0: 74 72 69 6e 67 38 2c 20 30 2c 20 38 2c 20 30 2c  tring8, 0, 8, 0,
d9d0: 20 22 4e 4f 4e 45 22 2c 20 30 29 3b 0a 20 20 20   "NONE", 0);.   
d9e0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d9f0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
da00: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 38  _ResultRow, 1, 8
da10: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
da20: 20 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20           ++i;.  
da30: 20 20 20 20 20 20 20 20 70 46 4b 20 3d 20 70 46          pFK = pF
da40: 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a 20 20  K->pNextFrom;.  
da50: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
da60: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
da70: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  k;.#endif /* !de
da80: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
da90: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a  T_FOREIGN_KEY) *
daa0: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
dab0: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
dac0: 45 59 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  EY.#ifndef SQLIT
dad0: 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
dae0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4f   case PragTyp_FO
daf0: 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 3a  REIGN_KEY_CHECK:
db00: 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46 4b   {.    FKey *pFK
db10: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
db20: 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63   A foreign key c
db30: 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 20  onstraint */.   
db40: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
db50: 20 20 20 20 20 20 20 20 2f 2a 20 43 68 69 6c 64          /* Child
db60: 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 20 22   table contain "
db70: 52 45 46 45 52 45 4e 43 45 53 22 20 6b 65 79 77  REFERENCES" keyw
db80: 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  ord */.    Table
db90: 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20 20 20   *pParent;      
dba0: 20 20 2f 2a 20 50 61 72 65 6e 74 20 74 61 62 6c    /* Parent tabl
dbb0: 65 20 74 68 61 74 20 63 68 69 6c 64 20 70 6f 69  e that child poi
dbc0: 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20 20 49 6e  nts to */.    In
dbd0: 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20 20  dex *pIdx;      
dbe0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e       /* Index in
dbf0: 20 74 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c   the parent tabl
dc00: 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20  e */.    int i; 
dc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc20: 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a  /* Loop counter:
dc30: 20 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 6e 75    Foreign key nu
dc40: 6d 62 65 72 20 66 6f 72 20 70 54 61 62 20 2a 2f  mber for pTab */
dc50: 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  .    int j;     
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
dc70: 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 69  oop counter:  Fi
dc80: 65 6c 64 20 6f 66 20 74 68 65 20 66 6f 72 65 69  eld of the forei
dc90: 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20 20 48 61  gn key */.    Ha
dca0: 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20 20 20 20  shElem *k;      
dcb0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
dcc0: 6e 74 65 72 3a 20 20 4e 65 78 74 20 74 61 62 6c  nter:  Next tabl
dcd0: 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20  e in schema */. 
dce0: 20 20 20 69 6e 74 20 78 3b 20 20 20 20 20 20 20     int x;       
dcf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73            /* res
dd00: 75 6c 74 20 76 61 72 69 61 62 6c 65 20 2a 2f 0a  ult variable */.
dd10: 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c      int regResul
dd20: 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 33 20  t;         /* 3 
dd30: 72 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c  registers to hol
dd40: 64 20 61 20 72 65 73 75 6c 74 20 72 6f 77 20 2a  d a result row *
dd50: 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 4b 65 79  /.    int regKey
dd60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
dd70: 52 65 67 69 73 74 65 72 20 74 6f 20 68 6f 6c 64  Register to hold
dd80: 20 6b 65 79 20 66 6f 72 20 63 68 65 63 6b 69 6e   key for checkin
dd90: 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20 20 20 20  g the FK */.    
dda0: 69 6e 74 20 72 65 67 52 6f 77 3b 20 20 20 20 20  int regRow;     
ddb0: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
ddc0: 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 6f  ers to hold a ro
ddd0: 77 20 66 72 6f 6d 20 70 54 61 62 20 2a 2f 0a 20  w from pTab */. 
dde0: 20 20 20 69 6e 74 20 61 64 64 72 54 6f 70 3b 20     int addrTop; 
ddf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 70            /* Top
de00: 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68 65 63 6b   of a loop check
de10: 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  ing foreign keys
de20: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72   */.    int addr
de30: 4f 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Ok;            /
de40: 2a 20 4a 75 6d 70 20 68 65 72 65 20 69 66 20 74  * Jump here if t
de50: 68 65 20 6b 65 79 20 69 73 20 4f 4b 20 2a 2f 0a  he key is OK */.
de60: 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 73 3b      int *aiCols;
de70: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 68             /* ch
de80: 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 20 63 6f  ild to parent co
de90: 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20 2a 2f 0a  lumn mapping */.
dea0: 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74 20 3d  .    regResult =
deb0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b   pParse->nMem+1;
dec0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
ded0: 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b  m += 4;.    regK
dee0: 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  ey = ++pParse->n
def0: 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77 20  Mem;.    regRow 
df00: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
df10: 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65  ;.    v = sqlite
df20: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
df30: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
df40: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34  eSetNumCols(v, 4
df50: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
df60: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
df70: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
df80: 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45   "table", SQLITE
df90: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
dfa0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
dfb0: 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
dfc0: 45 5f 4e 41 4d 45 2c 20 22 72 6f 77 69 64 22 2c  E_NAME, "rowid",
dfd0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
dfe0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
dff0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
e000: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
e010: 70 61 72 65 6e 74 22 2c 20 53 51 4c 49 54 45 5f  parent", SQLITE_
e020: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
e030: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
e040: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
e050: 5f 4e 41 4d 45 2c 20 22 66 6b 69 64 22 2c 20 53  _NAME, "fkid", S
e060: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
e070: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
e080: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
e090: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 6b 20 3d  e, iDb);.    k =
e0a0: 20 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74   sqliteHashFirst
e0b0: 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  (&db->aDb[iDb].p
e0c0: 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29  Schema->tblHash)
e0d0: 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 6b 20 29  ;.    while( k )
e0e0: 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  {.      if( zRig
e0f0: 68 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54  ht ){.        pT
e100: 61 62 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61  ab = sqlite3Loca
e110: 74 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  teTable(pParse, 
e120: 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b  0, zRight, zDb);
e130: 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a  .        k = 0;.
e140: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
e150: 20 20 20 20 20 70 54 61 62 20 3d 20 28 54 61 62       pTab = (Tab
e160: 6c 65 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  le*)sqliteHashDa
e170: 74 61 28 6b 29 3b 0a 20 20 20 20 20 20 20 20 6b  ta(k);.        k
e180: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 4e 65 78   = sqliteHashNex
e190: 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  t(k);.      }.  
e1a0: 20 20 20 20 69 66 28 20 70 54 61 62 3d 3d 30 20      if( pTab==0 
e1b0: 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65 79 3d 3d  || pTab->pFKey==
e1c0: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
e1d0: 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65      sqlite3Table
e1e0: 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62  Lock(pParse, iDb
e1f0: 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 30 2c  , pTab->tnum, 0,
e200: 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20   pTab->zName);. 
e210: 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 6e       if( pTab->n
e220: 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50 61 72 73  Col+regRow>pPars
e230: 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61 72 73 65  e->nMem ) pParse
e240: 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62 2d 3e 6e  ->nMem = pTab->n
e250: 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b 0a 20 20  Col + regRow;.  
e260: 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54      sqlite3OpenT
e270: 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20  able(pParse, 0, 
e280: 69 44 62 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70  iDb, pTab, OP_Op
e290: 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20 73  enRead);.      s
e2a0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
e2b0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
e2c0: 30 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 30 2c  0, regResult, 0,
e2d0: 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pTab->zName,.  
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2f0: 20 20 20 20 20 20 50 34 5f 54 52 41 4e 53 49 45        P4_TRANSIE
e300: 4e 54 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  NT);.      for(i
e310: 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46  =1, pFK=pTab->pF
e320: 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70  Key; pFK; i++, p
e330: 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f  FK=pFK->pNextFro
e340: 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72  m){.        pPar
e350: 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  ent = sqlite3Fin
e360: 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e  dTable(db, pFK->
e370: 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20  zTo, zDb);.     
e380: 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 3d 3d     if( pParent==
e390: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
e3a0: 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a        pIdx = 0;.
e3b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 54          sqlite3T
e3c0: 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c  ableLock(pParse,
e3d0: 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e 74   iDb, pParent->t
e3e0: 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74 2d  num, 0, pParent-
e3f0: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20  >zName);.       
e400: 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f   x = sqlite3FkLo
e410: 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73 65  cateIndex(pParse
e420: 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20  , pParent, pFK, 
e430: 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20 20 20  &pIdx, 0);.     
e440: 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a 20     if( x==0 ){. 
e450: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49 64           if( pId
e460: 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  x==0 ){.        
e470: 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54      sqlite3OpenT
e480: 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69 2c 20  able(pParse, i, 
e490: 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f 50  iDb, pParent, OP
e4a0: 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20  _OpenRead);.    
e4b0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
e4c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e4d0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
e4e0: 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20 70 49  _OpenRead, i, pI
e4f0: 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b 0a  dx->tnum, iDb);.
e500: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e510: 74 65 33 56 64 62 65 53 65 74 50 34 4b 65 79 49  te3VdbeSetP4KeyI
e520: 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49 64 78  nfo(pParse, pIdx
e530: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
e540: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
e550: 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
e560: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
e570: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e580: 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
e590: 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20 7c  pParse->nErr>0 |
e5a0: 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20 20 20  | pFK==0 );.    
e5b0: 20 20 69 66 28 20 70 46 4b 20 29 20 62 72 65 61    if( pFK ) brea
e5c0: 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50 61  k;.      if( pPa
e5d0: 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50  rse->nTab<i ) pP
e5e0: 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a  arse->nTab = i;.
e5f0: 20 20 20 20 20 20 61 64 64 72 54 6f 70 20 3d 20        addrTop = 
e600: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e610: 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20  1(v, OP_Rewind, 
e620: 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  0); VdbeCoverage
e630: 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  (v);.      for(i
e640: 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46  =1, pFK=pTab->pF
e650: 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70  Key; pFK; i++, p
e660: 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f  FK=pFK->pNextFro
e670: 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72  m){.        pPar
e680: 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  ent = sqlite3Fin
e690: 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e  dTable(db, pFK->
e6a0: 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20  zTo, zDb);.     
e6b0: 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20     pIdx = 0;.   
e6c0: 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20 30 3b       aiCols = 0;
e6d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
e6e0: 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  rent ){.        
e6f0: 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c    x = sqlite3FkL
e700: 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73  ocateIndex(pPars
e710: 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c  e, pParent, pFK,
e720: 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c 73 29   &pIdx, &aiCols)
e730: 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65  ;.          asse
e740: 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20  rt( x==0 );.    
e750: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 64      }.        ad
e760: 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64  drOk = sqlite3Vd
e770: 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
e780: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72          if( pPar
e790: 65 6e 74 20 26 26 20 70 49 64 78 3d 3d 30 20 29  ent && pIdx==0 )
e7a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  {.          int 
e7b0: 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c  iKey = pFK->aCol
e7c0: 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20  [0].iFrom;.     
e7d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 69 4b 65       assert( iKe
e7e0: 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70 54 61  y>=0 && iKey<pTa
e7f0: 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20  b->nCol );.     
e800: 20 20 20 20 20 69 66 28 20 69 4b 65 79 21 3d 70       if( iKey!=p
e810: 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20 20  Tab->iPKey ){.  
e820: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e830: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
e840: 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65  P_Column, 0, iKe
e850: 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20  y, regRow);.    
e860: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 43          sqlite3C
e870: 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76 2c 20  olumnDefault(v, 
e880: 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65 67 52  pTab, iKey, regR
e890: 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ow);.           
e8a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e8b0: 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c  p2(v, OP_IsNull,
e8c0: 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f 6b 29   regRow, addrOk)
e8d0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
e8e0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
e8f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
e900: 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74  (v, OP_MustBeInt
e910: 2c 20 72 65 67 52 6f 77 2c 20 0a 20 20 20 20 20  , regRow, .     
e920: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e930: 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72  3VdbeCurrentAddr
e940: 28 76 29 2b 33 29 3b 20 56 64 62 65 43 6f 76 65  (v)+3); VdbeCove
e950: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
e960: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
e970: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e980: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f  eAddOp2(v, OP_Ro
e990: 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b  wid, 0, regRow);
e9a0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
e9b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e9c0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4e  beAddOp3(v, OP_N
e9d0: 6f 74 45 78 69 73 74 73 2c 20 69 2c 20 30 2c 20  otExists, i, 0, 
e9e0: 72 65 67 52 6f 77 29 3b 20 56 64 62 65 43 6f 76  regRow); VdbeCov
e9f0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
ea00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ea10: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f  ddOp2(v, OP_Goto
ea20: 2c 20 30 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20  , 0, addrOk);.  
ea30: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ea40: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 73  dbeJumpHere(v, s
ea50: 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
ea60: 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20 20 20  tAddr(v)-2);.   
ea70: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
ea80: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a        for(j=0; j
ea90: 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29  <pFK->nCol; j++)
eaa0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
eab0: 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
eac0: 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c  ColumnOfTable(v,
ead0: 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20 20 20   pTab, 0,.      
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaf0: 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f 20 61        aiCols ? a
eb00: 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e  iCols[j] : pFK->
eb10: 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72  aCol[j].iFrom, r
eb20: 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20  egRow+j);.      
eb30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
eb40: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73  eAddOp2(v, OP_Is
eb50: 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20  Null, regRow+j, 
eb60: 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76  addrOk); VdbeCov
eb70: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
eb80: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
eb90: 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20  if( pParent ){. 
eba0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ebb0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
ebc0: 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72  OP_MakeRecord, r
ebd0: 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c  egRow, pFK->nCol
ebe0: 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20 20 20 20  , regKey,.      
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 49          sqlite3I
ec10: 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
ec20: 76 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43  v,pIdx), pFK->nC
ec30: 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ol);.           
ec40: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ec50: 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e  p4Int(v, OP_Foun
ec60: 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65  d, i, addrOk, re
ec70: 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  gKey, 0);.      
ec80: 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61        VdbeCovera
ec90: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
eca0: 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
ecb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ecc0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77  AddOp2(v, OP_Row
ecd0: 69 64 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74  id, 0, regResult
ece0: 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +1);.        sql
ecf0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
ed00: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
ed10: 20 72 65 67 52 65 73 75 6c 74 2b 32 2c 20 30 2c   regResult+2, 0,
ed20: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
ed30: 20 20 20 20 20 20 20 20 20 20 20 20 70 46 4b 2d              pFK-
ed40: 3e 7a 54 6f 2c 20 50 34 5f 54 52 41 4e 53 49 45  >zTo, P4_TRANSIE
ed50: 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  NT);.        sql
ed60: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ed70: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d  , OP_Integer, i-
ed80: 31 2c 20 72 65 67 52 65 73 75 6c 74 2b 33 29 3b  1, regResult+3);
ed90: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
eda0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
edb0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72 65 67 52  _ResultRow, regR
edc0: 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20 20 20  esult, 4);.     
edd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
ede0: 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61 64  solveLabel(v, ad
edf0: 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 73  drOk);.        s
ee00: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
ee10: 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20   aiCols);.      
ee20: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
ee30: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
ee40: 4e 65 78 74 2c 20 30 2c 20 61 64 64 72 54 6f 70  Next, 0, addrTop
ee50: 2b 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  +1); VdbeCoverag
ee60: 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  e(v);.      sqli
ee70: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
ee80: 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20 20 20  v, addrTop);.   
ee90: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
eea0: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
eeb0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
eec0: 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e 64 69  RIGGER) */.#endi
eed0: 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
eee0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
eef0: 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64  N_KEY) */..#ifnd
ef00: 65 66 20 4e 44 45 42 55 47 0a 20 20 63 61 73 65  ef NDEBUG.  case
ef10: 20 50 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f   PragTyp_PARSER_
ef20: 54 52 41 43 45 3a 20 7b 0a 20 20 20 20 69 66 28  TRACE: {.    if(
ef30: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
ef40: 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74 42   if( sqlite3GetB
ef50: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
ef60: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
ef70: 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
ef80: 73 74 64 65 72 72 2c 20 22 70 61 72 73 65 72 3a  stderr, "parser:
ef90: 20 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65   ");.      }else
efa0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
efb0: 33 50 61 72 73 65 72 54 72 61 63 65 28 30 2c 20  3ParserTrace(0, 
efc0: 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  0);.      }.    
efd0: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
efe0: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65 69 6e  endif..  /* Rein
eff0: 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45 20 61  stall the LIKE a
f000: 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69 6f 6e  nd GLOB function
f010: 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e 74 20  s.  The variant 
f020: 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75 73 65  of LIKE.  ** use
f030: 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65 20 73  d will be case s
f040: 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f 74 20  ensitive or not 
f050: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  depending on the
f060: 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   RHS..  */.  cas
f070: 65 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f 53  e PragTyp_CASE_S
f080: 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a 20 7b  ENSITIVE_LIKE: {
f090: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
f0a0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
f0b0: 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
f0c0: 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69 74 65  tions(db, sqlite
f0d0: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67  3GetBoolean(zRig
f0e0: 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d 0a 20  ht, 0));.    }. 
f0f0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66   }.  break;..#if
f100: 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 54 45  ndef SQLITE_INTE
f110: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
f120: 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 53  R_MAX.# define S
f130: 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f  QLITE_INTEGRITY_
f140: 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20  CHECK_ERROR_MAX 
f150: 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  100.#endif..#ifn
f160: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
f170: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a  INTEGRITY_CHECK.
f180: 20 20 2f 2a 20 50 72 61 67 6d 61 20 22 71 75 69    /* Pragma "qui
f190: 63 6b 5f 63 68 65 63 6b 22 20 69 73 20 72 65 64  ck_check" is red
f1a0: 75 63 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20  uced version of 
f1b0: 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f  .  ** integrity_
f1c0: 63 68 65 63 6b 20 64 65 73 69 67 6e 65 64 20 74  check designed t
f1d0: 6f 20 64 65 74 65 63 74 20 6d 6f 73 74 20 64 61  o detect most da
f1e0: 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
f1f0: 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d  n.  ** without m
f200: 6f 73 74 20 6f 66 20 74 68 65 20 6f 76 65 72 68  ost of the overh
f210: 65 61 64 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e  ead of a full in
f220: 74 65 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20  tegrity-check.. 
f230: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
f240: 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  yp_INTEGRITY_CHE
f250: 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c  CK: {.    int i,
f260: 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72 72 3b   j, addr, mxErr;
f270: 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20 74 68  ..    /* Code th
f280: 61 74 20 61 70 70 65 61 72 73 20 61 74 20 74 68  at appears at th
f290: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 74  e end of the int
f2a0: 65 67 72 69 74 79 20 63 68 65 63 6b 2e 20 20 49  egrity check.  I
f2b0: 66 20 6e 6f 20 65 72 72 6f 72 0a 20 20 20 20 2a  f no error.    *
f2c0: 2a 20 6d 65 73 73 61 67 65 73 20 68 61 76 65 20  * messages have 
f2d0: 62 65 65 6e 20 67 65 6e 65 72 61 74 65 64 2c 20  been generated, 
f2e0: 6f 75 74 70 75 74 20 4f 4b 2e 20 20 4f 74 68 65  output OK.  Othe
f2f0: 72 77 69 73 65 20 6f 75 74 70 75 74 20 74 68 65  rwise output the
f300: 0a 20 20 20 20 2a 2a 20 65 72 72 6f 72 20 6d 65  .    ** error me
f310: 73 73 61 67 65 0a 20 20 20 20 2a 2f 0a 20 20 20  ssage.    */.   
f320: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
f330: 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46  t iLn = VDBE_OFF
f340: 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20  SET_LINENO(2);. 
f350: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
f360: 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f  VdbeOpList endCo
f370: 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b  de[] = {.      {
f380: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20 20   OP_AddImm,     
f390: 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d   1, 0,        0}
f3a0: 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
f3b0: 20 20 20 7b 20 4f 50 5f 49 66 4e 65 67 2c 20 20     { OP_IfNeg,  
f3c0: 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20       1, 0,      
f3d0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
f3e0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69  .      { OP_Stri
f3f0: 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20  ng8,     0, 3,  
f400: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
f410: 32 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  2 */.      { OP_
f420: 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20  ResultRow,   3, 
f430: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  1,        0},.  
f440: 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73    };..    int is
f450: 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33  Quick = (sqlite3
f460: 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d  Tolower(zLeft[0]
f470: 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a  )=='q');..    /*
f480: 20 49 66 20 74 68 65 20 50 52 41 47 4d 41 20 63   If the PRAGMA c
f490: 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68  ommand was of th
f4a0: 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c  e form "PRAGMA <
f4b0: 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68  db>.integrity_ch
f4c0: 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65  eck",.    ** the
f4d0: 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20  n iDb is set to 
f4e0: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
f4f0: 20 64 61 74 61 62 61 73 65 20 69 64 65 6e 74 69   database identi
f500: 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20  fied by <db>..  
f510: 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73    ** In this cas
f520: 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  e, the integrity
f530: 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62   of database iDb
f540: 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65   only is verifie
f550: 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20  d by.    ** the 
f560: 56 44 42 45 20 63 72 65 61 74 65 64 20 62 65 6c  VDBE created bel
f570: 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ow..    **.    *
f580: 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  * Otherwise, if 
f590: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  the command was 
f5a0: 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69  simply "PRAGMA i
f5b0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20  ntegrity_check" 
f5c0: 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47  (or.    ** "PRAG
f5d0: 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29  MA quick_check")
f5e0: 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65  , then iDb is se
f5f0: 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20  t to 0. In this 
f600: 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20  case, set iDb.  
f610: 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c    ** to -1 here,
f620: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
f630: 74 20 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c  t the VDBE shoul
f640: 64 20 76 65 72 69 66 79 20 74 68 65 20 69 6e 74  d verify the int
f650: 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  egrity.    ** of
f660: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
f670: 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20  tabases.  */.   
f680: 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
f690: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
f6a0: 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a  Db==0 || pId2->z
f6b0: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32   );.    if( pId2
f6c0: 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d  ->z==0 ) iDb = -
f6d0: 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  1;..    /* Initi
f6e0: 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20 70  alize the VDBE p
f6f0: 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50  rogram */.    pP
f700: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a  arse->nMem = 6;.
f710: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
f720: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
f730: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f740: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
f750: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
f760: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
f770: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
f780: 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68  ;..    /* Set th
f790: 65 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72 20  e maximum error 
f7a0: 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45  count */.    mxE
f7b0: 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rr = SQLITE_INTE
f7c0: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
f7d0: 52 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28 20 7a  R_MAX;.    if( z
f7e0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
f7f0: 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a  qlite3GetInt32(z
f800: 52 69 67 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a  Right, &mxErr);.
f810: 20 20 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c        if( mxErr<
f820: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78  =0 ){.        mx
f830: 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54  Err = SQLITE_INT
f840: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
f850: 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a  OR_MAX;.      }.
f860: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
f870: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
f880: 50 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45 72 72  P_Integer, mxErr
f890: 2c 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d  , 1);  /* reg[1]
f8a0: 20 68 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c 65   holds errors le
f8b0: 66 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f  ft */..    /* Do
f8c0: 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68   an integrity ch
f8d0: 65 63 6b 20 6f 6e 20 65 61 63 68 20 64 61 74 61  eck on each data
f8e0: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20  base file */.   
f8f0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
f900: 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nDb; i++){.     
f910: 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20   HashElem *x;.  
f920: 20 20 20 20 48 61 73 68 20 2a 70 54 62 6c 73 3b      Hash *pTbls;
f930: 0a 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d  .      int cnt =
f940: 20 30 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 4f   0;..      if( O
f950: 4d 49 54 5f 54 45 4d 50 44 42 20 26 26 20 69 3d  MIT_TEMPDB && i=
f960: 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =1 ) continue;. 
f970: 20 20 20 20 20 69 66 28 20 69 44 62 3e 3d 30 20       if( iDb>=0 
f980: 26 26 20 69 21 3d 69 44 62 20 29 20 63 6f 6e 74  && i!=iDb ) cont
f990: 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c  inue;..      sql
f9a0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
f9b0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b  hema(pParse, i);
f9c0: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
f9d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
f9e0: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
f9f0: 20 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75 74 20   /* Halt if out 
fa00: 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20  of errors */.   
fa10: 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28     VdbeCoverage(
fa20: 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  v);.      sqlite
fa30: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
fa40: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
fa50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fa60: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
fa70: 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20  );..      /* Do 
fa80: 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  an integrity che
fa90: 63 6b 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65  ck of the B-Tree
faa0: 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
fab0: 2a 2a 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c  ** Begin by fill
fac0: 69 6e 67 20 72 65 67 69 73 74 65 72 73 20 32 2c  ing registers 2,
fad0: 20 33 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65   3, ... with the
fae0: 20 72 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62   root pages numb
faf0: 65 72 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72  ers.      ** for
fb00: 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20   all tables and 
fb10: 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20 64  indices in the d
fb20: 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a  atabase..      *
fb30: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
fb40: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
fb50: 65 78 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29  exHeld(db, i, 0)
fb60: 20 29 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20   );.      pTbls 
fb70: 3d 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53  = &db->aDb[i].pS
fb80: 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a  chema->tblHash;.
fb90: 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69        for(x=sqli
fba0: 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c  teHashFirst(pTbl
fbb0: 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48  s); x; x=sqliteH
fbc0: 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20  ashNext(x)){.   
fbd0: 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
fbe0: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
fbf0: 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e  a(x);.        In
fc00: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20  dex *pIdx;.     
fc10: 20 20 20 69 66 28 20 48 61 73 52 6f 77 69 64 28     if( HasRowid(
fc20: 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 20  pTab) ){.       
fc30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
fc40: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
fc50: 65 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20  er, pTab->tnum, 
fc60: 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  2+cnt);.        
fc70: 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76    VdbeComment((v
fc80: 2c 20 22 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e  , "%s", pTab->zN
fc90: 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ame));.         
fca0: 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20   cnt++;.        
fcb0: 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 49  }.        for(pI
fcc0: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
fcd0: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
fce0: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20  ->pNext){.      
fcf0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
fd00: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
fd10: 67 65 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c  ger, pIdx->tnum,
fd20: 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20   2+cnt);.       
fd30: 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28     VdbeComment((
fd40: 76 2c 20 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a  v, "%s", pIdx->z
fd50: 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20  Name));.        
fd60: 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20    cnt++;.       
fd70: 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20   }.      }..    
fd80: 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73    /* Make sure s
fd90: 75 66 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72  ufficient number
fda0: 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 68 61   of registers ha
fdb0: 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
fdc0: 64 20 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73  d */.      pPars
fdd0: 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70  e->nMem = MAX( p
fde0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74  Parse->nMem, cnt
fdf0: 2b 38 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  +8 );..      /* 
fe00: 44 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e  Do the b-tree in
fe10: 74 65 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a  tegrity checks *
fe20: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
fe30: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
fe40: 49 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20  IntegrityCk, 2, 
fe50: 63 6e 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  cnt, 1);.      s
fe60: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
fe70: 50 35 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20  P5(v, (u8)i);.  
fe80: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
fe90: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
fea0: 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56  OP_IsNull, 2); V
feb0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
fec0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fed0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
fee0: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a  ring8, 0, 3, 0,.
fef0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ff00: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a  MPrintf(db, "***
ff10: 20 69 6e 20 64 61 74 61 62 61 73 65 20 25 73 20   in database %s 
ff20: 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b  ***\n", db->aDb[
ff30: 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20  i].zName),.     
ff40: 20 20 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b      P4_DYNAMIC);
ff50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
ff60: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d  beAddOp3(v, OP_M
ff70: 6f 76 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20  ove, 2, 4, 1);. 
ff80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ff90: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
ffa0: 63 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20  cat, 4, 3, 2);. 
ffb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ffc0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
ffd0: 75 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20  ultRow, 2, 1);. 
ffe0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fff0: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
10000 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b  );..      /* Mak
10010 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69  e sure all the i
10020 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74  ndices are const
10030 72 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79  ructed correctly
10040 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
10050 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73   for(x=sqliteHas
10060 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78  hFirst(pTbls); x
10070 20 26 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d   && !isQuick; x=
10080 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78  sqliteHashNext(x
10090 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c  )){.        Tabl
100a0 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
100b0 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20  HashData(x);.   
100c0 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78       Index *pIdx
100d0 2c 20 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20 20  , *pPk;.        
100e0 49 6e 64 65 78 20 2a 70 50 72 69 6f 72 20 3d 20  Index *pPrior = 
100f0 30 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c  0;.        int l
10100 6f 6f 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20  oopTop;.        
10110 69 6e 74 20 69 44 61 74 61 43 75 72 2c 20 69 49  int iDataCur, iI
10120 64 78 43 75 72 3b 0a 20 20 20 20 20 20 20 20 69  dxCur;.        i
10130 6e 74 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20  nt r1 = -1;..   
10140 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70       if( pTab->p
10150 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69  Index==0 ) conti
10160 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70 50 6b  nue;.        pPk
10170 20 3d 20 48 61 73 52 6f 77 69 64 28 70 54 61 62   = HasRowid(pTab
10180 29 20 3f 20 30 20 3a 20 73 71 6c 69 74 65 33 50  ) ? 0 : sqlite3P
10190 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70  rimaryKeyIndex(p
101a0 54 61 62 29 3b 0a 20 20 20 20 20 20 20 20 61 64  Tab);.        ad
101b0 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
101c0 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50  AddOp1(v, OP_IfP
101d0 6f 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70  os, 1);  /* Stop
101e0 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72   if out of error
101f0 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62  s */.        Vdb
10200 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
10210 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10220 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61  eAddOp2(v, OP_Ha
10230 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  lt, 0, 0);.     
10240 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
10250 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
10260 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
10270 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 70  ExprCacheClear(p
10280 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20  Parse);.        
10290 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
102a0 41 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72 73  AndIndices(pPars
102b0 65 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e  e, pTab, OP_Open
102c0 52 65 61 64 2c 0a 20 20 20 20 20 20 20 20 20 20  Read,.          
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102e0 20 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20 26           1, 0, &
102f0 69 44 61 74 61 43 75 72 2c 20 26 69 49 64 78 43  iDataCur, &iIdxC
10300 75 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ur);.        sql
10310 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10320 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c  , OP_Integer, 0,
10330 20 37 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72   7);.        for
10340 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d  (j=0, pIdx=pTab-
10350 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
10360 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
10370 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
10380 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10390 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
103a0 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e  , 0, 8+j); /* in
103b0 64 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75 6e  dex entries coun
103c0 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  ter */.        }
103d0 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
103e0 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 70 50 61 72  >nMem = MAX(pPar
103f0 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a  se->nMem, 8+j);.
10400 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10410 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10420 52 65 77 69 6e 64 2c 20 69 44 61 74 61 43 75 72  Rewind, iDataCur
10430 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 0); VdbeCovera
10440 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 6c  ge(v);.        l
10450 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33  oopTop = sqlite3
10460 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
10470 5f 41 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a  _AddImm, 7, 1);.
10480 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
10490 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
104a0 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
104b0 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
104c0 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  {.          int 
104d0 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34  jmp2, jmp3, jmp4
104e0 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
104f0 70 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74  pPk==pIdx ) cont
10500 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
10510 72 31 20 3d 20 73 71 6c 69 74 65 33 47 65 6e 65  r1 = sqlite3Gene
10520 72 61 74 65 49 6e 64 65 78 4b 65 79 28 70 50 61  rateIndexKey(pPa
10530 72 73 65 2c 20 70 49 64 78 2c 20 69 44 61 74 61  rse, pIdx, iData
10540 43 75 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33  Cur, 0, 0, &jmp3
10550 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10570 20 20 20 20 20 20 20 20 20 70 50 72 69 6f 72 2c           pPrior,
10580 20 72 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20   r1);.          
10590 70 50 72 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20  pPrior = pIdx;. 
105a0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
105b0 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
105c0 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29  _AddImm, 8+j, 1)
105d0 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20  ;  /* increment 
105e0 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20  entry count */. 
105f0 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20           jmp2 = 
10600 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10610 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64  4Int(v, OP_Found
10620 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 30 2c 20  , iIdxCur+j, 0, 
10630 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r1,.            
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10650 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e            pIdx->
10660 6e 43 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f  nColumn); VdbeCo
10670 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
10680 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10690 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
106a0 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20  Imm, 1, -1); /* 
106b0 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20  Decrement error 
106c0 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20  limit */.       
106d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
106e0 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
106f0 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 22 72 6f  g8, 0, 3, 0, "ro
10700 77 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b  w ", P4_STATIC);
10710 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10720 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
10730 4f 50 5f 43 6f 6e 63 61 74 2c 20 37 2c 20 33 2c  OP_Concat, 7, 3,
10740 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
10750 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
10760 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
10770 30 2c 20 34 2c 20 30 2c 20 22 20 6d 69 73 73 69  0, 4, 0, " missi
10780 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 22 2c  ng from index ",
10790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 34 5f               P4_
107b0 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
107c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
107d0 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
107e0 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20  t, 4, 3, 3);.   
107f0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10800 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
10810 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c  tring8, 0, 4, 0,
10820 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34   pIdx->zName, P4
10830 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
10840 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10850 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
10860 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b  oncat, 4, 3, 3);
10870 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10880 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
10890 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c  OP_ResultRow, 3,
108a0 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a   1);.          j
108b0 6d 70 34 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp4 = sqlite3Vdb
108c0 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66  eAddOp1(v, OP_If
108d0 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76  Pos, 1); VdbeCov
108e0 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
108f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10900 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp0(v, OP_Halt
10910 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10920 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
10930 28 76 2c 20 6a 6d 70 34 29 3b 0a 20 20 20 20 20  (v, jmp4);.     
10940 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10950 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32  JumpHere(v, jmp2
10960 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10970 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49  ite3ResolvePartI
10980 64 78 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20  dxLabel(pParse, 
10990 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d  jmp3);.        }
109a0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
109b0 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
109c0 5f 4e 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c  _Next, iDataCur,
109d0 20 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43   loopTop); VdbeC
109e0 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
109f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
10a00 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54  umpHere(v, loopT
10a10 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53  op-1);.#ifndef S
10a20 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
10a30 43 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71  COUNT.        sq
10a40 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
10a50 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
10a60 2c 20 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20  , 2, 0, .       
10a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 77                "w
10a80 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
10a90 73 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34  s in index ", P4
10aa0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
10ab0 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
10ac0 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
10ad0 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
10ae0 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
10af0 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70        if( pPk==p
10b00 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  Idx ) continue;.
10b10 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d            addr =
10b20 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
10b30 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20  entAddr(v);.    
10b40 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10b50 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66  eAddOp2(v, OP_If
10b60 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b  Pos, 1, addr+2);
10b70 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
10b80 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10b90 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10ba0 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b   OP_Halt, 0, 0);
10bb0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10bc0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
10bd0 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75  OP_Count, iIdxCu
10be0 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  r+j, 3);.       
10bf0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10c00 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38  dOp3(v, OP_Eq, 8
10c10 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20  +j, addr+8, 3); 
10c20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
10c30 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10c40 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76  e3VdbeChangeP5(v
10c50 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  , SQLITE_NOTNULL
10c60 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10c70 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10c80 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
10c90 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  -1);.          s
10ca0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
10cb0 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
10cc0 30 2c 20 33 2c 20 30 2c 20 70 49 64 78 2d 3e 7a  0, 3, 0, pIdx->z
10cd0 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45  Name, P4_TRANSIE
10ce0 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  NT);.          s
10cf0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
10d00 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33  (v, OP_Concat, 3
10d10 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20 20  , 2, 7);.       
10d20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10d30 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
10d40 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20  tRow, 7, 1);.   
10d50 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a       }.#endif /*
10d60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
10d70 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20  EECOUNT */.     
10d80 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61 64   } .    }.    ad
10d90 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
10da0 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
10db0 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c  aySize(endCode),
10dc0 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a   endCode, iLn);.
10dd0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
10de0 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2c  hangeP2(v, addr,
10df0 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73 71   -mxErr);.    sq
10e00 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
10e10 65 28 76 2c 20 61 64 64 72 2b 31 29 3b 0a 20 20  e(v, addr+1);.  
10e20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
10e30 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 32 2c  ngeP4(v, addr+2,
10e40 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49 43   "ok", P4_STATIC
10e50 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
10e60 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
10e70 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
10e80 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65  CHECK */..#ifnde
10e90 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
10ea0 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  F16.  /*.  **   
10eb0 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a  PRAGMA encoding.
10ec0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e    **   PRAGMA en
10ed0 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22  coding = "utf-8"
10ee0 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31  |"utf-16"|"utf-1
10ef0 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a  6le"|"utf-16be".
10f00 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73    **.  ** In its
10f10 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69   first form, thi
10f20 73 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73  s pragma returns
10f30 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
10f40 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64   the main.  ** d
10f50 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
10f60 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
10f70 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20  initialized, it 
10f80 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e  is initialized n
10f90 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ow..  **.  ** Th
10fa0 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66  e second form of
10fb0 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20   this pragma is 
10fc0 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d  a no-op if the m
10fd0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
10fe0 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61  e.  ** has not a
10ff0 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74  lready been init
11000 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73  ialized. In this
11010 20 63 61 73 65 20 69 74 20 73 65 74 73 20 74 68   case it sets th
11020 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65  e default.  ** e
11030 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c  ncoding that wil
11040 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  l be used for th
11050 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
11060 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69  file if a new fi
11070 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74  le.  ** is creat
11080 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69  ed. If an existi
11090 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  ng main database
110a0 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c   file is opened,
110b0 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64   then the.  ** d
110c0 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f  efault text enco
110d0 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69  ding for the exi
110e0 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 69  sting database i
110f0 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20  s used..  ** .  
11100 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20  ** In all cases 
11110 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 63 72  new databases cr
11120 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
11130 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61  ATTACH command a
11140 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20  re.  ** created 
11150 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20  to use the same 
11160 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63  default text enc
11170 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69  oding as the mai
11180 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20  n database. If. 
11190 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74   ** the main dat
111a0 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65  abase has not be
111b0 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61  en initialized a
111c0 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68  nd/or created wh
111d0 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69  en ATTACH.  ** i
111e0 73 20 65 78 65 63 75 74 65 64 2c 20 74 68 69 73  s executed, this
111f0 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20   is done before 
11200 74 68 65 20 41 54 54 41 43 48 20 6f 70 65 72 61  the ATTACH opera
11210 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion..  **.  ** 
11220 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f  In the second fo
11230 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20 73  rm this pragma s
11240 65 74 73 20 74 68 65 20 74 65 78 74 20 65 6e 63  ets the text enc
11250 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  oding to be used
11260 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74   in.  ** new dat
11270 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65 61  abase files crea
11280 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 64  ted using this d
11290 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
112a0 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20  It is only.  ** 
112b0 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65  useful if invoke
112c0 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66  d immediately af
112d0 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ter the main dat
112e0 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63  abase i.  */.  c
112f0 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43 4f  ase PragTyp_ENCO
11300 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61 74  DING: {.    stat
11310 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
11320 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20  EncName {.      
11330 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20  char *zName;.   
11340 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d     u8 enc;.    }
11350 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a   encnames[] = {.
11360 20 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20        { "UTF8", 
11370 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20      SQLITE_UTF8 
11380 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
11390 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51  { "UTF-8",    SQ
113a0 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20  LITE_UTF8       
113b0 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
113c0 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20  element [1] */. 
113d0 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65       { "UTF-16le
113e0 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ", SQLITE_UTF16L
113f0 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73  E     },  /* Mus
11400 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d  t be element [2]
11410 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
11420 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55  -16be", SQLITE_U
11430 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f  TF16BE     },  /
11440 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e  * Must be elemen
11450 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b  t [3] */.      {
11460 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c   "UTF16le",  SQL
11470 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20  ITE_UTF16LE     
11480 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31  },.      { "UTF1
11490 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54  6be",  SQLITE_UT
114a0 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20  F16BE     },.   
114b0 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20     { "UTF-16",  
114c0 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
114d0 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45      }, /* SQLITE
114e0 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a  _UTF16NATIVE */.
114f0 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c        { "UTF16",
11500 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20      0           
11510 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c         }, /* SQL
11520 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
11530 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20  */.      { 0, 0 
11540 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e  }.    };.    con
11550 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d  st struct EncNam
11560 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28  e *pEnc;.    if(
11570 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f   !zRight ){    /
11580 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69  * "PRAGMA encodi
11590 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ng" */.      if(
115a0 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
115b0 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
115c0 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
115d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
115e0 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
115f0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11600 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
11610 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
11620 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53 51 4c   "encoding", SQL
11630 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
11640 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
11650 64 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp2(v, OP_Strin
11660 67 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 20  g8, 0, 1);.     
11670 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65   assert( encname
11680 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65  s[SQLITE_UTF8].e
11690 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
116a0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
116b0 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45   encnames[SQLITE
116c0 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53  _UTF16LE].enc==S
116d0 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b  QLITE_UTF16LE );
116e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
116f0 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55  ncnames[SQLITE_U
11700 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c  TF16BE].enc==SQL
11710 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20  ITE_UTF16BE );. 
11720 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11730 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20  ChangeP4(v, -1, 
11740 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61  encnames[ENC(pPa
11750 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c  rse->db)].zName,
11760 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
11770 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
11780 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
11790 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20  tRow, 1, 1);.   
117a0 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20   }else{         
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
117c0 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69  * "PRAGMA encodi
117d0 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20  ng = XXX" */.   
117e0 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67     /* Only chang
117f0 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73  e the value of s
11800 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65  qlite.enc if the
11810 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
11820 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a   is not.      **
11830 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66   initialized. If
11840 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
11850 73 65 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e  se exists, the n
11860 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61  ew sqlite.enc va
11870 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c  lue.      ** wil
11880 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  l be overwritten
11890 20 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   when the schema
118a0 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e   is next loaded.
118b0 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a   If it does not.
118c0 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79        ** already
118d0 20 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c   exists, it will
118e0 20 62 65 20 63 72 65 61 74 65 64 20 74 6f 20 75   be created to u
118f0 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64  se the new encod
11900 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20  ing value..     
11910 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20   */.      if( . 
11920 20 20 20 20 20 20 20 21 28 44 62 48 61 73 50 72         !(DbHasPr
11930 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42  operty(db, 0, DB
11940 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20  _SchemaLoaded)) 
11950 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48 61  || .        DbHa
11960 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c  sProperty(db, 0,
11970 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20   DB_Empty) .    
11980 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72    ){.        for
11990 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b  (pEnc=&encnames[
119a0 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b  0]; pEnc->zName;
119b0 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20   pEnc++){.      
119c0 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74      if( 0==sqlit
119d0 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
119e0 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29  , pEnc->zName) )
119f0 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 45 4e  {.            EN
11a00 43 28 70 50 61 72 73 65 2d 3e 64 62 29 20 3d 20  C(pParse->db) = 
11a10 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63  pEnc->enc ? pEnc
11a20 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55  ->enc : SQLITE_U
11a30 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20 20  TF16NATIVE;.    
11a40 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
11a50 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
11a60 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
11a70 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b   !pEnc->zName ){
11a80 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11a90 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
11aa0 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20  e, "unsupported 
11ab0 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a  encoding: %s", z
11ac0 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20  Right);.        
11ad0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
11ae0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
11af0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
11b00 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66  IT_UTF16 */..#if
11b10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
11b20 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f  _SCHEMA_VERSION_
11b30 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a  PRAGMAS.  /*.  *
11b40 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
11b50 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72  base.]schema_ver
11b60 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47  sion.  **   PRAG
11b70 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63  MA [database.]sc
11b80 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c  hema_version = <
11b90 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20  integer>.  **.  
11ba0 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
11bb0 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73  abase.]user_vers
11bc0 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ion.  **   PRAGM
11bd0 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65  A [database.]use
11be0 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  r_version = <int
11bf0 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
11c00 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
11c10 73 65 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75  se.]freelist_cou
11c20 6e 74 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  nt = <integer>. 
11c30 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
11c40 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70  A [database.]app
11c50 6c 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a  lication_id.  **
11c60 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
11c70 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e  ase.]application
11c80 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  _id = <integer>.
11c90 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72    **.  ** The pr
11ca0 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76 65  agma's schema_ve
11cb0 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76  rsion and user_v
11cc0 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64 20  ersion are used 
11cd0 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20 20  to set or get.  
11ce0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
11cf0 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
11d00 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72 73  on and user-vers
11d10 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ion, respectivel
11d20 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65  y. Both.  ** the
11d30 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
11d40 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65 72  and the user-ver
11d50 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74 20  sion are 32-bit 
11d60 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 0a  signed integers.
11d70 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74    ** stored in t
11d80 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
11d90 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  er..  **.  ** Th
11da0 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
11db0 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20  is usually only 
11dc0 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74 65  manipulated inte
11dd0 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
11de0 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63  . It.  ** is inc
11df0 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c 69  remented by SQLi
11e00 74 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  te whenever the 
11e10 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
11e20 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79 0a  is modified (by.
11e30 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f 72    ** creating or
11e40 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62 6c   dropping a tabl
11e50 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68 65  e or index). The
11e60 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
11e70 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  is used by.  ** 
11e80 53 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d 65  SQLite each time
11e90 20 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63   a query is exec
11ea0 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  uted to ensure t
11eb0 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  hat the internal
11ec0 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74   cache.  ** of t
11ed0 68 65 20 73 63 68 65 6d 61 20 75 73 65 64 20 77  he schema used w
11ee0 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68  hen compiling th
11ef0 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63  e SQL query matc
11f00 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f  hes the schema o
11f10 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62  f.  ** the datab
11f20 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63  ase against whic
11f30 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  h the compiled q
11f40 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79  uery is actually
11f50 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20   executed..  ** 
11f60 53 75 62 76 65 72 74 69 6e 67 20 74 68 69 73 20  Subverting this 
11f70 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73 69  mechanism by usi
11f80 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d  ng "PRAGMA schem
11f90 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f  a_version" to mo
11fa0 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73 63  dify.  ** the sc
11fb0 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73 20  hema-version is 
11fc0 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67  potentially dang
11fd0 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c 65  erous and may le
11fe0 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20  ad to program.  
11ff0 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64 61  ** crashes or da
12000 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
12010 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61 75 74  n. Use with caut
12020 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ion!.  **.  ** T
12030 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
12040 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65  is not used inte
12050 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
12060 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73 65 64  . It may be used
12070 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61   by.  ** applica
12080 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70 75  tions for any pu
12090 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  rpose..  */.  ca
120a0 73 65 20 50 72 61 67 54 79 70 5f 48 45 41 44 45  se PragTyp_HEADE
120b0 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69  R_VALUE: {.    i
120c0 6e 74 20 69 43 6f 6f 6b 69 65 3b 20 20 20 2f 2a  nt iCookie;   /*
120d0 20 43 6f 6f 6b 69 65 20 69 6e 64 65 78 2e 20 31   Cookie index. 1
120e0 20 66 6f 72 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   for schema-cook
120f0 69 65 2c 20 36 20 66 6f 72 20 75 73 65 72 2d 63  ie, 6 for user-c
12100 6f 6f 6b 69 65 2e 20 2a 2f 0a 20 20 20 20 73 71  ookie. */.    sq
12110 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
12120 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20  ee(v, iDb);.    
12130 73 77 69 74 63 68 28 20 7a 4c 65 66 74 5b 30 5d  switch( zLeft[0]
12140 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 27   ){.      case '
12150 61 27 3a 20 63 61 73 65 20 27 41 27 3a 0a 20 20  a': case 'A':.  
12160 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20        iCookie = 
12170 42 54 52 45 45 5f 41 50 50 4c 49 43 41 54 49 4f  BTREE_APPLICATIO
12180 4e 5f 49 44 3b 0a 20 20 20 20 20 20 20 20 62 72  N_ID;.        br
12190 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
121a0 27 66 27 3a 20 63 61 73 65 20 27 46 27 3a 0a 20  'f': case 'F':. 
121b0 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d         iCookie =
121c0 20 42 54 52 45 45 5f 46 52 45 45 5f 50 41 47 45   BTREE_FREE_PAGE
121d0 5f 43 4f 55 4e 54 3b 0a 20 20 20 20 20 20 20 20  _COUNT;.        
121e0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
121f0 65 20 27 73 27 3a 20 63 61 73 65 20 27 53 27 3a  e 's': case 'S':
12200 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65  .        iCookie
12210 20 3d 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f   = BTREE_SCHEMA_
12220 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20 20  VERSION;.       
12230 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 64 65   break;.      de
12240 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 69  fault:.        i
12250 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 55  Cookie = BTREE_U
12260 53 45 52 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20  SER_VERSION;.   
12270 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
12280 7d 0a 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  }..    if( zRigh
12290 74 20 26 26 20 69 43 6f 6f 6b 69 65 21 3d 42 54  t && iCookie!=BT
122a0 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f  REE_FREE_PAGE_CO
122b0 55 4e 54 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  UNT ){.      /* 
122c0 57 72 69 74 65 20 74 68 65 20 73 70 65 63 69 66  Write the specif
122d0 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65  ied cookie value
122e0 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
122f0 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
12300 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20  t setCookie[] = 
12310 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54  {.        { OP_T
12320 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30  ransaction,    0
12330 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  1,  0},    /*
12340 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   0 */.        { 
12350 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
12360 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20     0,  1,  0},  
12370 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
12380 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65    { OP_SetCookie
12390 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 31  ,      0,  0,  1
123a0 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20  },    /* 2 */.  
123b0 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
123c0 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
123d0 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
123e0 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f 6f  ArraySize(setCoo
123f0 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65 2c  kie), setCookie,
12400 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
12410 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
12420 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
12430 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
12440 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
12450 31 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  1, sqlite3Atoi(z
12460 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
12470 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
12480 50 31 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 44  P1(v, addr+2, iD
12490 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
124a0 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c  3VdbeChangeP2(v,
124b0 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f 6b 69 65   addr+2, iCookie
124c0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
124d0 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20      /* Read the 
124e0 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65  specified cookie
124f0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20   value */.      
12500 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
12510 65 4f 70 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b  eOpList readCook
12520 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ie[] = {.       
12530 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
12540 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30  n,     0,  0,  0
12550 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
12560 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
12570 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20  ookie,      0,  
12580 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20  1,  0},    /* 1 
12590 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
125a0 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 20 20 20  ResultRow,      
125b0 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20 20   1,  1,  0}.    
125c0 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61    };.      int a
125d0 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
125e0 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
125f0 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b  raySize(readCook
12600 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b 69 65 2c  ie), readCookie,
12610 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
12620 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
12630 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
12640 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
12650 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
12660 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  1, iDb);.      s
12670 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
12680 50 33 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 43  P3(v, addr+1, iC
12690 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71  ookie);.      sq
126a0 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
126b0 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20  ols(v, 1);.     
126c0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
126d0 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
126e0 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74  NAME_NAME, zLeft
126f0 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
12700 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  NT);.    }.  }. 
12710 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
12720 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  * SQLITE_OMIT_SC
12730 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
12740 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
12750 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
12760 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
12770 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
12780 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69  GMA compile_opti
12790 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  ons.  **.  ** Re
127a0 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f  turn the names o
127b0 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69  f all compile-ti
127c0 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20  me options used 
127d0 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20  in this build,. 
127e0 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70   ** one option p
127f0 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63  er row..  */.  c
12800 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4d 50  ase PragTyp_COMP
12810 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20  ILE_OPTIONS: {. 
12820 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20     int i = 0;.  
12830 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f    const char *zO
12840 70 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  pt;.    sqlite3V
12850 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
12860 20 31 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   1);.    pParse-
12870 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73  >nMem = 1;.    s
12880 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
12890 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
128a0 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70 69 6c  ME_NAME, "compil
128b0 65 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c 49 54  e_option", SQLIT
128c0 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 77  E_STATIC);.    w
128d0 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71  hile( (zOpt = sq
128e0 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
128f0 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30  ion_get(i++))!=0
12900 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
12910 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
12920 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
12930 20 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a 20 20   0, zOpt, 0);.  
12940 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
12950 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
12960 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
12970 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
12980 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
12990 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
129a0 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23  TION_DIAGS */..#
129b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
129c0 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a  IT_WAL.  /*.  **
129d0 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
129e0 61 73 65 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f  ase.]wal_checkpo
129f0 69 6e 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75  int = passive|fu
12a00 6c 6c 7c 72 65 73 74 61 72 74 0a 20 20 2a 2a 0a  ll|restart.  **.
12a10 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20    ** Checkpoint 
12a20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
12a30 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
12a40 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54  p_WAL_CHECKPOINT
12a50 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20  : {.    int iBt 
12a60 3d 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53  = (pId2->z?iDb:S
12a70 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
12a80 45 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f  ED);.    int eMo
12a90 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
12aa0 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a  KPOINT_PASSIVE;.
12ab0 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
12ac0 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
12ad0 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
12ae0 74 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b  t, "full")==0 ){
12af0 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
12b00 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
12b10 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d  NT_FULL;.      }
12b20 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
12b30 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  StrICmp(zRight, 
12b40 22 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b  "restart")==0 ){
12b50 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
12b60 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
12b70 4e 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20  NT_RESTART;.    
12b80 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
12b90 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
12ba0 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70  ols(v, 3);.    p
12bb0 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
12bc0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
12bd0 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
12be0 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
12bf0 62 75 73 79 22 2c 20 53 51 4c 49 54 45 5f 53 54  busy", SQLITE_ST
12c00 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
12c10 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
12c20 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
12c30 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c 49  AME, "log", SQLI
12c40 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
12c50 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
12c60 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
12c70 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63 6b  AME_NAME, "check
12c80 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49 54 45  pointed", SQLITE
12c90 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 73  _STATIC);..    s
12ca0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
12cb0 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  (v, OP_Checkpoin
12cc0 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31  t, iBt, eMode, 1
12cd0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
12ce0 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
12cf0 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b  esultRow, 1, 3);
12d00 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
12d10 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
12d20 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  A wal_autocheckp
12d30 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  oint.  **   PRAG
12d40 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  MA wal_autocheck
12d50 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20  point = N.  **. 
12d60 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20   ** Configure a 
12d70 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12d80 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  ion to automatic
12d90 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20  ally checkpoint 
12da0 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
12db0 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69  after accumulati
12dc0 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74  ng N frames in t
12dd0 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79  he log. Or query
12de0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
12df0 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e   value.  ** of N
12e00 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
12e10 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48  agTyp_WAL_AUTOCH
12e20 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20  ECKPOINT: {.    
12e30 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
12e40 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f      sqlite3_wal_
12e50 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64  autocheckpoint(d
12e60 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  b, sqlite3Atoi(z
12e70 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20  Right));.    }. 
12e80 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
12e90 6e 74 28 70 50 61 72 73 65 2c 20 22 77 61 6c 5f  nt(pParse, "wal_
12ea0 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c  autocheckpoint",
12eb0 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61   .       db->xWa
12ec0 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74  lCallback==sqlit
12ed0 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
12ee0 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 53   ? .           S
12ef0 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
12f00 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20  (db->pWalArg) : 
12f10 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  0);.  }.  break;
12f20 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20  .#endif..  /*.  
12f30 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e  **  PRAGMA shrin
12f40 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20  k_memory.  **.  
12f50 2a 2a 20 54 68 69 73 20 70 72 61 67 6d 61 20 61  ** This pragma a
12f60 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20  ttempts to free 
12f70 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61  as much memory a
12f80 73 20 70 6f 73 73 69 62 6c 65 20 66 72 6f 6d 20  s possible from 
12f90 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74  the.  ** current
12fa0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
12fb0 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  tion..  */.  cas
12fc0 65 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e 4b  e PragTyp_SHRINK
12fd0 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20 20 73  _MEMORY: {.    s
12fe0 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73  qlite3_db_releas
12ff0 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20  e_memory(db);.  
13000 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
13010 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
13020 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20   busy_timeout.  
13030 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79  **   PRAGMA busy
13040 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a  _timeout = N.  *
13050 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69  *.  ** Call sqli
13060 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
13070 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e  (db, N).  Return
13080 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d   the current tim
13090 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20  eout value.  ** 
130a0 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20 20  if one is set.  
130b0 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c  If no busy handl
130c0 65 72 20 6f 72 20 61 20 64 69 66 66 65 72 65 6e  er or a differen
130d0 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 69  t busy handler i
130e0 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20  s set.  ** then 
130f0 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  0 is returned.  
13100 53 65 74 74 69 6e 67 20 74 68 65 20 62 75 73 79  Setting the busy
13110 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72  _timeout to 0 or
13120 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20 64   negative.  ** d
13130 69 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d 65  isables the time
13140 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61  out..  */.  /*ca
13150 73 65 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f  se PragTyp_BUSY_
13160 54 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61 75 6c  TIMEOUT*/ defaul
13170 74 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28  t: {.    assert(
13180 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69   aPragmaNames[mi
13190 64 5d 2e 65 50 72 61 67 54 79 70 3d 3d 50 72 61  d].ePragTyp==Pra
131a0 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
131b0 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  T );.    if( zRi
131c0 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
131d0 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
131e0 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f  t(db, sqlite3Ato
131f0 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
13200 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
13210 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74  leInt(pParse, "t
13220 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75  imeout",  db->bu
13230 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20  syTimeout);.    
13240 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
13250 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73  .  **   PRAGMA s
13260 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20  oft_heap_limit. 
13270 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66   **   PRAGMA sof
13280 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e  t_heap_limit = N
13290 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20  .  **.  ** Call 
132a0 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
132b0 70 5f 6c 69 6d 69 74 36 34 28 4e 29 2e 20 20 52  p_limit64(N).  R
132c0 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74  eturn the result
132d0 2e 20 20 49 66 20 4e 20 69 73 20 6f 6d 69 74 74  .  If N is omitt
132e0 65 64 2c 0a 20 20 2a 2a 20 75 73 65 20 2d 31 2e  ed,.  ** use -1.
132f0 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
13300 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c  gTyp_SOFT_HEAP_L
13310 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69  IMIT: {.    sqli
13320 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20  te3_int64 N;.   
13330 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 73   if( zRight && s
13340 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
13350 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d  I64(zRight, &N)=
13360 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
13370 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74      sqlite3_soft
13380 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29  _heap_limit64(N)
13390 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
133a0 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
133b0 73 65 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c  se, "soft_heap_l
133c0 69 6d 69 74 22 2c 20 20 73 71 6c 69 74 65 33 5f  imit",  sqlite3_
133d0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36  soft_heap_limit6
133e0 34 28 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61  4(-1));.    brea
133f0 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69  k;.  }..#if defi
13400 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
13410 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
13420 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20  ITE_TEST).  /*. 
13430 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63   ** Report the c
13440 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20  urrent state of 
13450 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c  file logs for al
13460 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f  l databases.  */
13470 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
13480 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20  LOCK_STATUS: {. 
13490 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
134a0 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f  char *const azLo
134b0 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  ckName[] = {.   
134c0 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22     "unlocked", "
134d0 73 68 61 72 65 64 22 2c 20 22 72 65 73 65 72 76  shared", "reserv
134e0 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20  ed", "pending", 
134f0 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20  "exclusive".    
13500 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  };.    int i;.  
13510 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
13520 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20  NumCols(v, 2);. 
13530 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
13540 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 2;.    sqlite3
13550 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
13560 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
13570 45 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20 53  E, "database", S
13580 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
13590 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
135a0 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
135b0 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74  OLNAME_NAME, "st
135c0 61 74 75 73 22 2c 20 53 51 4c 49 54 45 5f 53 54  atus", SQLITE_ST
135d0 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69  ATIC);.    for(i
135e0 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
135f0 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65  ++){.      Btree
13600 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e   *pBt;.      con
13610 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20  st char *zState 
13620 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20  = "unknown";.   
13630 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20     int j;.      
13640 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  if( db->aDb[i].z
13650 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  Name==0 ) contin
13660 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
13670 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
13680 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
13690 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a   0, db->aDb[i].z
136a0 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29  Name, P4_STATIC)
136b0 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64 62  ;.      pBt = db
136c0 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20  ->aDb[i].pBt;.  
136d0 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c      if( pBt==0 |
136e0 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  | sqlite3BtreePa
136f0 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20  ger(pBt)==0 ){. 
13700 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
13710 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20  "closed";.      
13720 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
13730 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
13740 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69  b, i ? db->aDb[i
13750 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20  ].zName : 0, .  
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f     SQLITE_FCNTL_
13790 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d  LOCKSTATE, &j)==
137a0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
137b0 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61        zState = a
137c0 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20  zLockName[j];.  
137d0 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
137e0 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
137f0 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
13800 32 2c 20 30 2c 20 7a 53 74 61 74 65 2c 20 50 34  2, 0, zState, P4
13810 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
13820 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
13830 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
13840 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a  w, 1, 2);.    }.
13850 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
13860 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
13870 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
13880 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45   case PragTyp_KE
13890 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
138a0 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65  ght ) sqlite3_ke
138b0 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52  y_v2(db, zDb, zR
138c0 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72  ight, sqlite3Str
138d0 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a  len30(zRight));.
138e0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
138f0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 52 45   case PragTyp_RE
13900 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  KEY: {.    if( z
13910 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f  Right ) sqlite3_
13920 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  rekey_v2(db, zDb
13930 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65  , zRight, sqlite
13940 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74  3Strlen30(zRight
13950 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
13960 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79   }.  case PragTy
13970 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20  p_HEXKEY: {.    
13980 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
13990 20 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20      u8 iByte;.  
139a0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20      int i;.     
139b0 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a   char zKey[40];.
139c0 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69        for(i=0, i
139d0 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  Byte=0; i<sizeof
139e0 28 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69  (zKey)*2 && sqli
139f0 74 65 33 49 73 78 64 69 67 69 74 28 7a 52 69 67  te3Isxdigit(zRig
13a00 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  ht[i]); i++){.  
13a10 20 20 20 20 20 20 69 42 79 74 65 20 3d 20 28 69        iByte = (i
13a20 42 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74  Byte<<4) + sqlit
13a30 65 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68  e3HexToInt(zRigh
13a40 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69  t[i]);.        i
13a50 66 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b  f( (i&1)!=0 ) zK
13a60 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b  ey[i/2] = iByte;
13a70 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
13a80 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30  f( (zLeft[3] & 0
13a90 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20  xf)==0xb ){.    
13aa0 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f      sqlite3_key_
13ab0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79  v2(db, zDb, zKey
13ac0 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65  , i/2);.      }e
13ad0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
13ae0 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62  ite3_rekey_v2(db
13af0 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32  , zDb, zKey, i/2
13b00 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
13b10 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
13b20 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
13b30 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
13b40 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  DEC) || defined(
13b50 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
13b60 52 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61 67  ROD).  case Prag
13b70 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54  Typ_ACTIVATE_EXT
13b80 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69  ENSIONS: if( zRi
13b90 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51  ght ){.#ifdef SQ
13ba0 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
13bb0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
13bc0 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  rNICmp(zRight, "
13bd0 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a  see-", 4)==0 ){.
13be0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63        sqlite3_ac
13bf0 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67  tivate_see(&zRig
13c00 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ht[4]);.    }.#e
13c10 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
13c20 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a  TE_ENABLE_CEROD.
13c30 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
13c40 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  trNICmp(zRight, 
13c50 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20  "cerod-", 6)==0 
13c60 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
13c70 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28  _activate_cerod(
13c80 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20  &zRight[6]);.   
13c90 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
13ca0 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
13cb0 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65   } /* End of the
13cc0 20 50 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a   PRAGMA switch *
13cd0 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20  /..pragma_out:. 
13ce0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
13cf0 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c  b, zLeft);.  sql
13d00 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
13d10 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69  Right);.}..#endi
13d20 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
13d30 5f 50 52 41 47 4d 41 20 2a 2f 0a                 _PRAGMA */.