/ Hex Artifact Content
Login

Artifact e78b4bf2a267de2c17ee09f90b6807cf8d40e6a3:


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 69 6e 74 20 64 66 6c 74 29 7b  Full, int dflt){
40a0: 0a 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 20 2f 2a                /*
40c0: 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35   123456789 12345
40d0: 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69 63  6789 */.  static
40e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65 78   const char zTex
40f0: 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65  t[] = "onoffalse
4100: 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20  yestruefull";.  
4110: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20  static const u8 
4120: 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20  iOffset[] = {0, 
4130: 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20  1, 2, 4, 9, 12, 
4140: 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  16};.  static co
4150: 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d  nst u8 iLength[]
4160: 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20   = {2, 2, 3, 5, 
4170: 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74  3, 4, 4};.  stat
4180: 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61 6c  ic const u8 iVal
4190: 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30  ue[] =  {1, 0, 0
41a0: 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20  , 0, 1, 1, 2};. 
41b0: 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28   int i, n;.  if(
41c0: 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
41d0: 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  *z) ){.    retur
41e0: 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f  n (u8)sqlite3Ato
41f0: 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20  i(z);.  }.  n = 
4200: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4210: 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  z);.  for(i=0; i
4220: 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67  <ArraySize(iLeng
4230: 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b  th)-omitFull; i+
4240: 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65 6e  +){.    if( iLen
4250: 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c  gth[i]==n && sql
4260: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a 54  ite3StrNICmp(&zT
4270: 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c  ext[iOffset[i]],
4280: 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  z,n)==0 ){.     
4290: 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69   return iValue[i
42a0: 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  ];.    }.  }.  r
42b0: 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f  eturn dflt;.}../
42c0: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
42d0: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
42e0: 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
42f0: 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65  ue..*/.u8 sqlite
4300: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
4310: 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64  t char *z, int d
4320: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
4330: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
4340: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
4350: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
4360: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
4370: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
4380: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
4390: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
43a0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
43b0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
43c0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
43d0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
43e0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
43f0: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
4400: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
4410: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
4420: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
4430: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
4440: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
4450: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
4460: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
4470: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
4480: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
4490: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
44a0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
44b0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
44c0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
44d0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
44e0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
44f0: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
4500: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
4510: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
4520: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
4530: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
4540: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
4550: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
4560: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
4570: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
4580: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
4590: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
45a0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
45b0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
45c0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
45d0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
45e0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
45f0: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
4600: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
4610: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
4620: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
4630: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
4640: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
4650: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
4660: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
4670: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
4680: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
4690: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
46a0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
46b0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
46c0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
46d0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
46e0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
46f0: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
4700: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
4710: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
4720: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
4730: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
4740: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
4750: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
4760: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
4770: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
4780: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
4790: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
47a0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
47b0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
47c0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
47d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
47e0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
47f0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
4800: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
4810: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
4820: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
4830: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
4840: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
4850: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
4860: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
4870: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
4880: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
4890: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
48a0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
48b0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
48c0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
48d0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
48e0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
48f0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
4900: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
4910: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
4920: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
4930: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
4940: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
4950: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
4960: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
4970: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
4980: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
4990: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
49a0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
49b0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
49c0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
49d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
49e0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
49f0: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
4a00: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
4a10: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
4a20: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
4a30: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
4a40: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
4a50: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
4a60: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
4a70: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
4a80: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
4a90: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
4aa0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
4ab0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
4ac0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
4ad0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
4ae0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
4af0: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
4b00: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
4b10: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
4b20: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
4b30: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
4b40: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
4b50: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
4b60: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
4b70: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
4b80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
4b90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4ba0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
4bb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
4bc0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
4bd0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
4be0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
4bf0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
4c00: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
4c10: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
4c20: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4c30: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
4c40: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
4c50: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
4c60: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
4c70: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
4c80: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
4c90: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
4ca0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
4cb0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
4cc0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
4cd0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
4ce0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
4cf0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
4d00: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
4d10: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
4d20: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
4d30: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
4d40: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
4d50: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
4d60: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
4d70: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
4d80: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
4d90: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
4da0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
4db0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
4dc0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
4dd0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
4de0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
4df0: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
4e00: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
4e10: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
4e20: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
4e30: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
4e40: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
4e50: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
4e60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
4e70: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
4e80: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
4e90: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72   */../*.** Gener
4ea0: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75  ate code to retu
4eb0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  rn a single inte
4ec0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ger value..*/.st
4ed0: 61 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e  atic void return
4ee0: 53 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20  SingleInt(Parse 
4ef0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
4f00: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34  har *zLabel, i64
4f10: 20 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20   value){.  Vdbe 
4f20: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
4f30: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69  dbe(pParse);.  i
4f40: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
4f50: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a  e->nMem;.  i64 *
4f60: 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62  pI64 = sqlite3Db
4f70: 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65  MallocRaw(pParse
4f80: 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c  ->db, sizeof(val
4f90: 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34  ue));.  if( pI64
4fa0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
4fb0: 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a  I64, &value, siz
4fc0: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d  eof(value));.  }
4fd0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  .  sqlite3VdbeAd
4fe0: 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34  dOp4(v, OP_Int64
4ff0: 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68  , 0, mem, 0, (ch
5000: 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54  ar*)pI64, P4_INT
5010: 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  64);.  sqlite3Vd
5020: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
5030: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
5040: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
5050: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
5060: 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53  zLabel, SQLITE_S
5070: 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65  TATIC);.  sqlite
5080: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
5090: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d  P_ResultRow, mem
50a0: 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , 1);.}.../*.** 
50b0: 53 65 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c  Set the safety_l
50c0: 65 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66  evel and pager f
50d0: 6c 61 67 73 20 66 6f 72 20 70 61 67 65 72 20 69  lags for pager i
50e0: 44 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30  Db.  Or if iDb<0
50f0: 0a 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76 61  .** set these va
5100: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67  lues for all pag
5110: 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ers..*/.#ifndef 
5120: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
5130: 52 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63  R_PRAGMAS.static
5140: 20 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65   void setAllPage
5150: 72 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a  rFlags(sqlite3 *
5160: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61  db){.  if( db->a
5170: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
5180: 20 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61   Db *pDb = db->a
5190: 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20  Db;.    int n = 
51a0: 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73  db->nDb;.    ass
51b0: 65 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c  ert( SQLITE_Full
51c0: 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c  FSync==PAGER_FUL
51d0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
51e0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70  sert( SQLITE_Ckp
51f0: 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45  tFullFSync==PAGE
5200: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
5210: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
5220: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
5230: 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50  l==PAGER_CACHESP
5240: 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ILL );.    asser
5250: 74 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53  t( (PAGER_FULLFS
5260: 59 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54  YNC | PAGER_CKPT
5270: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
5280: 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20  ER_CACHESPILL). 
5290: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20              ==  
52a0: 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b  PAGER_FLAGS_MASK
52b0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
52c0: 28 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  (pDb->safety_lev
52d0: 65 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48  el & PAGER_SYNCH
52e0: 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44  RONOUS_MASK)==pD
52f0: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
5300: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 6e  );.    while( (n
5310: 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20 20  --) > 0 ){.     
5320: 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b   if( pDb->pBt ){
5330: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5340: 42 74 72 65 65 53 65 74 50 61 67 65 72 46 6c 61  BtreeSetPagerFla
5350: 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20  gs(pDb->pBt,.   
5360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
5370: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
5380: 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50  | (db->flags & P
5390: 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29  AGER_FLAGS_MASK)
53a0: 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   );.      }.    
53b0: 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20    pDb++;.    }. 
53c0: 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66   }.}.#else.# def
53d0: 69 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46  ine setAllPagerF
53e0: 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f  lags(X)  /* no-o
53f0: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  p */.#endif.../*
5400: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d  .** Return a hum
5410: 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65  an-readable name
5420: 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e   for a constrain
5430: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74  t resolution act
5440: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ion..*/.#ifndef 
5450: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
5460: 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63  IGN_KEY.static c
5470: 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f  onst char *actio
5480: 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29  nName(u8 action)
5490: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
54a0: 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28  zName;.  switch(
54b0: 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63   action ){.    c
54c0: 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20  ase OE_SetNull: 
54d0: 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55   zName = "SET NU
54e0: 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  LL";        brea
54f0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53  k;.    case OE_S
5500: 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d  etDflt:  zName =
5510: 20 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20   "SET DEFAULT"; 
5520: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
5530: 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20  ase OE_Cascade: 
5540: 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44   zName = "CASCAD
5550: 45 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61  E";         brea
5560: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52  k;.    case OE_R
5570: 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d  estrict: zName =
5580: 20 22 52 45 53 54 52 49 43 54 22 3b 20 20 20 20   "RESTRICT";    
5590: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
55a0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
55b0: 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54   zName = "NO ACT
55c0: 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20  ION";  .        
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
55e0: 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45  sert( action==OE
55f0: 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a  _None ); break;.
5600: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61    }.  return zNa
5610: 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  me;.}.#endif.../
5620: 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65  *.** Parameter e
5630: 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65  Mode must be one
5640: 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f   of the PAGER_JO
5650: 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f  URNALMODE_XXX co
5660: 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e  nstants.** defin
5670: 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54  ed in pager.h. T
5680: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  his function ret
5690: 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61  urns the associa
56a0: 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a  ted lowercase.**
56b0: 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61   journal-mode na
56c0: 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  me..*/.const cha
56d0: 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
56e0: 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d  lModename(int eM
56f0: 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63  ode){.  static c
5700: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f  har * const azMo
5710: 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  deName[] = {.   
5720: 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73   "delete", "pers
5730: 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72  ist", "off", "tr
5740: 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79  uncate", "memory
5750: 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ".#ifndef SQLITE
5760: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c  _OMIT_WAL.     ,
5770: 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20   "wal".#endif.  
5780: 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  };.  assert( PAG
5790: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
57a0: 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73  ELETE==0 );.  as
57b0: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
57c0: 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d  NALMODE_PERSIST=
57d0: 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
57e0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
57f0: 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73  E_OFF==2 );.  as
5800: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
5810: 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
5820: 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==3 );.  assert(
5830: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
5840: 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a  DE_MEMORY==4 );.
5850: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
5860: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d  JOURNALMODE_WAL=
5870: 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =5 );.  assert( 
5880: 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64  eMode>=0 && eMod
5890: 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d  e<=ArraySize(azM
58a0: 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69  odeName) );..  i
58b0: 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53  f( eMode==ArrayS
58c0: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
58d0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65  ) return 0;.  re
58e0: 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b  turn azModeName[
58f0: 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  eMode];.}../*.**
5900: 20 50 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d   Process a pragm
5910: 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a  a statement.  .*
5920: 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65  *.** Pragmas are
5930: 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a   of this form:.*
5940: 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41  *.**      PRAGMA
5950: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b   [database.]id [
5960: 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54  = value].**.** T
5970: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69  he identifier mi
5980: 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74  ght also be a st
5990: 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65  ring.  The value
59a0: 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e   is a string, an
59b0: 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c  d.** identifier,
59c0: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49   or a number.  I
59d0: 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74  f minusFlag is t
59e0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  rue, then the va
59f0: 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62  lue is.** a numb
5a00: 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63  er that was prec
5a10: 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20  eded by a minus 
5a20: 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sign..**.** If t
5a30: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
5a40: 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68  "database.id" th
5a50: 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64  en pId1 is the d
5a60: 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20  atabase name.** 
5a70: 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20  and pId2 is the 
5a80: 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74  id.  If the left
5a90: 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69   side is just "i
5aa0: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
5ab0: 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49  the.** id and pI
5ac0: 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20  d2 is any empty 
5ad0: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20  string..*/.void 
5ae0: 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20  sqlite3Pragma(. 
5af0: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
5b00: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20  .  Token *pId1, 
5b10: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
5b20: 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73  part of [databas
5b30: 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20  e.]id field */. 
5b40: 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20   Token *pId2,   
5b50: 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70       /* Second p
5b60: 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65  art of [database
5b70: 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e  .]id field, or N
5b80: 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ULL */.  Token *
5b90: 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20  pValue,      /* 
5ba0: 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65  Token for <value
5bb0: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
5bc0: 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20  int minusFlag   
5bd0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
5be0: 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64   '-' sign preced
5bf0: 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b  ed <value> */.){
5c00: 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d  .  char *zLeft =
5c10: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c   0;       /* Nul
5c20: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
5c30: 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f  8 string <id> */
5c40: 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20  .  char *zRight 
5c50: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c  = 0;      /* Nul
5c60: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
5c70: 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e  8 string <value>
5c80: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  , or NULL */.  c
5c90: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
5ca0: 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74   0;   /* The dat
5cb0: 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  abase name */.  
5cc0: 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20  Token *pId;     
5cd0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
5ce0: 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20  r to <id> token 
5cf0: 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74  */.  char *aFcnt
5d00: 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41  l[4];       /* A
5d10: 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54  rgument to SQLIT
5d20: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
5d30: 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
5d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
5d50: 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72  tabase index for
5d60: 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20   <database> */. 
5d70: 20 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d   int lwr, upr, m
5d80: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  id;           /*
5d90: 20 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62   Binary search b
5da0: 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72  ounds */.  int r
5db0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
5dc0: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
5dd0: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
5de0: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
5df0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
5e00: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
5e10: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
5e20: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
5e30: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e50: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
5e60: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
5e70: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
5e80: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
5e90: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
5ea0: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
5eb0: 65 6d 65 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20  ement */..  if( 
5ec0: 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20  v==0 ) return;. 
5ed0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 75 6e 4f   sqlite3VdbeRunO
5ee0: 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50  nlyOnce(v);.  pP
5ef0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
5f00: 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72 65 74 20  .  /* Interpret 
5f10: 74 68 65 20 5b 64 61 74 61 62 61 73 65 2e 5d 20  the [database.] 
5f20: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
5f30: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44  ma statement. iD
5f40: 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e  b is the.  ** in
5f50: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
5f60: 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61 20  ase this pragma 
5f70: 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64  is being applied
5f80: 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e   to in db.aDb[].
5f90: 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69   */.  iDb = sqli
5fa0: 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70  te3TwoPartName(p
5fb0: 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64  Parse, pId1, pId
5fc0: 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20  2, &pId);.  if( 
5fd0: 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a  iDb<0 ) return;.
5fe0: 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
5ff0: 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  [iDb];..  /* If 
6000: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
6010: 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69  e has been expli
6020: 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70  citly named as p
6030: 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  art of the .  **
6040: 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75   pragma, make su
6050: 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a  re it is open. .
6060: 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d    */.  if( iDb==
6070: 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e  1 && sqlite3Open
6080: 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50 61  TempDatabase(pPa
6090: 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  rse) ){.    retu
60a0: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74  rn;.  }..  zLeft
60b0: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
60c0: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29  omToken(db, pId)
60d0: 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29  ;.  if( !zLeft )
60e0: 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d   return;.  if( m
60f0: 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20  inusFlag ){.    
6100: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
6110: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54  MPrintf(db, "-%T
6120: 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65  ", pValue);.  }e
6130: 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  lse{.    zRight 
6140: 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f  = sqlite3NameFro
6150: 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75  mToken(db, pValu
6160: 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  e);.  }..  asser
6170: 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62  t( pId2 );.  zDb
6180: 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70   = pId2->n>0 ? p
6190: 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20  Db->zName : 0;. 
61a0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 75 74 68   if( sqlite3Auth
61b0: 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51  Check(pParse, SQ
61c0: 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65  LITE_PRAGMA, zLe
61d0: 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  ft, zRight, zDb)
61e0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61   ){.    goto pra
61f0: 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  gma_out;.  }..  
6200: 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51 4c 49 54  /* Send an SQLIT
6210: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66  E_FCNTL_PRAGMA f
6220: 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ile-control to t
6230: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46  he underlying VF
6240: 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  S.  ** connectio
6250: 6e 2e 20 20 49 66 20 69 74 20 72 65 74 75 72 6e  n.  If it return
6260: 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65  s SQLITE_OK, the
6270: 6e 20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68  n assume that th
6280: 65 20 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c  e VFS.  ** handl
6290: 65 64 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e  ed the pragma an
62a0: 64 20 67 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d  d generate a no-
62b0: 6f 70 20 70 72 65 70 61 72 65 64 20 73 74 61 74  op prepared stat
62c0: 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46  ement..  */.  aF
62d0: 63 6e 74 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  cntl[0] = 0;.  a
62e0: 46 63 6e 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74  Fcntl[1] = zLeft
62f0: 3b 0a 20 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20  ;.  aFcntl[2] = 
6300: 7a 52 69 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c  zRight;.  aFcntl
6310: 5b 33 5d 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  [3] = 0;.  db->b
6320: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
6330: 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
6340: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
6350: 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54  l(db, zDb, SQLIT
6360: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20  E_FCNTL_PRAGMA, 
6370: 28 76 6f 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a  (void*)aFcntl);.
6380: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
6390: 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 61  _OK ){.    if( a
63a0: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
63b0: 20 20 69 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50    int mem = ++pP
63c0: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
63d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
63e0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
63f0: 38 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46  8, 0, mem, 0, aF
6400: 63 6e 74 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20  cntl[0], 0);.   
6410: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
6420: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
6430: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6440: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
6450: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
6460: 22 72 65 73 75 6c 74 22 2c 20 53 51 4c 49 54 45  "result", SQLITE
6470: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
6480: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
6490: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
64a0: 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20  w, mem, 1);.    
64b0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
64c0: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
64d0: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
64e0: 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _out;.  }.  if( 
64f0: 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  rc!=SQLITE_NOTFO
6500: 55 4e 44 20 29 7b 0a 20 20 20 20 69 66 28 20 61  UND ){.    if( a
6510: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
6520: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
6530: 67 28 70 50 61 72 73 65 2c 20 22 25 73 22 2c 20  g(pParse, "%s", 
6540: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
6550: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
6560: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
6570: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72  .    pParse->nEr
6580: 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  r++;.    pParse-
6590: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f  >rc = rc;.    go
65a0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
65b0: 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20   }..  /* Locate 
65c0: 74 68 65 20 70 72 61 67 6d 61 20 69 6e 20 74 68  the pragma in th
65d0: 65 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a  e lookup table *
65e0: 2f 0a 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75  /.  lwr = 0;.  u
65f0: 70 72 20 3d 20 41 72 72 61 79 53 69 7a 65 28 61  pr = ArraySize(a
6600: 50 72 61 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a  PragmaNames)-1;.
6610: 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70    while( lwr<=up
6620: 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28  r ){.    mid = (
6630: 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20  lwr+upr)/2;.    
6640: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72  rc = sqlite3_str
6650: 69 63 6d 70 28 7a 4c 65 66 74 2c 20 61 50 72 61  icmp(zLeft, aPra
6660: 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e  gmaNames[mid].zN
6670: 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ame);.    if( rc
6680: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
6690: 20 69 66 28 20 72 63 3c 30 20 29 7b 0a 20 20 20   if( rc<0 ){.   
66a0: 20 20 20 75 70 72 20 3d 20 6d 69 64 20 2d 20 31     upr = mid - 1
66b0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
66c0: 20 20 20 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31     lwr = mid + 1
66d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
66e0: 28 20 6c 77 72 3e 75 70 72 20 29 20 67 6f 74 6f  ( lwr>upr ) goto
66f0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20   pragma_out;..  
6700: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
6710: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6720: 20 69 73 20 6c 6f 61 64 65 64 20 69 66 20 74 68   is loaded if th
6730: 65 20 70 72 61 67 6d 61 20 72 65 71 75 69 72 65  e pragma require
6740: 73 20 74 68 61 74 20 2a 2f 0a 20 20 69 66 28 20  s that */.  if( 
6750: 28 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69  (aPragmaNames[mi
6760: 64 5d 2e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  d].mPragFlag & P
6770: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
6780: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
6790: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
67a0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
67b0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
67c0: 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f   }..  /* Jump to
67d0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
67e0: 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20   pragma handler 
67f0: 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 61 50 72  */.  switch( aPr
6800: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65  agmaNames[mid].e
6810: 50 72 61 67 54 79 70 20 29 7b 0a 20 20 0a 23 69  PragTyp ){.  .#i
6820: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
6830: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
6840: 47 4d 41 53 29 20 26 26 20 21 64 65 66 69 6e 65  GMAS) && !define
6850: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  d(SQLITE_OMIT_DE
6860: 50 52 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20  PRECATED).  /*. 
6870: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
6880: 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63  abase.]default_c
6890: 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20  ache_size.  **  
68a0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
68b0: 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  .]default_cache_
68c0: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
68d0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
68e0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
68f0: 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73  ent persistent s
6900: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
6910: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
6920: 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ize.  The value 
6930: 72 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20  returned is the 
6940: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
6950: 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20  f.  ** pages in 
6960: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20  the page cache. 
6970: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
6980: 20 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63   sets both the c
6990: 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65  urrent.  ** page
69a0: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
69b0: 65 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73  e and the persis
69c0: 74 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20  tent page cache 
69d0: 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20  size value.  ** 
69e0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
69f0: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a  tabase file..  *
6a00: 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72  *.  ** Older ver
6a10: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
6a20: 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65  would set the de
6a30: 66 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65  fault cache size
6a40: 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74   to a.  ** negat
6a50: 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e  ive number to in
6a60: 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f  dicate synchrono
6a70: 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64  us=OFF.  These d
6a80: 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ays, synchronous
6a90: 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20  .  ** is always 
6aa0: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65  on by default re
6ab0: 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
6ac0: 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61  sign of the defa
6ad0: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
6ae0: 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e  ize.  But contin
6af0: 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61  ue to take the a
6b00: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
6b10: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
6b20: 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20  he.  ** size of 
6b30: 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61  historical compa
6b40: 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20  tibility..  */. 
6b50: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45   case PragTyp_DE
6b60: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
6b70: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
6b80: 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56  onst int iLn = V
6b90: 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e  DBE_OFFSET_LINEN
6ba0: 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63  O(2);.    static
6bb0: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
6bc0: 74 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d  t getCacheSize[]
6bd0: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
6be0: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20  Transaction, 0, 
6bf0: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  0,        0},   
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c10: 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20        /* 0 */.  
6c20: 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
6c30: 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20  kie,  0, 1,     
6c40: 20 20 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54     BTREE_DEFAULT
6c50: 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f  _CACHE_SIZE},  /
6c60: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 1 */.      { O
6c70: 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31  P_IfPos,       1
6c80: 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 8,        0},.
6c90: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
6ca0: 65 72 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20  er,     0, 2,   
6cb0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
6cc0: 20 4f 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20   OP_Subtract,   
6cd0: 20 31 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d   1, 2,        1}
6ce0: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50  ,.      { OP_IfP
6cf0: 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20  os,       1, 8, 
6d00: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
6d10: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
6d20: 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20     0, 1,        
6d30: 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  0},             
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36              /* 6
6d50: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e   */.      { OP_N
6d60: 6f 6f 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30  oop,        0, 0
6d70: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
6d80: 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
6d90: 77 2c 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20  w,   1, 1,      
6da0: 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20    0},.    };.   
6db0: 20 69 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 73   int addr;.    s
6dc0: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
6dd0: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
6de0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
6df0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6e00: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
6e10: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
6e20: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
6e30: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
6e40: 45 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c  E, "cache_size",
6e50: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
6e60: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
6e70: 4d 65 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20  Mem += 2;.      
6e80: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
6e90: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
6ea0: 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63 68  rraySize(getCach
6eb0: 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65  eSize), getCache
6ec0: 53 69 7a 65 2c 69 4c 6e 29 3b 0a 20 20 20 20 20  Size,iLn);.     
6ed0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
6ee0: 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44  geP1(v, addr, iD
6ef0: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
6f00: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
6f10: 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20   addr+1, iDb);. 
6f20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
6f30: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
6f40: 2b 36 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55  +6, SQLITE_DEFAU
6f50: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 29 3b 0a  LT_CACHE_SIZE);.
6f60: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6f70: 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69   int size = sqli
6f80: 74 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69  te3AbsInt32(sqli
6f90: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29  te3Atoi(zRight))
6fa0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
6fb0: 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
6fc0: 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44  on(pParse, 0, iD
6fd0: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
6fe0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
6ff0: 50 5f 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c  P_Integer, size,
7000: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
7010: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
7020: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44  OP_SetCookie, iD
7030: 62 2c 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54  b, BTREE_DEFAULT
7040: 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 31 29 3b  _CACHE_SIZE, 1);
7050: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
7060: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
7070: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
7080: 29 20 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e  ) );.      pDb->
7090: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
70a0: 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20  ize = size;.    
70b0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
70c0: 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e  tCacheSize(pDb->
70d0: 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  pBt, pDb->pSchem
70e0: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
70f0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
7100: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21  .  }.#endif /* !
7110: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
7120: 52 5f 50 52 41 47 4d 41 53 20 26 26 20 21 53 51  R_PRAGMAS && !SQ
7130: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
7140: 41 54 45 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65  ATED */..#if !de
7150: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
7160: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
7170: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
7180: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61  MA [database.]pa
7190: 67 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  ge_size.  **  PR
71a0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
71b0: 70 61 67 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a  page_size=N.  **
71c0: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
71d0: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
71e0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
71f0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 64 61   for the.  ** da
7200: 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
7210: 20 69 6e 20 62 79 74 65 73 2e 20 20 54 68 65 20   in bytes.  The 
7220: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73  second form sets
7230: 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61   the.  ** databa
7240: 73 65 20 70 61 67 65 20 73 69 7a 65 20 76 61 6c  se page size val
7250: 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63  ue.  The value c
7260: 61 6e 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69  an only be set i
7270: 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62  f.  ** the datab
7280: 61 73 65 20 68 61 73 20 6e 6f 74 20 79 65 74 20  ase has not yet 
7290: 62 65 65 6e 20 63 72 65 61 74 65 64 2e 0a 20 20  been created..  
72a0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
72b0: 70 5f 50 41 47 45 5f 53 49 5a 45 3a 20 7b 0a 20  p_PAGE_SIZE: {. 
72c0: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
72d0: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73  pDb->pBt;.    as
72e0: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
72f0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
7300: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a  ){.      int siz
7310: 65 20 3d 20 41 4c 57 41 59 53 28 70 42 74 29 20  e = ALWAYS(pBt) 
7320: 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  ? sqlite3BtreeGe
7330: 74 50 61 67 65 53 69 7a 65 28 70 42 74 29 20 3a  tPageSize(pBt) :
7340: 20 30 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   0;.      return
7350: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
7360: 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 20 73  , "page_size", s
7370: 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ize);.    }else{
7380: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63  .      /* Malloc
7390: 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e 20 73   may fail when s
73a0: 65 74 74 69 6e 67 20 74 68 65 20 70 61 67 65 2d  etting the page-
73b0: 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65 20 69  size, as there i
73c0: 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20  s an internal.  
73d0: 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20 74 68      ** buffer th
73e0: 61 74 20 74 68 65 20 70 61 67 65 72 20 6d 6f 64  at the pager mod
73f0: 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73 69 6e  ule resizes usin
7400: 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f  g sqlite3_reallo
7410: 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  c()..      */.  
7420: 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65      db->nextPage
7430: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74  size = sqlite3At
7440: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
7450: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d    if( SQLITE_NOM
7460: 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  EM==sqlite3Btree
7470: 53 65 74 50 61 67 65 53 69 7a 65 28 70 42 74 2c  SetPageSize(pBt,
7480: 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a   db->nextPagesiz
7490: 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20 20  e,-1,0) ){.     
74a0: 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69     db->mallocFai
74b0: 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  led = 1;.      }
74c0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
74d0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
74e0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
74f0: 73 65 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74  se.]secure_delet
7500: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
7510: 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65  database.]secure
7520: 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20  _delete=ON/OFF. 
7530: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72   **.  ** The fir
7540: 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20  st form reports 
7550: 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74  the current sett
7560: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
7570: 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66   secure_delete f
7580: 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  lag.  The second
7590: 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68   form changes th
75a0: 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a  e secure_delete.
75b0: 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e    ** flag settin
75c0: 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68  g and reports th
75d0: 65 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f  enew value..  */
75e0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
75f0: 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b  SECURE_DELETE: {
7600: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
7610: 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20  = pDb->pBt;.    
7620: 69 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20  int b = -1;.    
7630: 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29  assert( pBt!=0 )
7640: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
7650: 20 29 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71   ){.      b = sq
7660: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
7670: 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20  zRight, 0);.    
7680: 7d 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e  }.    if( pId2->
7690: 6e 3d 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a  n==0 && b>=0 ){.
76a0: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
76b0: 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
76c0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
76d0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
76e0: 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65 74  BtreeSecureDelet
76f0: 65 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  e(db->aDb[ii].pB
7700: 74 2c 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  t, b);.      }. 
7710: 20 20 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c     }.    b = sql
7720: 69 74 65 33 42 74 72 65 65 53 65 63 75 72 65 44  ite3BtreeSecureD
7730: 65 6c 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20  elete(pBt, b);. 
7740: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
7750: 6e 74 28 70 50 61 72 73 65 2c 20 22 73 65 63 75  nt(pParse, "secu
7760: 72 65 5f 64 65 6c 65 74 65 22 2c 20 62 29 3b 0a  re_delete", b);.
7770: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
7780: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
7790: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78  A [database.]max
77a0: 5f 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a  _page_count.  **
77b0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
77c0: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
77d0: 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  nt=N.  **.  ** T
77e0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
77f0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
7800: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
7810: 65 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e  e.  ** maximum n
7820: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
7830: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
7840: 69 6c 65 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20  ile.  The .  ** 
7850: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65  second form atte
7860: 6d 70 74 73 20 74 6f 20 63 68 61 6e 67 65 20 74  mpts to change t
7870: 68 69 73 20 73 65 74 74 69 6e 67 2e 20 20 42 6f  his setting.  Bo
7880: 74 68 0a 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65  th.  ** forms re
7890: 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
78a0: 20 73 65 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20   setting..  **. 
78b0: 20 2a 2a 20 54 68 65 20 61 62 73 6f 6c 75 74 65   ** The absolute
78c0: 20 76 61 6c 75 65 20 6f 66 20 4e 20 69 73 20 75   value of N is u
78d0: 73 65 64 2e 20 20 54 68 69 73 20 69 73 20 75 6e  sed.  This is un
78e0: 64 6f 63 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d  documented and m
78f0: 69 67 68 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65  ight.  ** change
7900: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 70 75 72 70  .  The only purp
7910: 6f 73 65 20 69 73 20 74 6f 20 70 72 6f 76 69 64  ose is to provid
7920: 65 20 61 6e 20 65 61 73 79 20 77 61 79 20 74 6f  e an easy way to
7930: 20 74 65 73 74 0a 20 20 2a 2a 20 74 68 65 20 73   test.  ** the s
7940: 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 29  qlite3AbsInt32()
7950: 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a   function..  **.
7960: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7970: 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75  tabase.]page_cou
7980: 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  nt.  **.  ** Ret
7990: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
79a0: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
79b0: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
79c0: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
79d0: 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e  ragTyp_PAGE_COUN
79e0: 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 52 65  T: {.    int iRe
79f0: 67 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  g;.    sqlite3Co
7a00: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
7a10: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
7a20: 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72 73 65   iReg = ++pParse
7a30: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20  ->nMem;.    if( 
7a40: 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a  sqlite3Tolower(z
7a50: 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b  Left[0])=='p' ){
7a60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
7a70: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50  beAddOp2(v, OP_P
7a80: 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69  agecount, iDb, i
7a90: 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Reg);.    }else{
7aa0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
7ab0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d  beAddOp3(v, OP_M
7ac0: 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20 69 52  axPgcnt, iDb, iR
7ad0: 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  eg, .           
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
7af0: 69 74 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c  ite3AbsInt32(sql
7b00: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
7b10: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  ));.    }.    sq
7b20: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
7b30: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
7b40: 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20 20 73   iReg, 1);.    s
7b50: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
7b60: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
7b70: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
7b80: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
7b90: 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c  AME_NAME, zLeft,
7ba0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
7bb0: 54 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  T);.    break;. 
7bc0: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
7bd0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
7be0: 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20  ]locking_mode.  
7bf0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
7c00: 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f  base.]locking_mo
7c10: 64 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63  de = (normal|exc
7c20: 6c 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63  lusive).  */.  c
7c30: 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b  ase PragTyp_LOCK
7c40: 49 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20  ING_MODE: {.    
7c50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74  const char *zRet
7c60: 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20   = "normal";.   
7c70: 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74   int eMode = get
7c80: 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67  LockingMode(zRig
7c90: 68 74 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49  ht);..    if( pI
7ca0: 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64  d2->n==0 && eMod
7cb0: 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  e==PAGER_LOCKING
7cc0: 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20  MODE_QUERY ){.  
7cd0: 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50      /* Simple "P
7ce0: 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f  RAGMA locking_mo
7cf0: 64 65 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  de;" statement. 
7d00: 54 68 69 73 20 69 73 20 61 20 71 75 65 72 79 20  This is a query 
7d10: 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  for.      ** the
7d20: 20 63 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74   current default
7d30: 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77   locking mode (w
7d40: 68 69 63 68 20 6d 61 79 20 62 65 20 64 69 66 66  hich may be diff
7d50: 65 72 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a  erent to.      *
7d60: 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  * the locking-mo
7d70: 64 65 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64  de of the main d
7d80: 61 74 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20  atabase)..      
7d90: 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  */.      eMode =
7da0: 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64   db->dfltLockMod
7db0: 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  e;.    }else{.  
7dc0: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
7dd0: 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  r;.      if( pId
7de0: 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20  2->n==0 ){.     
7df0: 20 20 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63     /* This indic
7e00: 61 74 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74  ates that no dat
7e10: 61 62 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73  abase name was s
7e20: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
7e30: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74  .        ** of t
7e40: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
7e50: 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
7e60: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
7e70: 20 6d 75 73 74 20 62 65 0a 20 20 20 20 20 20 20   must be.       
7e80: 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61   ** set on all a
7e90: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
7ea0: 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68  s, as well as th
7eb0: 65 20 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a  e main db file..
7ec0: 20 20 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20          **.     
7ed0: 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20     ** Also, the 
7ee0: 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b  sqlite3.dfltLock
7ef0: 4d 6f 64 65 20 76 61 72 69 61 62 6c 65 20 69 73  Mode variable is
7f00: 20 73 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20   set so that.   
7f10: 20 20 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73       ** any subs
7f20: 65 71 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65  equently attache
7f30: 64 20 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f  d databases also
7f40: 20 75 73 65 20 74 68 65 20 73 70 65 63 69 66 69   use the specifi
7f50: 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f  ed.        ** lo
7f60: 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20  cking mode..    
7f70: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
7f80: 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61  nt ii;.        a
7f90: 73 73 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e  ssert(pDb==&db->
7fa0: 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  aDb[0]);.       
7fb0: 20 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62   for(ii=2; ii<db
7fc0: 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
7fd0: 20 20 20 20 20 20 20 20 70 50 61 67 65 72 20 3d          pPager =
7fe0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
7ff0: 65 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  er(db->aDb[ii].p
8000: 42 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  Bt);.          s
8010: 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69  qlite3PagerLocki
8020: 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  ngMode(pPager, e
8030: 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d  Mode);.        }
8040: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c  .        db->dfl
8050: 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29  tLockMode = (u8)
8060: 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20  eMode;.      }. 
8070: 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71       pPager = sq
8080: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
8090: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20  pDb->pBt);.     
80a0: 20 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33   eMode = sqlite3
80b0: 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65  PagerLockingMode
80c0: 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b  (pPager, eMode);
80d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65  .    }..    asse
80e0: 72 74 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52  rt( eMode==PAGER
80f0: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52  _LOCKINGMODE_NOR
8100: 4d 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  MAL.            
8110: 7c 7c 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  || eMode==PAGER_
8120: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c  LOCKINGMODE_EXCL
8130: 55 53 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28  USIVE );.    if(
8140: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
8150: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
8160: 49 56 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65  IVE ){.      zRe
8170: 74 20 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b  t = "exclusive";
8180: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
8190: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
81a0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  (v, 1);.    sqli
81b0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
81c0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
81d0: 4e 41 4d 45 2c 20 22 6c 6f 63 6b 69 6e 67 5f 6d  NAME, "locking_m
81e0: 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ode", SQLITE_STA
81f0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
8200: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
8210: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
8220: 20 30 2c 20 7a 52 65 74 2c 20 30 29 3b 0a 20 20   0, zRet, 0);.  
8230: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8240: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
8250: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
8260: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
8270: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
8280: 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c  atabase.]journal
8290: 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47  _mode.  **  PRAG
82a0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f  MA [database.]jo
82b0: 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 0a 20 20 2a  urnal_mode =.  *
82c0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
82d0: 20 20 20 20 20 20 20 28 64 65 6c 65 74 65 7c 70         (delete|p
82e0: 65 72 73 69 73 74 7c 6f 66 66 7c 74 72 75 6e 63  ersist|off|trunc
82f0: 61 74 65 7c 6d 65 6d 6f 72 79 7c 77 61 6c 7c 6f  ate|memory|wal|o
8300: 66 66 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ff).  */.  case 
8310: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
8320: 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20  MODE: {.    int 
8330: 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 2f 2a  eMode;        /*
8340: 20 4f 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45   One of the PAGE
8350: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58  R_JOURNALMODE_XX
8360: 58 20 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20 20 20  X symbols */.   
8370: 20 69 6e 74 20 69 69 3b 20 20 20 20 20 20 20 20   int ii;        
8380: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
8390: 65 72 20 2a 2f 0a 0a 20 20 20 20 73 71 6c 69 74  er */..    sqlit
83a0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
83b0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  (v, 1);.    sqli
83c0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
83d0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
83e0: 4e 41 4d 45 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d  NAME, "journal_m
83f0: 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ode", SQLITE_STA
8400: 54 49 43 29 3b 0a 0a 20 20 20 20 69 66 28 20 7a  TIC);..    if( z
8410: 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20  Right==0 ){.    
8420: 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
8430: 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74   no "=MODE" part
8440: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20   of the pragma, 
8450: 64 6f 20 61 20 71 75 65 72 79 20 66 6f 72 20 74  do a query for t
8460: 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  he.      ** curr
8470: 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20  ent mode */.    
8480: 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f    eMode = PAGER_
8490: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
84a0: 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
84b0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
84c0: 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74  zMode;.      int
84d0: 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c   n = sqlite3Strl
84e0: 65 6e 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20  en30(zRight);.  
84f0: 20 20 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b      for(eMode=0;
8500: 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65   (zMode = sqlite
8510: 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
8520: 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f  (eMode))!=0; eMo
8530: 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  de++){.        i
8540: 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  f( sqlite3StrNIC
8550: 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65  mp(zRight, zMode
8560: 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  , n)==0 ) break;
8570: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
8580: 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20  f( !zMode ){.   
8590: 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22       /* If the "
85a0: 3d 4d 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73  =MODE" part does
85b0: 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b   not match any k
85c0: 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  nown journal mod
85d0: 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  e,.        ** th
85e0: 65 6e 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f  en do a query */
85f0: 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
8600: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
8610: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20  DE_QUERY;.      
8620: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
8630: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55  eMode==PAGER_JOU
8640: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26  RNALMODE_QUERY &
8650: 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a  & pId2->n==0 ){.
8660: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
8670: 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   "PRAGMA journal
8680: 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41  _mode" into "PRA
8690: 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c  GMA main.journal
86a0: 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20  _mode" */.      
86b0: 69 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  iDb = 0;.      p
86c0: 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20  Id2->n = 1;.    
86d0: 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d  }.    for(ii=db-
86e0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
86f0: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i--){.      if( 
8700: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20  db->aDb[ii].pBt 
8710: 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70  && (ii==iDb || p
8720: 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20  Id2->n==0) ){.  
8730: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8740: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 69  eUsesBtree(v, ii
8750: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
8760: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
8770: 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20  OP_JournalMode, 
8780: 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20  ii, 1, eMode);. 
8790: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
87a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
87b0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
87c0: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62  ow, 1, 1);.    b
87d0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
87e0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
87f0: 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f  tabase.]journal_
8800: 73 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20  size_limit.  ** 
8810: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
8820: 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f  e.]journal_size_
8830: 6c 69 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  limit=N.  **.  *
8840: 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74 68 65  * Get or set the
8850: 20 73 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72   size limit on r
8860: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
8870: 66 69 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61  files..  */.  ca
8880: 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e  se PragTyp_JOURN
8890: 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b  AL_SIZE_LIMIT: {
88a0: 0a 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67  .    Pager *pPag
88b0: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
88c0: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
88d0: 3b 0a 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74  ;.    i64 iLimit
88e0: 20 3d 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a   = -2;.    if( z
88f0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
8900: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 52 69  qlite3Atoi64(zRi
8910: 67 68 74 2c 20 26 69 4c 69 6d 69 74 2c 20 73 71  ght, &iLimit, sq
8920: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52  lite3Strlen30(zR
8930: 69 67 68 74 29 2c 20 53 51 4c 49 54 45 5f 55 54  ight), SQLITE_UT
8940: 46 38 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69  F8);.      if( i
8950: 4c 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69  Limit<-1 ) iLimi
8960: 74 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  t = -1;.    }.  
8970: 20 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74    iLimit = sqlit
8980: 65 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69  e3PagerJournalSi
8990: 7a 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20  zeLimit(pPager, 
89a0: 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74  iLimit);.    ret
89b0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
89c0: 72 73 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f 73 69  rse, "journal_si
89d0: 7a 65 5f 6c 69 6d 69 74 22 2c 20 69 4c 69 6d 69  ze_limit", iLimi
89e0: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
89f0: 20 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   }..#endif /* SQ
8a00: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
8a10: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 20 20 2f 2a  PRAGMAS */..  /*
8a20: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
8a30: 61 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61  atabase.]auto_va
8a40: 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47 4d  cuum.  **  PRAGM
8a50: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75 74  A [database.]aut
8a60: 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a  o_vacuum=N.  **.
8a70: 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20    ** Get or set 
8a80: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
8a90: 20 64 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d   database 'auto-
8aa0: 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65  vacuum' paramete
8ab0: 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75  r..  ** The valu
8ac0: 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20  e is one of:  0 
8ad0: 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e  NONE 1 FULL 2 IN
8ae0: 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23  CREMENTAL.  */.#
8af0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8b00: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
8b10: 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 55 54  case PragTyp_AUT
8b20: 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20  O_VACUUM: {.    
8b30: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62  Btree *pBt = pDb
8b40: 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72  ->pBt;.    asser
8b50: 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20  t( pBt!=0 );.   
8b60: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
8b70: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
8b80: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 61  leInt(pParse, "a
8b90: 75 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c  uto_vacuum", sql
8ba0: 69 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f  ite3BtreeGetAuto
8bb0: 56 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20  Vacuum(pBt));.  
8bc0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
8bd0: 6e 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75  nt eAuto = getAu
8be0: 74 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29  toVacuum(zRight)
8bf0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
8c00: 65 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74  eAuto>=0 && eAut
8c10: 6f 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62  o<=2 );.      db
8c20: 2d 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20  ->nextAutovac = 
8c30: 28 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20  (u8)eAuto;.     
8c40: 20 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f   /* Call SetAuto
8c50: 56 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20  Vacuum() to set 
8c60: 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69  initialize the i
8c70: 6e 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64  nternal auto and
8c80: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76  .      ** incr-v
8c90: 61 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69  acuum flags. Thi
8ca0: 73 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e  s is required in
8cb0: 20 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65   case this conne
8cc0: 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63  ction.      ** c
8cd0: 72 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62  reates the datab
8ce0: 61 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20  ase file. It is 
8cf0: 69 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69  important that i
8d00: 74 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20  t is created.   
8d10: 20 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f     ** as an auto
8d20: 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20  -vacuum capable 
8d30: 64 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  db..      */.   
8d40: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
8d50: 74 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75  treeSetAutoVacuu
8d60: 6d 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20  m(pBt, eAuto);. 
8d70: 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
8d80: 49 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f  ITE_OK && (eAuto
8d90: 3d 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29  ==1 || eAuto==2)
8da0: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57   ){.        /* W
8db0: 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20  hen setting the 
8dc0: 61 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65  auto_vacuum mode
8dd0: 20 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c   to either "full
8de0: 22 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a  " or .        **
8df0: 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20   "incremental", 
8e00: 77 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20  write the value 
8e10: 6f 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68  of meta[6] in th
8e20: 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
8e30: 20 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f     ** file. Befo
8e40: 72 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65  re writing to me
8e50: 74 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61  ta[6], check tha
8e60: 74 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61  t meta[3] indica
8e70: 74 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  tes.        ** t
8e80: 68 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20  hat this really 
8e90: 69 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  is an auto-vacuu
8ea0: 6d 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61  m capable databa
8eb0: 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  se..        */. 
8ec0: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
8ed0: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
8ee0: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
8ef0: 28 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61  (2);.        sta
8f00: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
8f10: 4c 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20  List setMeta6[] 
8f20: 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20  = {.          { 
8f30: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
8f40: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c     0,         1,
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f60: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
8f70: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52            { OP_R
8f80: 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30  eadCookie,     0
8f90: 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20  ,         1,    
8fa0: 20 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45       BTREE_LARGE
8fb0: 53 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20  ST_ROOT_PAGE},. 
8fc0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66           { OP_If
8fd0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c  ,             1,
8fe0: 20 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20           0,     
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20              0}, 
9000: 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20     /* 2 */.     
9010: 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20       { OP_Halt, 
9020: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
9030: 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20  _OK, OE_Abort,  
9040: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
9050: 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 3 */.         
9060: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
9070: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
9080: 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   1,             
9090: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20      0},    /* 4 
90a0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f  */.          { O
90b0: 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20  P_SetCookie,    
90c0: 20 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52    0,         BTR
90d0: 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20  EE_INCR_VACUUM, 
90e0: 31 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a 20  1},    /* 5 */. 
90f0: 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20         };.      
9100: 20 20 69 6e 74 20 69 41 64 64 72 3b 0a 20 20 20    int iAddr;.   
9110: 20 20 20 20 20 69 41 64 64 72 20 3d 20 73 71 6c       iAddr = sql
9120: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
9130: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73  t(v, ArraySize(s
9140: 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65 74  etMeta6), setMet
9150: 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20  a6, iLn);.      
9160: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
9170: 6e 67 65 50 31 28 76 2c 20 69 41 64 64 72 2c 20  ngeP1(v, iAddr, 
9180: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71  iDb);.        sq
9190: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
91a0: 31 28 76 2c 20 69 41 64 64 72 2b 31 2c 20 69 44  1(v, iAddr+1, iD
91b0: 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  b);.        sqli
91c0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28  te3VdbeChangeP2(
91d0: 76 2c 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64  v, iAddr+2, iAdd
91e0: 72 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71  r+4);.        sq
91f0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
9200: 31 28 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41  1(v, iAddr+4, eA
9210: 75 74 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20  uto-1);.        
9220: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
9230: 65 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20  eP1(v, iAddr+5, 
9240: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71  iDb);.        sq
9250: 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
9260: 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20  ee(v, iDb);.    
9270: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
9280: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
9290: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
92a0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 6e  MA [database.]in
92b0: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
92c0: 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f  (N).  **.  ** Do
92d0: 20 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72   N steps of incr
92e0: 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e  emental vacuumin
92f0: 67 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e  g on a database.
9300: 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .  */.#ifndef SQ
9310: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
9320: 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67  CUUM.  case Prag
9330: 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f  Typ_INCREMENTAL_
9340: 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e  VACUUM: {.    in
9350: 74 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a  t iLimit, addr;.
9360: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
9370: 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74  0 || !sqlite3Get
9380: 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69  Int32(zRight, &i
9390: 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74  Limit) || iLimit
93a0: 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69  <=0 ){.      iLi
93b0: 6d 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66  mit = 0x7fffffff
93c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
93d0: 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
93e0: 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30  ration(pParse, 0
93f0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69  , iDb);.    sqli
9400: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9410: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69   OP_Integer, iLi
9420: 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64  mit, 1);.    add
9430: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
9440: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72  ddOp1(v, OP_Incr
9450: 56 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64  Vacuum, iDb); Vd
9460: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
9470: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9480: 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp1(v, OP_Resul
9490: 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71  tRow, 1);.    sq
94a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
94b0: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
94c0: 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   -1);.    sqlite
94d0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
94e0: 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72  P_IfPos, 1, addr
94f0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
9500: 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
9510: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
9520: 64 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ddr);.    break;
9530: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
9540: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9550: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20  _PAGER_PRAGMAS. 
9560: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
9570: 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68   [database.]cach
9580: 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41  e_size.  **  PRA
9590: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63  GMA [database.]c
95a0: 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a  ache_size=N.  **
95b0: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
95c0: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
95d0: 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73   current local s
95e0: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
95f0: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
9600: 69 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20  ize. The second 
9610: 66 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f  form sets the lo
9620: 63 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  cal.  ** page ca
9630: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20  che size value. 
9640: 20 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76   If N is positiv
9650: 65 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74  e then that is t
9660: 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f  he.  ** number o
9670: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63  f pages in the c
9680: 61 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e  ache.  If N is n
9690: 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68  egative, then th
96a0: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
96b0: 20 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74   pages is adjust
96c0: 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63  ed so that the c
96d0: 61 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62  ache uses -N kib
96e0: 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d  ibytes.  ** of m
96f0: 65 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61  emory..  */.  ca
9700: 73 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45  se PragTyp_CACHE
9710: 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73  _SIZE: {.    ass
9720: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
9730: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
9740: 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
9750: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
9760: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
9770: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 63 61 63  Int(pParse, "cac
9780: 68 65 5f 73 69 7a 65 22 2c 20 70 44 62 2d 3e 70  he_size", pDb->p
9790: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
97a0: 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ze);.    }else{.
97b0: 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d        int size =
97c0: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
97d0: 67 68 74 29 3b 0a 20 20 20 20 20 20 70 44 62 2d  ght);.      pDb-
97e0: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
97f0: 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20  size = size;.   
9800: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
9810: 65 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d  etCacheSize(pDb-
9820: 3e 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65  >pBt, pDb->pSche
9830: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b  ma->cache_size);
9840: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
9850: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
9860: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
9870: 73 65 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29  se.]mmap_size(N)
9880: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20  .  **.  ** Used 
9890: 74 6f 20 73 65 74 20 6d 61 70 70 69 6e 67 20 73  to set mapping s
98a0: 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d  ize limit. The m
98b0: 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69  apping size limi
98c0: 74 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 20 74  t is.  ** used t
98d0: 6f 20 6c 69 6d 69 74 20 74 68 65 20 61 67 67 72  o limit the aggr
98e0: 65 67 61 74 65 20 73 69 7a 65 20 6f 66 20 61 6c  egate size of al
98f0: 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64 20  l memory mapped 
9900: 72 65 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20  regions of the. 
9910: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c   ** database fil
9920: 65 2e 20 49 66 20 74 68 69 73 20 70 61 72 61 6d  e. If this param
9930: 65 74 65 72 20 69 73 20 73 65 74 20 74 6f 20 7a  eter is set to z
9940: 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79  ero, then memory
9950: 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73   mapping.  ** is
9960: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
9970: 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74  .  If N is negat
9980: 69 76 65 2c 20 74 68 65 6e 20 74 68 65 20 64 65  ive, then the de
9990: 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70  fault memory map
99a0: 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65  .  ** limit dete
99b0: 72 6d 69 6e 65 64 20 62 79 20 73 71 6c 69 74 65  rmined by sqlite
99c0: 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
99d0: 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45  CONFIG_MMAP_SIZE
99e0: 29 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54  ) is set..  ** T
99f0: 68 65 20 70 61 72 61 6d 65 74 65 72 20 4e 20 69  he parameter N i
9a00: 73 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79  s measured in by
9a10: 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  tes..  **.  ** T
9a20: 68 69 73 20 76 61 6c 75 65 20 69 73 20 61 64 76  his value is adv
9a30: 69 73 6f 72 79 2e 20 20 54 68 65 20 75 6e 64 65  isory.  The unde
9a40: 72 6c 79 69 6e 67 20 56 46 53 20 69 73 20 66 72  rlying VFS is fr
9a50: 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70  ee to memory map
9a60: 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20  .  ** as little 
9a70: 6f 72 20 61 73 20 6d 75 63 68 20 61 73 20 69 74  or as much as it
9a80: 20 77 61 6e 74 73 2e 20 20 45 78 63 65 70 74 2c   wants.  Except,
9a90: 20 69 66 20 4e 20 69 73 20 73 65 74 20 74 6f 20   if N is set to 
9aa0: 30 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  0 then the.  ** 
9ab0: 75 70 70 65 72 20 6c 61 79 65 72 73 20 77 69 6c  upper layers wil
9ac0: 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 74  l never invoke t
9ad0: 68 65 20 78 46 65 74 63 68 20 69 6e 74 65 72 66  he xFetch interf
9ae0: 61 63 65 73 20 74 6f 20 74 68 65 20 56 46 53 2e  aces to the VFS.
9af0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
9b00: 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20  gTyp_MMAP_SIZE: 
9b10: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e  {.    sqlite3_in
9b20: 74 36 34 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49  t64 sz;.#if SQLI
9b30: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
9b40: 3e 30 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  >0.    assert( s
9b50: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
9b60: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
9b70: 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  ) );.    if( zRi
9b80: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ght ){.      int
9b90: 20 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   ii;.      sqlit
9ba0: 65 33 41 74 6f 69 36 34 28 7a 52 69 67 68 74 2c  e3Atoi64(zRight,
9bb0: 20 26 73 7a 2c 20 73 71 6c 69 74 65 33 53 74 72   &sz, sqlite3Str
9bc0: 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 2c 20 53  len30(zRight), S
9bd0: 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20  QLITE_UTF8);.   
9be0: 20 20 20 69 66 28 20 73 7a 3c 30 20 29 20 73 7a     if( sz<0 ) sz
9bf0: 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c   = sqlite3Global
9c00: 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20  Config.szMmap;. 
9c10: 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e       if( pId2->n
9c20: 3d 3d 30 20 29 20 64 62 2d 3e 73 7a 4d 6d 61 70  ==0 ) db->szMmap
9c30: 20 3d 20 73 7a 3b 0a 20 20 20 20 20 20 66 6f 72   = sz;.      for
9c40: 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69  (ii=db->nDb-1; i
9c50: 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20  i>=0; ii--){.   
9c60: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
9c70: 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d  [ii].pBt && (ii=
9c80: 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d  =iDb || pId2->n=
9c90: 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  =0) ){.         
9ca0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
9cb0: 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d 3e 61 44  MmapLimit(db->aD
9cc0: 62 5b 69 69 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a  b[ii].pBt, sz);.
9cd0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9ce0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 7a 20 3d  }.    }.    sz =
9cf0: 20 2d 31 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   -1;.    rc = sq
9d00: 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
9d10: 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49  ol(db, zDb, SQLI
9d20: 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49  TE_FCNTL_MMAP_SI
9d30: 5a 45 2c 20 26 73 7a 29 3b 0a 23 65 6c 73 65 0a  ZE, &sz);.#else.
9d40: 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20      sz = 0;.    
9d50: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
9d60: 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 72  #endif.    if( r
9d70: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
9d80: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
9d90: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6d  leInt(pParse, "m
9da0: 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a  map_size", sz);.
9db0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
9dc0: 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e  !=SQLITE_NOTFOUN
9dd0: 44 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73  D ){.      pPars
9de0: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20  e->nErr++;.     
9df0: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63   pParse->rc = rc
9e00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
9e10: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
9e20: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
9e30: 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41  store.  **   PRA
9e40: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  GMA temp_store =
9e50: 20 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f   "default"|"memo
9e60: 72 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a  ry"|"file".  **.
9e70: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
9e80: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
9e90: 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73  ue of the temp_s
9ea0: 74 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  tore flag.  Chan
9eb0: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f  ging.  ** the lo
9ec0: 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e  cal value does n
9ed0: 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20  ot make changes 
9ee0: 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  to the disk file
9ef0: 20 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74   and the default
9f00: 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c  .  ** value will
9f10: 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65   be restored the
9f20: 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64   next time the d
9f30: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65  atabase is opene
9f40: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74  d..  **.  ** Not
9f50: 65 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73  e that it is pos
9f60: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69  sible for the li
9f70: 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69  brary compile-ti
9f80: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20  me options to.  
9f90: 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  ** override this
9fa0: 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20   setting.  */.  
9fb0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
9fc0: 50 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69  P_STORE: {.    i
9fd0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
9fe0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
9ff0: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 65 6d  Int(pParse, "tem
a000: 70 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65  p_store", db->te
a010: 6d 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d  mp_store);.    }
a020: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e  else{.      chan
a030: 67 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50  geTempStorage(pP
a040: 61 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20  arse, zRight);. 
a050: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
a060: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
a070: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
a080: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
a090: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
a0a0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
a0b0: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
a0c0: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
a0d0: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
a0e0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
a0f0: 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f   the temp_store_
a100: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
a110: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
a120: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
a130: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
a140: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
a150: 72 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  r temporary file
a160: 73 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20  s..  ** Setting 
a170: 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67  to a null string
a180: 20 72 65 76 65 72 74 73 20 74 6f 20 74 68 65 20   reverts to the 
a190: 64 65 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72  default temporar
a1a0: 79 20 64 69 72 65 63 74 6f 72 79 20 73 65 61 72  y directory sear
a1b0: 63 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70  ch..  ** If temp
a1c0: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory 
a1d0: 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e  is changed, then
a1e0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
a1f0: 74 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a  torage..  **.  *
a200: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
a210: 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45  _TEMP_STORE_DIRE
a220: 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28  CTORY: {.    if(
a230: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
a240: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74 65    if( sqlite3_te
a250: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a  mp_directory ){.
a260: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a270: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
a280: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
a290: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a2a0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
a2b0: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
a2c0: 20 20 20 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f      "temp_store_
a2d0: 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49  directory", SQLI
a2e0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
a2f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a300: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
a310: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71  ng8, 0, 1, 0, sq
a320: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
a330: 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  tory, 0);.      
a340: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a350: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
a360: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
a370: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23    }.    }else{.#
a380: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a390: 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28  IT_WSD.      if(
a3a0: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
a3b0: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
a3c0: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
a3d0: 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e  te3OsAccess(db->
a3e0: 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51  pVfs, zRight, SQ
a3f0: 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44  LITE_ACCESS_READ
a400: 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20  WRITE, &res);.  
a410: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
a420: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
a430: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
a440: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
a450: 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72  Parse, "not a wr
a460: 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79  itable directory
a470: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  ");.          go
a480: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
a490: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
a4a0: 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54  .      if( SQLIT
a4b0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a  E_TEMP_STORE==0.
a4c0: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
a4d0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20  E_TEMP_STORE==1 
a4e0: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
a4f0: 65 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20  e<=1).       || 
a500: 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f  (SQLITE_TEMP_STO
a510: 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d  RE==2 && db->tem
a520: 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20  p_store==1).    
a530: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76    ){.        inv
a540: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
a550: 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ge(pParse);.    
a560: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
a570: 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74  3_free(sqlite3_t
a580: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  emp_directory);.
a590: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
a5a0: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  [0] ){.        s
a5b0: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
a5c0: 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  ctory = sqlite3_
a5d0: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52  mprintf("%s", zR
a5e0: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ight);.      }el
a5f0: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
a600: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
a610: 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ry = 0;.      }.
a620: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
a630: 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20  _OMIT_WSD */.   
a640: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
a650: 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53  }..#if SQLITE_OS
a660: 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  _WIN.  /*.  **  
a670: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
a680: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
a690: 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f  *   PRAGMA data_
a6a0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
a6b0: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
a6c0: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
a6d0: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
a6e0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
a6f0: 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f   the data_store_
a700: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
a710: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
a720: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
a730: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
a740: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
a750: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
a760: 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20   that.  ** were 
a770: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
a780: 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61   relative pathna
a790: 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20  me.  Setting to 
a7a0: 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65  a null string re
a7b0: 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68  verts.  ** to th
a7c0: 65 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61  e default databa
a7d0: 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68  se directory, wh
a7e0: 69 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65  ich for database
a7f0: 20 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64   files specified
a800: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c   with.  ** a rel
a810: 61 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20  ative path will 
a820: 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65  probably be base
a830: 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d on the current
a840: 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
a850: 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e  he.  ** process.
a860: 20 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20    Database file 
a870: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
a880: 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20  n absolute path 
a890: 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64  are not impacted
a8a0: 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65  .  ** by this se
a8b0: 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73  tting, regardles
a8c0: 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a  s of its value..
a8d0: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
a8e0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54   PragTyp_DATA_ST
a8f0: 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b  ORE_DIRECTORY: {
a900: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
a910: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
a920: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
a930: 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20  tory ){.        
a940: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
a950: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
a960: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a970: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
a980: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a   COLNAME_NAME, .
a990: 20 20 20 20 20 20 20 20 20 20 20 20 22 64 61 74              "dat
a9a0: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
a9b0: 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  y", SQLITE_STATI
a9c0: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
a9d0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
a9e0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
a9f0: 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f 64 61  1, 0, sqlite3_da
aa00: 74 61 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29  ta_directory, 0)
aa10: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
aa20: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
aa30: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
aa40: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1);.      }.    
aa50: 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53  }else{.#ifndef S
aa60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
aa70: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
aa80: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  0] ){.        in
aa90: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72  t res;.        r
aaa0: 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63  c = sqlite3OsAcc
aab0: 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52  ess(db->pVfs, zR
aac0: 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43  ight, SQLITE_ACC
aad0: 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26  ESS_READWRITE, &
aae0: 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
aaf0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
ab00: 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  || res==0 ){.   
ab10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
ab20: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
ab30: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
ab40: 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20  irectory");.    
ab50: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
ab60: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d  a_out;.        }
ab70: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
ab80: 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69  qlite3_free(sqli
ab90: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
aba0: 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ry);.      if( z
abb0: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
abc0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61      sqlite3_data
abd0: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c  _directory = sql
abe0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
abf0: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
ac00: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
ac10: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
ac20: 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20  rectory = 0;.   
ac30: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
ac40: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a  QLITE_OMIT_WSD *
ac50: 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  /.    }.    brea
ac60: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  k;.  }.#endif..#
ac70: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
ac80: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20  _LOCKING_STYLE. 
ac90: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
aca0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
acb0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a  k_proxy_file.  *
acc0: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
acd0: 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79  base.]lock_proxy
ace0: 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22  _file = ":auto:"
acf0: 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68  |"lock_file_path
ad00: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
ad10: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  rn or set the va
ad20: 6c 75 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f  lue of the lock_
ad30: 70 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e  proxy_file flag.
ad40: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
ad50: 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61  the value sets a
ad60: 20 73 70 65 63 69 66 69 63 20 66 69 6c 65 20 74   specific file t
ad70: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
ad80: 74 61 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f  tabase access lo
ad90: 63 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  cks..  **.  */. 
ada0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
adb0: 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b  CK_PROXY_FILE: {
adc0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
add0: 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20   ){.      Pager 
ade0: 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65  *pPager = sqlite
adf0: 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d  3BtreePager(pDb-
ae00: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 63 68 61  >pBt);.      cha
ae10: 72 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61  r *proxy_file_pa
ae20: 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20  th = NULL;.     
ae30: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70   sqlite3_file *p
ae40: 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61  File = sqlite3Pa
ae50: 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b  gerFile(pPager);
ae60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73  .      sqlite3Os
ae70: 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28  FileControlHint(
ae80: 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45  pFile, SQLITE_GE
ae90: 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c  T_LOCKPROXYFILE,
aea0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
aeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70 72               &pr
aec0: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a  oxy_file_path);.
aed0: 20 20 20 20 20 20 0a 20 20 20 20 20 20 69 66 28        .      if(
aee0: 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68   proxy_file_path
aef0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
af00: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
af10: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  s(v, 1);.       
af20: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
af30: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
af40: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20  NAME_NAME, .    
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af60: 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63 6b 5f            "lock_
af70: 70 72 6f 78 79 5f 66 69 6c 65 22 2c 20 53 51 4c  proxy_file", SQL
af80: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
af90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
afa0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
afb0: 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70  ing8, 0, 1, 0, p
afc0: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 2c 20  roxy_file_path, 
afd0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
afe0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
aff0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
b000: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
b010: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50    }else{.      P
b020: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
b030: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
b040: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
b050: 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a    sqlite3_file *
b060: 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50  pFile = sqlite3P
b070: 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29  agerFile(pPager)
b080: 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b  ;.      int res;
b090: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
b0a0: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
b0b0: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
b0c0: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
b0d0: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
b0e0: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b110: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
b120: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
b130: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
b140: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
b150: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
b160: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b190: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  NULL);.      }. 
b1a0: 20 20 20 20 20 69 66 28 20 72 65 73 21 3d 53 51       if( res!=SQ
b1b0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
b1c0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
b1d0: 73 67 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c  sg(pParse, "fail
b1e0: 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70  ed to set lock p
b1f0: 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20  roxy file");.   
b200: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
b210: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
b220: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
b230: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
b240: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
b250: 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20  NG_STYLE */     
b260: 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a   .    .  /*.  **
b270: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
b280: 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ase.]synchronous
b290: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
b2a0: 64 61 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72  database.]synchr
b2b0: 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52  onous=OFF|ON|NOR
b2c0: 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20  MAL|FULL.  **.  
b2d0: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
b2e0: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
b2f0: 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e   of the synchron
b300: 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ous flag.  Chang
b310: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
b320: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
b330: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
b340: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
b350: 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  and the.  ** def
b360: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will 
b370: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
b380: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
b390: 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f  tabase is.  ** o
b3a0: 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  pened..  */.  ca
b3b0: 73 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48  se PragTyp_SYNCH
b3c0: 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66  RONOUS: {.    if
b3d0: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
b3e0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
b3f0: 6e 74 28 70 50 61 72 73 65 2c 20 22 73 79 6e 63  nt(pParse, "sync
b400: 68 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73  hronous", pDb->s
b410: 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a  afety_level-1);.
b420: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b430: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
b440: 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
b450: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
b460: 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20  pParse, .       
b470: 20 20 20 20 20 22 53 61 66 65 74 79 20 6c 65 76       "Safety lev
b480: 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68  el may not be ch
b490: 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74  anged inside a t
b4a0: 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20  ransaction");.  
b4b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b4c0: 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c     pDb->safety_l
b4d0: 65 76 65 6c 20 3d 20 67 65 74 53 61 66 65 74 79  evel = getSafety
b4e0: 4c 65 76 65 6c 28 7a 52 69 67 68 74 2c 30 2c 31  Level(zRight,0,1
b4f0: 29 2b 31 3b 0a 20 20 20 20 20 20 20 20 73 65 74  )+1;.        set
b500: 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62  AllPagerFlags(db
b510: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
b520: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
b530: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
b540: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
b550: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
b560: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
b570: 5f 50 52 41 47 4d 41 53 0a 20 20 63 61 73 65 20  _PRAGMAS.  case 
b580: 50 72 61 67 54 79 70 5f 46 4c 41 47 3a 20 7b 0a  PragTyp_FLAG: {.
b590: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
b5a0: 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  0 ){.      retur
b5b0: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
b5c0: 65 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  e, aPragmaNames[
b5d0: 6d 69 64 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20  mid].zName,.    
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 61 50   (db->flags & aP
b600: 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e  ragmaNames[mid].
b610: 69 41 72 67 29 21 3d 30 20 29 3b 0a 20 20 20 20  iArg)!=0 );.    
b620: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
b630: 20 6d 61 73 6b 20 3d 20 61 50 72 61 67 6d 61 4e   mask = aPragmaN
b640: 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 3b 20  ames[mid].iArg; 
b650: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69     /* Mask of bi
b660: 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65  ts to set or cle
b670: 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ar. */.      if(
b680: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
b690: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
b6a0: 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70   Foreign key sup
b6b0: 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20  port may not be 
b6c0: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
b6d0: 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20  led while not.  
b6e0: 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f        ** in auto
b6f0: 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a  -commit mode.  *
b700: 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26  /.        mask &
b710: 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69  = ~(SQLITE_Forei
b720: 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d  gnKeys);.      }
b730: 0a 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ..      if( sqli
b740: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
b750: 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20  ight, 0) ){.    
b760: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
b770: 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c   mask;.      }el
b780: 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
b790: 66 6c 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a  flags &= ~mask;.
b7a0: 20 20 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b          if( mask
b7b0: 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  ==SQLITE_DeferFK
b7c0: 73 20 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s ) db->nDeferre
b7d0: 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20  dImmCons = 0;.  
b7e0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
b7f0: 4d 61 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67  Many of the flag
b800: 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20  -pragmas modify 
b810: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
b820: 65 64 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20  ed by the SQL . 
b830: 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72       ** compiler
b840: 20 28 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e   (eg. count_chan
b850: 67 65 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20  ges). So add an 
b860: 6f 70 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65  opcode to expire
b870: 20 61 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f   all.      ** co
b880: 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65  mpiled SQL state
b890: 6d 65 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69  ments after modi
b8a0: 66 79 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76  fying a pragma v
b8b0: 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  alue..      */. 
b8c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b8d0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70  AddOp2(v, OP_Exp
b8e0: 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  ire, 0, 0);.    
b8f0: 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61    setAllPagerFla
b900: 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20  gs(db);.    }.  
b910: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
b920: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
b930: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20  IT_FLAG_PRAGMAS 
b940: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
b950: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
b960: 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a  RAGMAS.  /*.  **
b970: 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f     PRAGMA table_
b980: 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20  info(<table>).  
b990: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61  **.  ** Return a
b9a0: 20 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20   single row for 
b9b0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  each column of t
b9c0: 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20  he named table. 
b9d0: 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20  The columns of. 
b9e0: 20 2a 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64   ** the returned
b9f0: 20 64 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20   data set are:. 
ba00: 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20   **.  ** cid:   
ba10: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28       Column id (
ba20: 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65  numbered from le
ba30: 66 74 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61  ft to right, sta
ba40: 72 74 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a  rting at 0).  **
ba50: 20 6e 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c   name:       Col
ba60: 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79  umn name.  ** ty
ba70: 70 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  pe:       Column
ba80: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
ba90: 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a  e..  ** notnull:
baa0: 20 20 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54      True if 'NOT
bab0: 20 4e 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f   NULL' is part o
bac0: 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61  f column declara
bad0: 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76  tion.  ** dflt_v
bae0: 61 6c 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c  alue: The defaul
baf0: 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  t value for the 
bb00: 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a  column, if any..
bb10: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
bb20: 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20  Typ_TABLE_INFO: 
bb30: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
bb40: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
bb50: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
bb60: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
bb70: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
bb80: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
bb90: 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20     int i, k;.   
bba0: 20 20 20 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d     int nHidden =
bbb0: 20 30 3b 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e   0;.      Column
bbc0: 20 2a 70 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e   *pCol;.      In
bbd0: 64 65 78 20 2a 70 50 6b 20 3d 20 73 71 6c 69 74  dex *pPk = sqlit
bbe0: 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
bbf0: 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20 73  x(pTab);.      s
bc00: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
bc10: 43 6f 6c 73 28 76 2c 20 36 29 3b 0a 20 20 20 20  Cols(v, 6);.    
bc20: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
bc30: 20 36 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   6;.      sqlite
bc40: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
bc50: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
bc60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bc70: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
bc80: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
bc90: 22 63 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54  "cid", SQLITE_ST
bca0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
bcb0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
bcc0: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
bcd0: 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53  _NAME, "name", S
bce0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
bcf0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bd00: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
bd10: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
bd20: 74 79 70 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  type", SQLITE_ST
bd30: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
bd40: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
bd50: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
bd60: 5f 4e 41 4d 45 2c 20 22 6e 6f 74 6e 75 6c 6c 22  _NAME, "notnull"
bd70: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
bd80: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
bd90: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
bda0: 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   4, COLNAME_NAME
bdb0: 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20  , "dflt_value", 
bdc0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
bdd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bde0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35  eSetColName(v, 5
bdf0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
be00: 22 70 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  "pk", SQLITE_STA
be10: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
be20: 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
be30: 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54  Names(pParse, pT
be40: 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  ab);.      for(i
be50: 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61  =0, pCol=pTab->a
be60: 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f  Col; i<pTab->nCo
be70: 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b  l; i++, pCol++){
be80: 0a 20 20 20 20 20 20 20 20 69 66 28 20 49 73 48  .        if( IsH
be90: 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c  iddenColumn(pCol
bea0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e  ) ){.          n
beb0: 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20  Hidden++;.      
bec0: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
bed0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
bee0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bef0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
bf00: 20 69 2d 6e 48 69 64 64 65 6e 2c 20 31 29 3b 0a   i-nHidden, 1);.
bf10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bf20: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
bf30: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
bf40: 2c 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 30  , pCol->zName, 0
bf50: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
bf60: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
bf70: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
bf80: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
bf90: 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43  pCol->zType ? pC
bfa0: 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c 20  ol->zType : "", 
bfb0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
bfc0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bfd0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 28 70 43   OP_Integer, (pC
bfe0: 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20  ol->notNull ? 1 
bff0: 3a 20 30 29 2c 20 34 29 3b 0a 20 20 20 20 20 20  : 0), 4);.      
c000: 20 20 69 66 28 20 70 43 6f 6c 2d 3e 7a 44 66 6c    if( pCol->zDfl
c010: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  t ){.          s
c020: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
c030: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
c040: 30 2c 20 35 2c 20 30 2c 20 28 63 68 61 72 2a 29  0, 5, 0, (char*)
c050: 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 20 30 29 3b  pCol->zDflt, 0);
c060: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
c070: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c080: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c090: 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 29 3b 0a 20  P_Null, 0, 5);. 
c0a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
c0b0: 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46   if( (pCol->colF
c0c0: 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50  lags & COLFLAG_P
c0d0: 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20  RIMKEY)==0 ){.  
c0e0: 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
c0f0: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
c100: 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20   pPk==0 ){.     
c110: 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20       k = 1;.    
c120: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c130: 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b 20 41 4c       for(k=1; AL
c140: 57 41 59 53 28 6b 3c 3d 70 54 61 62 2d 3e 6e 43  WAYS(k<=pTab->nC
c150: 6f 6c 29 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f  ol) && pPk->aiCo
c160: 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b  lumn[k-1]!=i; k+
c170: 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  +){}.        }. 
c180: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c190: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
c1a0: 6e 74 65 67 65 72 2c 20 6b 2c 20 36 29 3b 0a 20  nteger, k, 6);. 
c1b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c1c0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
c1d0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b  esultRow, 1, 6);
c1e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
c1f0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
c200: 61 73 65 20 50 72 61 67 54 79 70 5f 53 54 41 54  ase PragTyp_STAT
c210: 53 3a 20 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  S: {.    Index *
c220: 70 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45 6c  pIdx;.    HashEl
c230: 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73  em *i;.    v = s
c240: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
c250: 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  arse);.    sqlit
c260: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
c270: 28 76 2c 20 34 29 3b 0a 20 20 20 20 70 50 61 72  (v, 4);.    pPar
c280: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20  se->nMem = 4;.  
c290: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
c2a0: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
c2b0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69  , iDb);.    sqli
c2c0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c2d0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
c2e0: 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53  NAME, "table", S
c2f0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c300: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c310: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
c320: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e  OLNAME_NAME, "in
c330: 64 65 78 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  dex", SQLITE_STA
c340: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
c350: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
c360: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
c370: 4d 45 2c 20 22 77 69 64 74 68 22 2c 20 53 51 4c  ME, "width", SQL
c380: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c390: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
c3a0: 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c  olName(v, 3, COL
c3b0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 68 65 69 67  NAME_NAME, "heig
c3c0: 68 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ht", SQLITE_STAT
c3d0: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 73  IC);.    for(i=s
c3e0: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
c3f0: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 74 62  pDb->pSchema->tb
c400: 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d 73 71 6c  lHash); i; i=sql
c410: 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b  iteHashNext(i)){
c420: 0a 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54  .      Table *pT
c430: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
c440: 61 74 61 28 69 29 3b 0a 20 20 20 20 20 20 73 71  ata(i);.      sq
c450: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c460: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c470: 2c 20 31 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e  , 1, 0, pTab->zN
c480: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  ame, 0);.      s
c490: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c4a0: 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20  (v, OP_Null, 0, 
c4b0: 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2);.      sqlite
c4c0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c4d0: 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20  P_Integer,.     
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4f0: 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74        (int)sqlit
c500: 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54  e3LogEstToInt(pT
c510: 61 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 20 33  ab->szTabRow), 3
c520: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c530: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c540: 5f 49 6e 74 65 67 65 72 2c 20 28 69 6e 74 29 70  _Integer, (int)p
c550: 54 61 62 2d 3e 6e 52 6f 77 45 73 74 2c 20 34 29  Tab->nRowEst, 4)
c560: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c570: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c580: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29  ResultRow, 1, 4)
c590: 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78  ;.      for(pIdx
c5a0: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
c5b0: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
c5c0: 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20  pNext){.        
c5d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c5e0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
c5f0: 20 30 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e   0, 2, 0, pIdx->
c600: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
c610: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c620: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c630: 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c650: 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67   (int)sqlite3Log
c660: 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e 73  EstToInt(pIdx->s
c670: 7a 49 64 78 52 6f 77 29 2c 20 33 29 3b 0a 20 20  zIdxRow), 3);.  
c680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c690: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c6a0: 74 65 67 65 72 2c 20 28 69 6e 74 29 70 49 64 78  teger, (int)pIdx
c6b0: 2d 3e 61 69 52 6f 77 45 73 74 5b 30 5d 2c 20 34  ->aiRowEst[0], 4
c6c0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c6d0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c6e0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
c6f0: 20 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   4);.      }.   
c700: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
c710: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
c720: 49 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20  INDEX_INFO: if( 
c730: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e  zRight ){.    In
c740: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54  dex *pIdx;.    T
c750: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
c760: 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46 69  pIdx = sqlite3Fi
c770: 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52 69 67  ndIndex(db, zRig
c780: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
c790: 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20 20  ( pIdx ){.      
c7a0: 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 70 54 61  int i;.      pTa
c7b0: 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c 65  b = pIdx->pTable
c7c0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c7d0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
c7e0: 20 33 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73   3);.      pPars
c7f0: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
c800: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
c810: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
c820: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  e, iDb);.      s
c830: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
c840: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
c850: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 6e 6f 22  ME_NAME, "seqno"
c860: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
c870: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c880: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
c890: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
c8a0: 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45 5f  , "cid", SQLITE_
c8b0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
c8c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
c8d0: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
c8e0: 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c  ME_NAME, "name",
c8f0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
c900: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
c910: 69 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b  i<pIdx->nKeyCol;
c920: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
c930: 31 36 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e  16 cnum = pIdx->
c940: 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20  aiColumn[i];.   
c950: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c960: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c970: 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20  eger, i, 1);.   
c980: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c990: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c9a0: 65 67 65 72 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a  eger, cnum, 2);.
c9b0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
c9c0: 70 54 61 62 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20  pTab->nCol>cnum 
c9d0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c9e0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
c9f0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
ca00: 2c 20 30 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b  , 0, pTab->aCol[
ca10: 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b  cnum].zName, 0);
ca20: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ca30: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ca40: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33  _ResultRow, 1, 3
ca50: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
ca60: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
ca70: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e   case PragTyp_IN
ca80: 44 45 58 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52  DEX_LIST: if( zR
ca90: 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65  ight ){.    Inde
caa0: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62  x *pIdx;.    Tab
cab0: 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e  le *pTab;.    in
cac0: 74 20 69 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  t i;.    pTab = 
cad0: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
cae0: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
caf0: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
cb00: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
cb10: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
cb20: 73 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  se);.      sqlit
cb30: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
cb40: 28 76 2c 20 33 29 3b 0a 20 20 20 20 20 20 70 50  (v, 3);.      pP
cb50: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a  arse->nMem = 3;.
cb60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
cb70: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
cb80: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
cb90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
cba0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
cbb0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71  LNAME_NAME, "seq
cbc0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
cbd0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
cbe0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
cbf0: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
cc00: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
cc10: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
cc20: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
cc30: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
cc40: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 75 6e 69 71  NAME_NAME, "uniq
cc50: 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ue", SQLITE_STAT
cc60: 49 43 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70  IC);.      for(p
cc70: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
cc80: 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20 70 49 64  , i=0; pIdx; pId
cc90: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 69  x=pIdx->pNext, i
cca0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
ccb0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ccc0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c  , OP_Integer, i,
ccd0: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
cce0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
ccf0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
cd00: 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61   2, 0, pIdx->zNa
cd10: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
cd20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cd30: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
cd40: 20 70 49 64 78 2d 3e 6f 6e 45 72 72 6f 72 21 3d   pIdx->onError!=
cd50: 4f 45 5f 4e 6f 6e 65 2c 20 33 29 3b 0a 20 20 20  OE_None, 3);.   
cd60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cd70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
cd80: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
cd90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
cda0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
cdb0: 65 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41  e PragTyp_DATABA
cdc0: 53 45 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69  SE_LIST: {.    i
cdd0: 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65  nt i;.    sqlite
cde0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
cdf0: 76 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 3);.    pPars
ce00: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
ce10: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
ce20: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
ce30: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22  NAME_NAME, "seq"
ce40: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
ce50: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
ce60: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
ce70: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
ce80: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
ce90: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
cea0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
ceb0: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
cec0: 4e 41 4d 45 2c 20 22 66 69 6c 65 22 2c 20 53 51  NAME, "file", SQ
ced0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
cee0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
cef0: 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
cf00: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d    if( db->aDb[i]
cf10: 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  .pBt==0 ) contin
cf20: 75 65 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ue;.      assert
cf30: 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ( db->aDb[i].zNa
cf40: 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73  me!=0 );.      s
cf50: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cf60: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
cf70: 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  i, 1);.      sql
cf80: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
cf90: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
cfa0: 20 32 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69   2, 0, db->aDb[i
cfb0: 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ].zName, 0);.   
cfc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cfd0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
cfe0: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20  g8, 0, 3, 0,.   
cff0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
d000: 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d 65 28  treeGetFilename(
d010: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 2c  db->aDb[i].pBt),
d020: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
d030: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d040: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
d050: 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   3);.    }.  }. 
d060: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
d070: 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f  PragTyp_COLLATIO
d080: 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e  N_LIST: {.    in
d090: 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 48 61 73  t i = 0;.    Has
d0a0: 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 73 71  hElem *p;.    sq
d0b0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
d0c0: 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70  ols(v, 2);.    p
d0d0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b  Parse->nMem = 2;
d0e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d0f0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
d100: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d110: 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  seq", SQLITE_STA
d120: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
d130: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d140: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
d150: 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49  ME, "name", SQLI
d160: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d170: 66 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68  for(p=sqliteHash
d180: 46 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c  First(&db->aColl
d190: 53 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74  Seq); p; p=sqlit
d1a0: 65 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20  eHashNext(p)){. 
d1b0: 20 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43       CollSeq *pC
d1c0: 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a  oll = (CollSeq *
d1d0: 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28  )sqliteHashData(
d1e0: 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  p);.      sqlite
d1f0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d200: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2b 2b 2c 20  P_Integer, i++, 
d210: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
d220: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
d230: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
d240: 20 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65   0, pColl->zName
d250: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
d260: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d270: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
d280: 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , 2);.    }.  }.
d290: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
d2a0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  /* SQLITE_OMIT_S
d2b0: 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f  CHEMA_PRAGMAS */
d2c0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
d2d0: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
d2e0: 59 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  Y.  case PragTyp
d2f0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53  _FOREIGN_KEY_LIS
d300: 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  T: if( zRight ){
d310: 0a 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a  .    FKey *pFK;.
d320: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
d330: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
d340: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
d350: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
d360: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
d370: 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
d380: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
d390: 0a 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54 61  .      pFK = pTa
d3a0: 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20 20  b->pFKey;.      
d3b0: 69 66 28 20 70 46 4b 20 29 7b 0a 20 20 20 20 20  if( pFK ){.     
d3c0: 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20     int i = 0; . 
d3d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d3e0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
d3f0: 38 29 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72  8);.        pPar
d400: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20  se->nMem = 8;.  
d410: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
d420: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
d430: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
d440: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d450: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
d460: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69  COLNAME_NAME, "i
d470: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
d480: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
d490: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d4a0: 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
d4b0: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
d4c0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d4d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d4e0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
d4f0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d500: 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53  table", SQLITE_S
d510: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
d520: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d530: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
d540: 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 72 6f 6d 22  AME_NAME, "from"
d550: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d560: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d570: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d580: 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 4, COLNAME_NA
d590: 4d 45 2c 20 22 74 6f 22 2c 20 53 51 4c 49 54 45  ME, "to", SQLITE
d5a0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
d5b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
d5c0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f  ColName(v, 5, CO
d5d0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f  LNAME_NAME, "on_
d5e0: 75 70 64 61 74 65 22 2c 20 53 51 4c 49 54 45 5f  update", SQLITE_
d5f0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
d600: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
d610: 6f 6c 4e 61 6d 65 28 76 2c 20 36 2c 20 43 4f 4c  olName(v, 6, COL
d620: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 64  NAME_NAME, "on_d
d630: 65 6c 65 74 65 22 2c 20 53 51 4c 49 54 45 5f 53  elete", SQLITE_S
d640: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
d650: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d660: 6c 4e 61 6d 65 28 76 2c 20 37 2c 20 43 4f 4c 4e  lName(v, 7, COLN
d670: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6d 61 74 63 68  AME_NAME, "match
d680: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d690: 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  );.        while
d6a0: 28 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20  (pFK){.         
d6b0: 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20   int j;.        
d6c0: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b    for(j=0; j<pFK
d6d0: 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20  ->nCol; j++){.  
d6e0: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
d6f0: 7a 43 6f 6c 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c  zCol = pFK->aCol
d700: 5b 6a 5d 2e 7a 43 6f 6c 3b 0a 20 20 20 20 20 20  [j].zCol;.      
d710: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 44        char *zOnD
d720: 65 6c 65 74 65 20 3d 20 28 63 68 61 72 20 2a 29  elete = (char *)
d730: 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e  actionName(pFK->
d740: 61 41 63 74 69 6f 6e 5b 30 5d 29 3b 0a 20 20 20  aAction[0]);.   
d750: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
d760: 4f 6e 55 70 64 61 74 65 20 3d 20 28 63 68 61 72  OnUpdate = (char
d770: 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46   *)actionName(pF
d780: 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 3b 0a  K->aAction[1]);.
d790: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d7a0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d7b0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20   OP_Integer, i, 
d7c0: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  1);.            
d7d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d7e0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
d7f0: 20 6a 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20   j, 2);.        
d800: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d810: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d820: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 46  ng8, 0, 3, 0, pF
d830: 4b 2d 3e 7a 54 6f 2c 20 30 29 3b 0a 20 20 20 20  K->zTo, 0);.    
d840: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d850: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
d860: 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30  String8, 0, 4, 0
d870: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d890: 70 54 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e  pTab->aCol[pFK->
d8a0: 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a  aCol[j].iFrom].z
d8b0: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
d8c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d8d0: 65 41 64 64 4f 70 34 28 76 2c 20 7a 43 6f 6c 20  eAddOp4(v, zCol 
d8e0: 3f 20 4f 50 5f 53 74 72 69 6e 67 38 20 3a 20 4f  ? OP_String8 : O
d8f0: 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 2c 20 30 2c  P_Null, 0, 5, 0,
d900: 20 7a 43 6f 6c 2c 20 30 29 3b 0a 20 20 20 20 20   zCol, 0);.     
d910: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d920: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
d930: 74 72 69 6e 67 38 2c 20 30 2c 20 36 2c 20 30 2c  tring8, 0, 6, 0,
d940: 20 7a 4f 6e 55 70 64 61 74 65 2c 20 30 29 3b 0a   zOnUpdate, 0);.
d950: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d960: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
d970: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
d980: 37 2c 20 30 2c 20 7a 4f 6e 44 65 6c 65 74 65 2c  7, 0, zOnDelete,
d990: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
d9a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d9b0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
d9c0: 2c 20 30 2c 20 38 2c 20 30 2c 20 22 4e 4f 4e 45  , 0, 8, 0, "NONE
d9d0: 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  ", 0);.         
d9e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d9f0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
da00: 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20  tRow, 1, 8);.   
da10: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
da20: 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20     ++i;.        
da30: 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65    pFK = pFK->pNe
da40: 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  xtFrom;.        
da50: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
da60: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
da70: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
da80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
da90: 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66  IGN_KEY) */..#if
daa0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
dab0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66  _FOREIGN_KEY.#if
dac0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
dad0: 5f 54 52 49 47 47 45 52 0a 20 20 63 61 73 65 20  _TRIGGER.  case 
dae0: 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f  PragTyp_FOREIGN_
daf0: 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20  KEY_CHECK: {.   
db00: 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20 20   FKey *pFK;     
db10: 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6f 72          /* A for
db20: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
db30: 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  int */.    Table
db40: 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
db50: 20 20 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c 65    /* Child table
db60: 20 63 6f 6e 74 61 69 6e 20 22 52 45 46 45 52 45   contain "REFERE
db70: 4e 43 45 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f  NCES" keyword */
db80: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 50 61 72  .    Table *pPar
db90: 65 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  ent;        /* P
dba0: 61 72 65 6e 74 20 74 61 62 6c 65 20 74 68 61 74  arent table that
dbb0: 20 63 68 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f   child points to
dbc0: 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   */.    Index *p
dbd0: 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Idx;           /
dbe0: 2a 20 49 6e 64 65 78 20 69 6e 20 74 68 65 20 70  * Index in the p
dbf0: 61 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20  arent table */. 
dc00: 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20     int i;       
dc10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
dc20: 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65  p counter:  Fore
dc30: 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20 66  ign key number f
dc40: 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69  or pTab */.    i
dc50: 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20  nt j;           
dc60: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
dc70: 75 6e 74 65 72 3a 20 20 46 69 65 6c 64 20 6f 66  unter:  Field of
dc80: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
dc90: 20 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c 65 6d   */.    HashElem
dca0: 20 2a 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f   *k;           /
dcb0: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20  * Loop counter: 
dcc0: 20 4e 65 78 74 20 74 61 62 6c 65 20 69 6e 20 73   Next table in s
dcd0: 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74  chema */.    int
dce0: 20 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   x;             
dcf0: 20 20 20 20 2f 2a 20 72 65 73 75 6c 74 20 76 61      /* result va
dd00: 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e  riable */.    in
dd10: 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
dd20: 20 20 20 20 20 2f 2a 20 33 20 72 65 67 69 73 74       /* 3 regist
dd30: 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 65  ers to hold a re
dd40: 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20  sult row */.    
dd50: 69 6e 74 20 72 65 67 4b 65 79 3b 20 20 20 20 20  int regKey;     
dd60: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
dd70: 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66  er to hold key f
dd80: 6f 72 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20  or checking the 
dd90: 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  FK */.    int re
dda0: 67 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20  gRow;           
ddb0: 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 74 6f   /* Registers to
ddc0: 20 68 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d   hold a row from
ddd0: 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74   pTab */.    int
dde0: 20 61 64 64 72 54 6f 70 3b 20 20 20 20 20 20 20   addrTop;       
ddf0: 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20      /* Top of a 
de00: 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20 66 6f  loop checking fo
de10: 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20  reign keys */.  
de20: 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20    int addrOk;   
de30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70           /* Jump
de40: 20 68 65 72 65 20 69 66 20 74 68 65 20 6b 65 79   here if the key
de50: 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e   is OK */.    in
de60: 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20 20  t *aiCols;      
de70: 20 20 20 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f       /* child to
de80: 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d   parent column m
de90: 61 70 70 69 6e 67 20 2a 2f 0a 0a 20 20 20 20 72  apping */..    r
dea0: 65 67 52 65 73 75 6c 74 20 3d 20 70 50 61 72 73  egResult = pPars
deb0: 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20 20 20 70  e->nMem+1;.    p
dec0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34  Parse->nMem += 4
ded0: 3b 0a 20 20 20 20 72 65 67 4b 65 79 20 3d 20 2b  ;.    regKey = +
dee0: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
def0: 20 20 20 72 65 67 52 6f 77 20 3d 20 2b 2b 70 50     regRow = ++pP
df00: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
df10: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
df20: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
df30: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
df40: 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20  mCols(v, 4);.   
df50: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
df60: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
df70: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c  NAME_NAME, "tabl
df80: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
df90: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
dfa0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
dfb0: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
dfc0: 2c 20 22 72 6f 77 69 64 22 2c 20 53 51 4c 49 54  , "rowid", SQLIT
dfd0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
dfe0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
dff0: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
e000: 4d 45 5f 4e 41 4d 45 2c 20 22 70 61 72 65 6e 74  ME_NAME, "parent
e010: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
e020: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
e030: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
e040: 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  3, COLNAME_NAME,
e050: 20 22 66 6b 69 64 22 2c 20 53 51 4c 49 54 45 5f   "fkid", SQLITE_
e060: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
e070: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
e080: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
e090: 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69 74  );.    k = sqlit
e0a0: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
e0b0: 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61  aDb[iDb].pSchema
e0c0: 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20 20 20 20  ->tblHash);.    
e0d0: 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20  while( k ){.    
e0e0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
e0f0: 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 73          pTab = s
e100: 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
e110: 65 28 70 50 61 72 73 65 2c 20 30 2c 20 7a 52 69  e(pParse, 0, zRi
e120: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20  ght, zDb);.     
e130: 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20     k = 0;.      
e140: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
e150: 54 61 62 20 3d 20 28 54 61 62 6c 65 2a 29 73 71  Tab = (Table*)sq
e160: 6c 69 74 65 48 61 73 68 44 61 74 61 28 6b 29 3b  liteHashData(k);
e170: 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 73 71 6c  .        k = sql
e180: 69 74 65 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a  iteHashNext(k);.
e190: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
e1a0: 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61  ( pTab==0 || pTa
e1b0: 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f  b->pFKey==0 ) co
e1c0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71  ntinue;.      sq
e1d0: 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70  lite3TableLock(p
e1e0: 50 61 72 73 65 2c 20 69 44 62 2c 20 70 54 61 62  Parse, iDb, pTab
e1f0: 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d  ->tnum, 0, pTab-
e200: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69  >zName);.      i
e210: 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65  f( pTab->nCol+re
e220: 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65  gRow>pParse->nMe
e230: 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  m ) pParse->nMem
e240: 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20   = pTab->nCol + 
e250: 72 65 67 52 6f 77 3b 0a 20 20 20 20 20 20 73 71  regRow;.      sq
e260: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70  lite3OpenTable(p
e270: 50 61 72 73 65 2c 20 30 2c 20 69 44 62 2c 20 70  Parse, 0, iDb, p
e280: 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  Tab, OP_OpenRead
e290: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
e2a0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
e2b0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 72 65 67  _String8, 0, reg
e2c0: 52 65 73 75 6c 74 2c 20 30 2c 20 70 54 61 62 2d  Result, 0, pTab-
e2d0: 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2f0: 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  P4_TRANSIENT);. 
e300: 20 20 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46       for(i=1, pF
e310: 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70  K=pTab->pFKey; p
e320: 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b  FK; i++, pFK=pFK
e330: 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20  ->pNextFrom){.  
e340: 20 20 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20        pParent = 
e350: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
e360: 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a  (db, pFK->zTo, z
e370: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  Db);.        if(
e380: 20 70 50 61 72 65 6e 74 3d 3d 30 20 29 20 63 6f   pParent==0 ) co
e390: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
e3a0: 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20  pIdx = 0;.      
e3b0: 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f    sqlite3TableLo
e3c0: 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20  ck(pParse, iDb, 
e3d0: 70 50 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30  pParent->tnum, 0
e3e0: 2c 20 70 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65  , pParent->zName
e3f0: 29 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20 73  );.        x = s
e400: 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
e410: 64 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72  dex(pParse, pPar
e420: 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c  ent, pFK, &pIdx,
e430: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28   0);.        if(
e440: 20 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20   x==0 ){.       
e450: 20 20 20 69 66 28 20 70 49 64 78 3d 3d 30 20 29     if( pIdx==0 )
e460: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
e470: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70  lite3OpenTable(p
e480: 50 61 72 73 65 2c 20 69 2c 20 69 44 62 2c 20 70  Parse, i, iDb, p
e490: 50 61 72 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52  Parent, OP_OpenR
e4a0: 65 61 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ead);.          
e4b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
e4c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e4d0: 64 4f 70 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52  dOp3(v, OP_OpenR
e4e0: 65 61 64 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e  ead, i, pIdx->tn
e4f0: 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  um, iDb);.      
e500: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e510: 65 53 65 74 50 34 4b 65 79 49 6e 66 6f 28 70 50  eSetP4KeyInfo(pP
e520: 61 72 73 65 2c 20 70 49 64 78 29 3b 0a 20 20 20  arse, pIdx);.   
e530: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e540: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
e550: 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    k = 0;.       
e560: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
e570: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
e580: 20 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65    assert( pParse
e590: 2d 3e 6e 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d  ->nErr>0 || pFK=
e5a0: 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
e5b0: 70 46 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  pFK ) break;.   
e5c0: 20 20 20 69 66 28 20 70 50 61 72 73 65 2d 3e 6e     if( pParse->n
e5d0: 54 61 62 3c 69 20 29 20 70 50 61 72 73 65 2d 3e  Tab<i ) pParse->
e5e0: 6e 54 61 62 20 3d 20 69 3b 0a 20 20 20 20 20 20  nTab = i;.      
e5f0: 61 64 64 72 54 6f 70 20 3d 20 73 71 6c 69 74 65  addrTop = sqlite
e600: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
e610: 50 5f 52 65 77 69 6e 64 2c 20 30 29 3b 20 56 64  P_Rewind, 0); Vd
e620: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
e630: 20 20 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46       for(i=1, pF
e640: 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70  K=pTab->pFKey; p
e650: 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b  FK; i++, pFK=pFK
e660: 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20  ->pNextFrom){.  
e670: 20 20 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20        pParent = 
e680: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
e690: 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a  (db, pFK->zTo, z
e6a0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64  Db);.        pId
e6b0: 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61  x = 0;.        a
e6c0: 69 43 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20  iCols = 0;.     
e6d0: 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29     if( pParent )
e6e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 78 20 3d 20  {.          x = 
e6f0: 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
e700: 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70 50 61  ndex(pParse, pPa
e710: 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78  rent, pFK, &pIdx
e720: 2c 20 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20  , &aiCols);.    
e730: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 78 3d        assert( x=
e740: 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  =0 );.        }.
e750: 20 20 20 20 20 20 20 20 61 64 64 72 4f 6b 20 3d          addrOk =
e760: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
e770: 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20  Label(v);.      
e780: 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 26 26    if( pParent &&
e790: 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20   pIdx==0 ){.    
e7a0: 20 20 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d        int iKey =
e7b0: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46   pFK->aCol[0].iF
e7c0: 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61  rom;.          a
e7d0: 73 73 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26  ssert( iKey>=0 &
e7e0: 26 20 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f  & iKey<pTab->nCo
e7f0: 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  l );.          i
e800: 66 28 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69  f( iKey!=pTab->i
e810: 50 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  PKey ){.        
e820: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e830: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75  ddOp3(v, OP_Colu
e840: 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67  mn, 0, iKey, reg
e850: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
e860: 20 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44    sqlite3ColumnD
e870: 65 66 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20  efault(v, pTab, 
e880: 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20  iKey, regRow);. 
e890: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e8a0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
e8b0: 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f  OP_IsNull, regRo
e8c0: 77 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65  w, addrOk); Vdbe
e8d0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
e8e0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e8f0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
e900: 5f 4d 75 73 74 42 65 49 6e 74 2c 20 72 65 67 52  _MustBeInt, regR
e910: 6f 77 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  ow, .           
e920: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
e930: 75 72 72 65 6e 74 41 64 64 72 28 76 29 2b 33 29  urrentAddr(v)+3)
e940: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
e950: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
e960: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
e970: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e980: 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30  2(v, OP_Rowid, 0
e990: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
e9a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
e9b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e9c0: 70 33 28 76 2c 20 4f 50 5f 4e 6f 74 45 78 69 73  p3(v, OP_NotExis
e9d0: 74 73 2c 20 69 2c 20 30 2c 20 72 65 67 52 6f 77  ts, i, 0, regRow
e9e0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
e9f0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
ea00: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
ea10: 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 61  v, OP_Goto, 0, a
ea20: 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  ddrOk);.        
ea30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
ea40: 70 48 65 72 65 28 76 2c 20 73 71 6c 69 74 65 33  pHere(v, sqlite3
ea50: 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28  VdbeCurrentAddr(
ea60: 76 29 2d 32 29 3b 0a 20 20 20 20 20 20 20 20 7d  v)-2);.        }
ea70: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
ea80: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e  for(j=0; j<pFK->
ea90: 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nCol; j++){.    
eaa0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
eab0: 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
eac0: 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c  OfTable(v, pTab,
ead0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   0,.            
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaf0: 61 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b  aiCols ? aiCols[
eb00: 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a  j] : pFK->aCol[j
eb10: 5d 2e 69 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b  ].iFrom, regRow+
eb20: 6a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  j);.            
eb30: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
eb40: 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20  2(v, OP_IsNull, 
eb50: 72 65 67 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b  regRow+j, addrOk
eb60: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
eb70: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  v);.          }.
eb80: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
eb90: 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  arent ){.       
eba0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ebb0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 4d 61 6b  AddOp4(v, OP_Mak
ebc0: 65 52 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c  eRecord, regRow,
ebd0: 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b   pFK->nCol, regK
ebe0: 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 20 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66    sqlite3IndexAf
ec10: 66 69 6e 69 74 79 53 74 72 28 76 2c 70 49 64 78  finityStr(v,pIdx
ec20: 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20  ), pFK->nCol);. 
ec30: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ec40: 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28  e3VdbeAddOp4Int(
ec50: 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20  v, OP_Found, i, 
ec60: 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20  addrOk, regKey, 
ec70: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
ec80: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
ec90: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
eca0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
ecb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ecc0: 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c  (v, OP_Rowid, 0,
ecd0: 20 72 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20   regResult+1);. 
ece0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ecf0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
ed00: 74 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65  tring8, 0, regRe
ed10: 73 75 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20  sult+2, 0, .    
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed30: 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20        pFK->zTo, 
ed40: 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  P4_TRANSIENT);. 
ed50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ed60: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
ed70: 6e 74 65 67 65 72 2c 20 69 2d 31 2c 20 72 65 67  nteger, i-1, reg
ed80: 52 65 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20  Result+3);.     
ed90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
eda0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
edb0: 74 52 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c  tRow, regResult,
edc0: 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   4);.        sql
edd0: 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c  ite3VdbeResolveL
ede0: 61 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b  abel(v, addrOk);
edf0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ee00: 44 62 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c  DbFree(db, aiCol
ee10: 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  s);.      }.    
ee20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ee30: 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20  Op2(v, OP_Next, 
ee40: 30 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b 20 56  0, addrTop+1); V
ee50: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
ee60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ee70: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
ee80: 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rTop);.    }.  }
ee90: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
eea0: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
eeb0: 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
eec0: 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21  ) */.#endif /* !
eed0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
eee0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
eef0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45   */..#ifndef NDE
ef00: 42 55 47 0a 20 20 63 61 73 65 20 50 72 61 67 54  BUG.  case PragT
ef10: 79 70 5f 50 41 52 53 45 52 5f 54 52 41 43 45 3a  yp_PARSER_TRACE:
ef20: 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
ef30: 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73  t ){.      if( s
ef40: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
ef50: 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20  (zRight, 0) ){. 
ef60: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
ef70: 72 73 65 72 54 72 61 63 65 28 73 74 64 65 72 72  rserTrace(stderr
ef80: 2c 20 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20  , "parser: ");. 
ef90: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
efa0: 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65      sqlite3Parse
efb0: 72 54 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20  rTrace(0, 0);.  
efc0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
efd0: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a    break;.#endif.
efe0: 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20  .  /* Reinstall 
eff0: 74 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f  the LIKE and GLO
f000: 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68  B functions.  Th
f010: 65 20 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b  e variant of LIK
f020: 45 0a 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c  E.  ** used will
f030: 20 62 65 20 63 61 73 65 20 73 65 6e 73 69 74 69   be case sensiti
f040: 76 65 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64  ve or not depend
f050: 69 6e 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a  ing on the RHS..
f060: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
f070: 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49 54 49  Typ_CASE_SENSITI
f080: 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69  VE_LIKE: {.    i
f090: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
f0a0: 20 20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74     sqlite3Regist
f0b0: 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
f0c0: 64 62 2c 20 73 71 6c 69 74 65 33 47 65 74 42 6f  db, sqlite3GetBo
f0d0: 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29  olean(zRight, 0)
f0e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
f0f0: 72 65 61 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53  reak;..#ifndef S
f100: 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f  QLITE_INTEGRITY_
f110: 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a  CHECK_ERROR_MAX.
f120: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
f130: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
f140: 45 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65  ERROR_MAX 100.#e
f150: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
f160: 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
f170: 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50  ITY_CHECK.  /* P
f180: 72 61 67 6d 61 20 22 71 75 69 63 6b 5f 63 68 65  ragma "quick_che
f190: 63 6b 22 20 69 73 20 72 65 64 75 63 65 64 20 76  ck" is reduced v
f1a0: 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20  ersion of .  ** 
f1b0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
f1c0: 64 65 73 69 67 6e 65 64 20 74 6f 20 64 65 74 65  designed to dete
f1d0: 63 74 20 6d 6f 73 74 20 64 61 74 61 62 61 73 65  ct most database
f1e0: 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a   corruption.  **
f1f0: 20 77 69 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66   without most of
f200: 20 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66   the overhead of
f210: 20 61 20 66 75 6c 6c 20 69 6e 74 65 67 72 69 74   a full integrit
f220: 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20  y-check..  */.  
f230: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 54  case PragTyp_INT
f240: 45 47 52 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a  EGRITY_CHECK: {.
f250: 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64      int i, j, ad
f260: 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20  dr, mxErr;..    
f270: 2f 2a 20 43 6f 64 65 20 74 68 61 74 20 61 70 70  /* Code that app
f280: 65 61 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  ears at the end 
f290: 6f 66 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  of the integrity
f2a0: 20 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65   check.  If no e
f2b0: 72 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73  rror.    ** mess
f2c0: 61 67 65 73 20 68 61 76 65 20 62 65 65 6e 20 67  ages have been g
f2d0: 65 6e 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74  enerated, output
f2e0: 20 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20   OK.  Otherwise 
f2f0: 6f 75 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a  output the.    *
f300: 2a 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a  * error message.
f310: 20 20 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69      */.    stati
f320: 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20  c const int iLn 
f330: 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49  = VDBE_OFFSET_LI
f340: 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61  NENO(2);.    sta
f350: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
f360: 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d  List endCode[] =
f370: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 41 64   {.      { OP_Ad
f380: 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20 30 2c  dImm,      1, 0,
f390: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
f3a0: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 0 */.      { O
f3b0: 50 5f 49 66 4e 65 67 2c 20 20 20 20 20 20 20 31  P_IfNeg,       1
f3c0: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
f3d0: 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
f3e0: 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20   { OP_String8,  
f3f0: 20 20 20 30 2c 20 33 2c 20 20 20 20 20 20 20 20     0, 3,        
f400: 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20  0},    /* 2 */. 
f410: 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
f420: 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20 20 20  Row,   3, 1,    
f430: 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a      0},.    };..
f440: 20 20 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20      int isQuick 
f450: 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  = (sqlite3Tolowe
f460: 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27  r(zLeft[0])=='q'
f470: 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  );..    /* If th
f480: 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  e PRAGMA command
f490: 20 77 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d   was of the form
f4a0: 20 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e   "PRAGMA <db>.in
f4b0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
f4c0: 20 20 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20      ** then iDb 
f4d0: 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e  is set to the in
f4e0: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
f4f0: 61 73 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ase identified b
f500: 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49  y <db>..    ** I
f510: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
f520: 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61   integrity of da
f530: 74 61 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20  tabase iDb only 
f540: 69 73 20 76 65 72 69 66 69 65 64 20 62 79 0a 20  is verified by. 
f550: 20 20 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63     ** the VDBE c
f560: 72 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20  reated below..  
f570: 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65    **.    ** Othe
f580: 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f  rwise, if the co
f590: 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79  mmand was simply
f5a0: 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   "PRAGMA integri
f5b0: 74 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20  ty_check" (or.  
f5c0: 20 20 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69    ** "PRAGMA qui
f5d0: 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e  ck_check"), then
f5e0: 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 30   iDb is set to 0
f5f0: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  . In this case, 
f600: 73 65 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74  set iDb.    ** t
f610: 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e  o -1 here, to in
f620: 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65 20  dicate that the 
f630: 56 44 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69  VDBE should veri
f640: 66 79 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  fy the integrity
f650: 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61  .    ** of all a
f660: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
f670: 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  s.  */.    asser
f680: 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  t( iDb>=0 );.   
f690: 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20   assert( iDb==0 
f6a0: 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20  || pId2->z );.  
f6b0: 20 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30    if( pId2->z==0
f6c0: 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20   ) iDb = -1;..  
f6d0: 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
f6e0: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
f6f0: 20 2a 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e   */.    pParse->
f700: 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 71  nMem = 6;.    sq
f710: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
f720: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73  ols(v, 1);.    s
f730: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
f740: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
f750: 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 74 65 67 72  ME_NAME, "integr
f760: 69 74 79 5f 63 68 65 63 6b 22 2c 20 53 51 4c 49  ity_check", SQLI
f770: 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20  TE_STATIC);..   
f780: 20 2f 2a 20 53 65 74 20 74 68 65 20 6d 61 78 69   /* Set the maxi
f790: 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74 20  mum error count 
f7a0: 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d 20 53  */.    mxErr = S
f7b0: 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f  QLITE_INTEGRITY_
f7c0: 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b  CHECK_ERROR_MAX;
f7d0: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
f7e0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
f7f0: 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c  GetInt32(zRight,
f800: 20 26 6d 78 45 72 72 29 3b 0a 20 20 20 20 20 20   &mxErr);.      
f810: 69 66 28 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a  if( mxErr<=0 ){.
f820: 20 20 20 20 20 20 20 20 6d 78 45 72 72 20 3d 20          mxErr = 
f830: 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59  SQLITE_INTEGRITY
f840: 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58  _CHECK_ERROR_MAX
f850: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
f860: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f870: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
f880: 67 65 72 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20  ger, mxErr, 1); 
f890: 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73   /* reg[1] holds
f8a0: 20 65 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a   errors left */.
f8b0: 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e  .    /* Do an in
f8c0: 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e  tegrity check on
f8d0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 66   each database f
f8e0: 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69  ile */.    for(i
f8f0: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
f900: 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45  ++){.      HashE
f910: 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20 48 61  lem *x;.      Ha
f920: 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20  sh *pTbls;.     
f930: 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20   int cnt = 0;.. 
f940: 20 20 20 20 20 69 66 28 20 4f 4d 49 54 5f 54 45       if( OMIT_TE
f950: 4d 50 44 42 20 26 26 20 69 3d 3d 31 20 29 20 63  MPDB && i==1 ) c
f960: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69  ontinue;.      i
f970: 66 28 20 69 44 62 3e 3d 30 20 26 26 20 69 21 3d  f( iDb>=0 && i!=
f980: 69 44 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  iDb ) continue;.
f990: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f  .      sqlite3Co
f9a0: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
f9b0: 50 61 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20  Parse, i);.     
f9c0: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
f9d0: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
f9e0: 49 66 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61  IfPos, 1); /* Ha
f9f0: 6c 74 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72  lt if out of err
fa00: 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 56 64 62  ors */.      Vdb
fa10: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
fa20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
fa30: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
fa40: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  , 0, 0);.      s
fa50: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
fa60: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20  re(v, addr);..  
fa70: 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74      /* Do an int
fa80: 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20  egrity check of 
fa90: 74 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20  the B-Tree.     
faa0: 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65 67   **.      ** Beg
fab0: 69 6e 20 62 79 20 66 69 6c 6c 69 6e 67 20 72 65  in by filling re
fac0: 67 69 73 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e  gisters 2, 3, ..
fad0: 2e 20 77 69 74 68 20 74 68 65 20 72 6f 6f 74 20  . with the root 
fae0: 70 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20  pages numbers.  
faf0: 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74      ** for all t
fb00: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
fb10: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
fb20: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
fb30: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
fb40: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
fb50: 28 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20  (db, i, 0) );.  
fb60: 20 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d      pTbls = &db-
fb70: 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[i].pSchema-
fb80: 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20  >tblHash;.      
fb90: 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68  for(x=sqliteHash
fba0: 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b  First(pTbls); x;
fbb0: 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   x=sqliteHashNex
fbc0: 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54  t(x)){.        T
fbd0: 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
fbe0: 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a  iteHashData(x);.
fbf0: 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70          Index *p
fc00: 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28  Idx;.        if(
fc10: 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
fc20: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
fc30: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
fc40: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54  , OP_Integer, pT
fc50: 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29  ab->tnum, 2+cnt)
fc60: 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65  ;.          Vdbe
fc70: 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22  Comment((v, "%s"
fc80: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b  , pTab->zName));
fc90: 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b  .          cnt++
fca0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
fcb0: 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61      for(pIdx=pTa
fcc0: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
fcd0: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
fce0: 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t){.          sq
fcf0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
fd00: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
fd10: 49 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74  Idx->tnum, 2+cnt
fd20: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64 62  );.          Vdb
fd30: 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73  eComment((v, "%s
fd40: 22 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 29  ", pIdx->zName))
fd50: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b  ;.          cnt+
fd60: 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
fd70: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d     }..      /* M
fd80: 61 6b 65 20 73 75 72 65 20 73 75 66 66 69 63 69  ake sure suffici
fd90: 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ent number of re
fda0: 67 69 73 74 65 72 73 20 68 61 76 65 20 62 65 65  gisters have bee
fdb0: 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  n allocated */. 
fdc0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
fdd0: 6d 20 3d 20 4d 41 58 28 20 70 50 61 72 73 65 2d  m = MAX( pParse-
fde0: 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a  >nMem, cnt+8 );.
fdf0: 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65  .      /* Do the
fe00: 20 62 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74   b-tree integrit
fe10: 79 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20  y checks */.    
fe20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
fe30: 4f 70 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72  Op3(v, OP_Integr
fe40: 69 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31  ityCk, 2, cnt, 1
fe50: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
fe60: 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
fe70: 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64  (u8)i);.      ad
fe80: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
fe90: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e  AddOp1(v, OP_IsN
fea0: 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f 76  ull, 2); VdbeCov
feb0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
fec0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
fed0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
fee0: 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20   0, 3, 0,.      
fef0: 20 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74     sqlite3MPrint
ff00: 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61  f(db, "*** in da
ff10: 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22  tabase %s ***\n"
ff20: 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
ff30: 6d 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34  me),.         P4
ff40: 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20  _DYNAMIC);.     
ff50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ff60: 70 32 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32  p2(v, OP_Move, 2
ff70: 2c 20 34 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 4);.      sqli
ff80: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
ff90: 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33   OP_Concat, 4, 3
ffa0: 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 2);.      sqli
ffb0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ffc0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32   OP_ResultRow, 2
ffd0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
ffe0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
fff0: 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20  v, addr);..     
10000 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c   /* Make sure al
10010 6c 20 74 68 65 20 69 6e 64 69 63 65 73 20 61 72  l the indices ar
10020 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 63 6f  e constructed co
10030 72 72 65 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a  rrectly..      *
10040 2f 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71  /.      for(x=sq
10050 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54  liteHashFirst(pT
10060 62 6c 73 29 3b 20 78 20 26 26 20 21 69 73 51 75  bls); x && !isQu
10070 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61 73  ick; x=sqliteHas
10080 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20  hNext(x)){.     
10090 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
100a0 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
100b0 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  x);.        Inde
100c0 78 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20  x *pIdx, *pPk;. 
100d0 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50         Index *pP
100e0 72 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20  rior = 0;.      
100f0 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20    int loopTop;. 
10100 20 20 20 20 20 20 20 69 6e 74 20 69 44 61 74 61         int iData
10110 43 75 72 2c 20 69 49 64 78 43 75 72 3b 0a 20 20  Cur, iIdxCur;.  
10120 20 20 20 20 20 20 69 6e 74 20 72 31 20 3d 20 2d        int r1 = -
10130 31 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20  1;..        if( 
10140 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20  pTab->pIndex==0 
10150 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
10160 20 20 20 20 70 50 6b 20 3d 20 48 61 73 52 6f 77      pPk = HasRow
10170 69 64 28 70 54 61 62 29 20 3f 20 30 20 3a 20 73  id(pTab) ? 0 : s
10180 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
10190 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20  Index(pTab);.   
101a0 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
101b0 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
101c0 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20   OP_IfPos, 1);  
101d0 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75 74 20 6f  /* Stop if out o
101e0 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20  f errors */.    
101f0 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65      VdbeCoverage
10200 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  (v);.        sql
10210 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10220 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29  , OP_Halt, 0, 0)
10230 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10240 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
10250 20 61 64 64 72 29 3b 0a 20 20 20 20 20 20 20 20   addr);.        
10260 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
10270 43 6c 65 61 72 28 70 50 61 72 73 65 29 3b 0a 20  Clear(pParse);. 
10280 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70         sqlite3Op
10290 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
102a0 73 28 70 50 61 72 73 65 2c 20 70 54 61 62 2c 20  s(pParse, pTab, 
102b0 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 0a 20 20 20  OP_OpenRead,.   
102c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102e0 31 2c 20 30 2c 20 26 69 44 61 74 61 43 75 72 2c  1, 0, &iDataCur,
102f0 20 26 69 49 64 78 43 75 72 29 3b 0a 20 20 20 20   &iIdxCur);.    
10300 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10310 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
10320 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20 20 20 20  ger, 0, 7);.    
10330 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64      for(j=0, pId
10340 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
10350 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
10360 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20  >pNext, j++){.  
10370 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10380 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10390 49 6e 74 65 67 65 72 2c 20 30 2c 20 38 2b 6a 29  Integer, 0, 8+j)
103a0 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72 69  ; /* index entri
103b0 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20  es counter */.  
103c0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
103d0 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d  pParse->nMem = M
103e0 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c  AX(pParse->nMem,
103f0 20 38 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 73   8+j);.        s
10400 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10410 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 69  (v, OP_Rewind, i
10420 44 61 74 61 43 75 72 2c 20 30 29 3b 20 56 64 62  DataCur, 0); Vdb
10430 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
10440 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20        loopTop = 
10450 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10460 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
10470 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 66  7, 1);.        f
10480 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
10490 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
104a0 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
104b0 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
104c0 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70     int jmp2, jmp
104d0 33 2c 20 6a 6d 70 34 3b 0a 20 20 20 20 20 20 20  3, jmp4;.       
104e0 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64 78     if( pPk==pIdx
104f0 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
10500 20 20 20 20 20 20 20 72 31 20 3d 20 73 71 6c 69         r1 = sqli
10510 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78  te3GenerateIndex
10520 4b 65 79 28 70 50 61 72 73 65 2c 20 70 49 64 78  Key(pParse, pIdx
10530 2c 20 69 44 61 74 61 43 75 72 2c 20 30 2c 20 30  , iDataCur, 0, 0
10540 2c 20 26 6a 6d 70 33 2c 0a 20 20 20 20 20 20 20  , &jmp3,.       
10550 20 20 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 70 50 72 69 6f 72 2c 20 72 31 29 3b 0a 20 20 20  pPrior, r1);.   
10580 20 20 20 20 20 20 20 70 50 72 69 6f 72 20 3d 20         pPrior = 
10590 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 20 20  pIdx;.          
105a0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
105b0 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
105c0 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20 69 6e 63  8+j, 1);  /* inc
105d0 72 65 6d 65 6e 74 20 65 6e 74 72 79 20 63 6f 75  rement entry cou
105e0 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  nt */.          
105f0 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp2 = sqlite3Vd
10600 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f  beAddOp4Int(v, O
10610 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43 75 72  P_Found, iIdxCur
10620 2b 6a 2c 20 30 2c 20 72 31 2c 0a 20 20 20 20 20  +j, 0, r1,.     
10630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10650 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b   pIdx->nColumn);
10660 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
10670 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10680 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10690 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
106a0 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74  1); /* Decrement
106b0 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a   error limit */.
106c0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
106d0 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
106e0 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
106f0 20 30 2c 20 22 72 6f 77 20 22 2c 20 50 34 5f 53   0, "row ", P4_S
10700 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
10710 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10720 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
10730 2c 20 37 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20  , 7, 3, 3);.    
10740 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10750 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
10760 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 20  ring8, 0, 4, 0, 
10770 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  " missing from i
10780 6e 64 65 78 20 22 2c 0a 20 20 20 20 20 20 20 20  ndex ",.        
10790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107a0 20 20 20 20 50 34 5f 53 54 41 54 49 43 29 3b 0a      P4_STATIC);.
107b0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
107c0 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
107d0 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20  P_Concat, 4, 3, 
107e0 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  3);.          sq
107f0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
10800 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
10810 2c 20 34 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e  , 4, 0, pIdx->zN
10820 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e  ame, P4_TRANSIEN
10830 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  T);.          sq
10840 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
10850 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c  v, OP_Concat, 4,
10860 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   3, 3);.        
10870 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10880 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
10890 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20  Row, 3, 1);.    
108a0 20 20 20 20 20 20 6a 6d 70 34 20 3d 20 73 71 6c        jmp4 = sql
108b0 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
108c0 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20  , OP_IfPos, 1); 
108d0 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
108e0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
108f0 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20  e3VdbeAddOp0(v, 
10900 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20  OP_Halt);.      
10910 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
10920 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29  umpHere(v, jmp4)
10930 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10940 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
10950 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20  v, jmp2);.      
10960 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
10970 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 6a  esolveLabel(v, j
10980 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  mp3);.        }.
10990 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
109a0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
109b0 4e 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20  Next, iDataCur, 
109c0 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f  loopTop); VdbeCo
109d0 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
109e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
109f0 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f  mpHere(v, loopTo
10a00 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  p-1);.#ifndef SQ
10a10 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
10a20 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c  OUNT.        sql
10a30 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
10a40 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
10a50 20 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20   2, 0, .        
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72               "wr
10a70 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
10a80 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f   in index ", P4_
10a90 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
10aa0 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70   for(j=0, pIdx=p
10ab0 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
10ac0 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
10ad0 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ext, j++){.     
10ae0 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49       if( pPk==pI
10af0 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  dx ) continue;. 
10b00 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20           addr = 
10b10 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
10b20 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20  ntAddr(v);.     
10b30 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10b40 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50  AddOp2(v, OP_IfP
10b50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20  os, 1, addr+2); 
10b60 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
10b70 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10b80 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
10b90 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a  OP_Halt, 0, 0);.
10ba0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10bb0 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10bc0 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72  P_Count, iIdxCur
10bd0 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20  +j, 3);.        
10be0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10bf0 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b  Op3(v, OP_Eq, 8+
10c00 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56  j, addr+8, 3); V
10c10 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
10c20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10c30 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
10c40 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29   SQLITE_NOTNULL)
10c50 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10c60 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10c70 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
10c80 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  1);.          sq
10c90 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
10ca0 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
10cb0 2c 20 33 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e  , 3, 0, pIdx->zN
10cc0 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e  ame, P4_TRANSIEN
10cd0 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  T);.          sq
10ce0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
10cf0 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c  v, OP_Concat, 3,
10d00 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20   2, 7);.        
10d10 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10d20 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
10d30 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20  Row, 7, 1);.    
10d40 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
10d50 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
10d60 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20  ECOUNT */.      
10d70 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61 64 64  } .    }.    add
10d80 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
10d90 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
10da0 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20  ySize(endCode), 
10db0 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20  endCode, iLn);. 
10dc0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
10dd0 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72 2c 20  angeP2(v, addr, 
10de0 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73 71 6c  -mxErr);.    sql
10df0 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
10e00 28 76 2c 20 61 64 64 72 2b 31 29 3b 0a 20 20 20  (v, addr+1);.   
10e10 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
10e20 67 65 50 34 28 76 2c 20 61 64 64 72 2b 32 2c 20  geP4(v, addr+2, 
10e30 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49 43 29  "ok", P4_STATIC)
10e40 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  ;.  }.  break;.#
10e50 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
10e60 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
10e70 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  HECK */..#ifndef
10e80 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
10e90 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  16.  /*.  **   P
10ea0 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20  RAGMA encoding. 
10eb0 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63   **   PRAGMA enc
10ec0 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c  oding = "utf-8"|
10ed0 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36  "utf-16"|"utf-16
10ee0 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20  le"|"utf-16be". 
10ef0 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20   **.  ** In its 
10f00 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73  first form, this
10f10 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20   pragma returns 
10f20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20  the encoding of 
10f30 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61  the main.  ** da
10f40 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 64  tabase. If the d
10f50 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69  atabase is not i
10f60 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69  nitialized, it i
10f70 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f  s initialized no
10f80 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  w..  **.  ** The
10f90 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20   second form of 
10fa0 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20 61  this pragma is a
10fb0 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61   no-op if the ma
10fc0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
10fd0 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c  .  ** has not al
10fe0 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69  ready been initi
10ff0 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20  alized. In this 
11000 63 61 73 65 20 69 74 20 73 65 74 73 20 74 68 65  case it sets the
11010 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e   default.  ** en
11020 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c  coding that will
11030 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
11040 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
11050 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c  ile if a new fil
11060 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65  e.  ** is create
11070 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e  d. If an existin
11080 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  g main database 
11090 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20  file is opened, 
110a0 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65  then the.  ** de
110b0 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64  fault text encod
110c0 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69 73  ing for the exis
110d0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 69 73  ting database is
110e0 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a   used..  ** .  *
110f0 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e  * In all cases n
11100 65 77 20 64 61 74 61 62 61 73 65 73 20 63 72 65  ew databases cre
11110 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 41  ated using the A
11120 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72  TTACH command ar
11130 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74  e.  ** created t
11140 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64  o use the same d
11150 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f  efault text enco
11160 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e  ding as the main
11170 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20   database. If.  
11180 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
11190 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65  base has not bee
111a0 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e  n initialized an
111b0 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68 65  d/or created whe
111c0 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73  n ATTACH.  ** is
111d0 20 65 78 65 63 75 74 65 64 2c 20 74 68 69 73 20   executed, this 
111e0 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74  is done before t
111f0 68 65 20 41 54 54 41 43 48 20 6f 70 65 72 61 74  he ATTACH operat
11200 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ion..  **.  ** I
11210 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  n the second for
11220 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20 73 65  m this pragma se
11230 74 73 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f  ts the text enco
11240 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20  ding to be used 
11250 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61  in.  ** new data
11260 62 61 73 65 20 66 69 6c 65 73 20 63 72 65 61 74  base files creat
11270 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 64 61  ed using this da
11280 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49  tabase handle. I
11290 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75  t is only.  ** u
112a0 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64  seful if invoked
112b0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74   immediately aft
112c0 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  er the main data
112d0 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61  base i.  */.  ca
112e0 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44  se PragTyp_ENCOD
112f0 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69  ING: {.    stati
11300 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45  c const struct E
11310 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63  ncName {.      c
11320 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20  har *zName;.    
11330 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20    u8 enc;.    } 
11340 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20  encnames[] = {. 
11350 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20       { "UTF8",  
11360 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20     SQLITE_UTF8  
11370 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b        },.      {
11380 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c   "UTF-8",    SQL
11390 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20  ITE_UTF8        
113a0 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65  },  /* Must be e
113b0 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20  lement [1] */.  
113c0 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22      { "UTF-16le"
113d0 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  , SQLITE_UTF16LE
113e0 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74       },  /* Must
113f0 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20   be element [2] 
11400 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d  */.      { "UTF-
11410 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54  16be", SQLITE_UT
11420 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a  F16BE     },  /*
11430 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74   Must be element
11440 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20   [3] */.      { 
11450 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49  "UTF16le",  SQLI
11460 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d  TE_UTF16LE     }
11470 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36  ,.      { "UTF16
11480 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46  be",  SQLITE_UTF
11490 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20  16BE     },.    
114a0 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20    { "UTF-16",   
114b0 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
114c0 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f     }, /* SQLITE_
114d0 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20  UTF16NATIVE */. 
114e0 20 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20       { "UTF16", 
114f0 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
11500 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49        }, /* SQLI
11510 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a  TE_UTF16NATIVE *
11520 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d  /.      { 0, 0 }
11530 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73  .    };.    cons
11540 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65  t struct EncName
11550 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20   *pEnc;.    if( 
11560 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a  !zRight ){    /*
11570 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
11580 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  g" */.      if( 
11590 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
115a0 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f  a(pParse) ) goto
115b0 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
115c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
115d0 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
115e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
115f0 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
11600 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
11610 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53 51 4c 49  "encoding", SQLI
11620 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
11630 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11640 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op2(v, OP_String
11650 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 20 20  8, 0, 1);.      
11660 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73  assert( encnames
11670 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e  [SQLITE_UTF8].en
11680 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  c==SQLITE_UTF8 )
11690 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
116a0 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
116b0 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51  UTF16LE].enc==SQ
116c0 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a  LITE_UTF16LE );.
116d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e        assert( en
116e0 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54  cnames[SQLITE_UT
116f0 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49  F16BE].enc==SQLI
11700 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
11710 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
11720 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20 65  hangeP4(v, -1, e
11730 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61 72  ncnames[ENC(pPar
11740 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20  se->db)].zName, 
11750 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
11760 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11770 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
11780 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
11790 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20  }else{          
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
117b0 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e   "PRAGMA encodin
117c0 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20  g = XXX" */.    
117d0 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65    /* Only change
117e0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71   the value of sq
117f0 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20  lite.enc if the 
11800 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20  database handle 
11810 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  is not.      ** 
11820 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20  initialized. If 
11830 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
11840 65 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65  e exists, the ne
11850 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c  w sqlite.enc val
11860 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c  ue.      ** will
11870 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20   be overwritten 
11880 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20  when the schema 
11890 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20  is next loaded. 
118a0 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20  If it does not. 
118b0 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20       ** already 
118c0 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20  exists, it will 
118d0 62 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  be created to us
118e0 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69  e the new encodi
118f0 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20  ng value..      
11900 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20  */.      if( .  
11910 20 20 20 20 20 20 21 28 44 62 48 61 73 50 72 6f        !(DbHasPro
11920 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f  perty(db, 0, DB_
11930 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c  SchemaLoaded)) |
11940 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48 61 73  | .        DbHas
11950 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20  Property(db, 0, 
11960 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20  DB_Empty) .     
11970 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
11980 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30  pEnc=&encnames[0
11990 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20  ]; pEnc->zName; 
119a0 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20  pEnc++){.       
119b0 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
119c0 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c  3StrICmp(zRight,
119d0 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b   pEnc->zName) ){
119e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 45 4e 43  .            ENC
119f0 28 70 50 61 72 73 65 2d 3e 64 62 29 20 3d 20 70  (pParse->db) = p
11a00 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d  Enc->enc ? pEnc-
11a10 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55 54  >enc : SQLITE_UT
11a20 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20 20 20  F16NATIVE;.     
11a30 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
11a40 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
11a50 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20    }.        if( 
11a60 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a  !pEnc->zName ){.
11a70 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11a80 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
11a90 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 65  , "unsupported e
11aa0 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52  ncoding: %s", zR
11ab0 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  ight);.        }
11ac0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
11ad0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
11ae0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
11af0 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e  T_UTF16 */..#ifn
11b00 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11b10 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50  SCHEMA_VERSION_P
11b20 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a  RAGMAS.  /*.  **
11b30 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
11b40 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73  ase.]schema_vers
11b50 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ion.  **   PRAGM
11b60 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68  A [database.]sch
11b70 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69  ema_version = <i
11b80 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
11b90 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
11ba0 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69  base.]user_versi
11bb0 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  on.  **   PRAGMA
11bc0 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72   [database.]user
11bd0 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65  _version = <inte
11be0 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ger>.  **.  **  
11bf0 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
11c00 65 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e  e.]freelist_coun
11c10 74 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20  t = <integer>.  
11c20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  **.  **   PRAGMA
11c30 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c   [database.]appl
11c40 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20  ication_id.  ** 
11c50 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
11c60 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f  se.]application_
11c70 69 64 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  id = <integer>. 
11c80 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72 61   **.  ** The pra
11c90 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76 65 72  gma's schema_ver
11ca0 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76 65  sion and user_ve
11cb0 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64 20 74  rsion are used t
11cc0 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20 20 2a  o set or get.  *
11cd0 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  * the value of t
11ce0 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
11cf0 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72 73 69  n and user-versi
11d00 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  on, respectively
11d10 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65 20  . Both.  ** the 
11d20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61  schema-version a
11d30 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65 72 73  nd the user-vers
11d40 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74 20 73  ion are 32-bit s
11d50 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 0a 20  igned integers. 
11d60 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68   ** stored in th
11d70 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
11d80 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  r..  **.  ** The
11d90 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 69   schema-cookie i
11da0 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d  s usually only m
11db0 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74 65 72  anipulated inter
11dc0 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e  nally by SQLite.
11dd0 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63 72   It.  ** is incr
11de0 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c 69 74  emented by SQLit
11df0 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20 64  e whenever the d
11e00 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
11e10 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79 0a 20  s modified (by. 
11e20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f 72 20   ** creating or 
11e30 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62 6c 65  dropping a table
11e40 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68 65 20   or index). The 
11e50 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69  schema version i
11e60 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 53  s used by.  ** S
11e70 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d 65 20  QLite each time 
11e80 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63 75  a query is execu
11e90 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ted to ensure th
11ea0 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  at the internal 
11eb0 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74 68  cache.  ** of th
11ec0 65 20 73 63 68 65 6d 61 20 75 73 65 64 20 77 68  e schema used wh
11ed0 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65  en compiling the
11ee0 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68   SQL query match
11ef0 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66  es the schema of
11f00 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61  .  ** the databa
11f10 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63 68  se against which
11f20 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75   the compiled qu
11f30 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20  ery is actually 
11f40 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20 53  executed..  ** S
11f50 75 62 76 65 72 74 69 6e 67 20 74 68 69 73 20 6d  ubverting this m
11f60 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73 69 6e  echanism by usin
11f70 67 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d 61  g "PRAGMA schema
11f80 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f 64  _version" to mod
11f90 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73 63 68  ify.  ** the sch
11fa0 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73 20 70  ema-version is p
11fb0 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67 65  otentially dange
11fc0 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c 65 61  rous and may lea
11fd0 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20 2a  d to program.  *
11fe0 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64 61 74  * crashes or dat
11ff0 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e  abase corruption
12000 2e 20 55 73 65 20 77 69 74 68 20 63 61 75 74 69  . Use with cauti
12010 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  on!.  **.  ** Th
12020 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69  e user-version i
12030 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72  s not used inter
12040 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e  nally by SQLite.
12050 20 49 74 20 6d 61 79 20 62 65 20 75 73 65 64 20   It may be used 
12060 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61 74  by.  ** applicat
12070 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70 75 72  ions for any pur
12080 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  pose..  */.  cas
12090 65 20 50 72 61 67 54 79 70 5f 48 45 41 44 45 52  e PragTyp_HEADER
120a0 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69 6e  _VALUE: {.    in
120b0 74 20 69 43 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20  t iCookie;   /* 
120c0 43 6f 6f 6b 69 65 20 69 6e 64 65 78 2e 20 31 20  Cookie index. 1 
120d0 66 6f 72 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  for schema-cooki
120e0 65 2c 20 36 20 66 6f 72 20 75 73 65 72 2d 63 6f  e, 6 for user-co
120f0 6f 6b 69 65 2e 20 2a 2f 0a 20 20 20 20 73 71 6c  okie. */.    sql
12100 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
12110 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 73  e(v, iDb);.    s
12120 77 69 74 63 68 28 20 7a 4c 65 66 74 5b 30 5d 20  witch( zLeft[0] 
12130 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 27 61  ){.      case 'a
12140 27 3a 20 63 61 73 65 20 27 41 27 3a 0a 20 20 20  ': case 'A':.   
12150 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42       iCookie = B
12160 54 52 45 45 5f 41 50 50 4c 49 43 41 54 49 4f 4e  TREE_APPLICATION
12170 5f 49 44 3b 0a 20 20 20 20 20 20 20 20 62 72 65  _ID;.        bre
12180 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27  ak;.      case '
12190 66 27 3a 20 63 61 73 65 20 27 46 27 3a 0a 20 20  f': case 'F':.  
121a0 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20        iCookie = 
121b0 42 54 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f  BTREE_FREE_PAGE_
121c0 43 4f 55 4e 54 3b 0a 20 20 20 20 20 20 20 20 62  COUNT;.        b
121d0 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
121e0 20 27 73 27 3a 20 63 61 73 65 20 27 53 27 3a 0a   's': case 'S':.
121f0 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20          iCookie 
12200 3d 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  = BTREE_SCHEMA_V
12210 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20 20 20  ERSION;.        
12220 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 64 65 66  break;.      def
12230 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 69 43  ault:.        iC
12240 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 55 53  ookie = BTREE_US
12250 45 52 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20  ER_VERSION;.    
12260 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d      break;.    }
12270 0a 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ..    if( zRight
12280 20 26 26 20 69 43 6f 6f 6b 69 65 21 3d 42 54 52   && iCookie!=BTR
12290 45 45 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f 55  EE_FREE_PAGE_COU
122a0 4e 54 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57  NT ){.      /* W
122b0 72 69 74 65 20 74 68 65 20 73 70 65 63 69 66 69  rite the specifi
122c0 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20  ed cookie value 
122d0 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  */.      static 
122e0 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
122f0 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b   setCookie[] = {
12300 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72  .        { OP_Tr
12310 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c  ansaction,    0,
12320 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    1,  0},    /* 
12330 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  0 */.        { O
12340 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20  P_Integer,      
12350 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20    0,  1,  0},   
12360 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20   /* 1 */.       
12370 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c   { OP_SetCookie,
12380 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 31 7d        0,  0,  1}
12390 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20  ,    /* 2 */.   
123a0 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20     };.      int 
123b0 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
123c0 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
123d0 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b  rraySize(setCook
123e0 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65 2c 20  ie), setCookie, 
123f0 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
12400 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
12410 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20   addr, iDb);.   
12420 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
12430 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31  angeP1(v, addr+1
12440 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52  , sqlite3Atoi(zR
12450 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71  ight));.      sq
12460 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
12470 31 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 44 62  1(v, addr+2, iDb
12480 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
12490 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20  VdbeChangeP2(v, 
124a0 61 64 64 72 2b 32 2c 20 69 43 6f 6f 6b 69 65 29  addr+2, iCookie)
124b0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
124c0 20 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73     /* Read the s
124d0 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20  pecified cookie 
124e0 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73  value */.      s
124f0 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
12500 4f 70 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b 69  OpList readCooki
12510 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  e[] = {.        
12520 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  { OP_Transaction
12530 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d  ,     0,  0,  0}
12540 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
12550 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f       { OP_ReadCo
12560 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 31  okie,      0,  1
12570 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a  ,  0},    /* 1 *
12580 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52  /.        { OP_R
12590 65 73 75 6c 74 52 6f 77 2c 20 20 20 20 20 20 20  esultRow,       
125a0 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20 20 20  1,  1,  0}.     
125b0 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64   };.      int ad
125c0 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
125d0 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
125e0 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69  aySize(readCooki
125f0 65 29 2c 20 72 65 61 64 43 6f 6f 6b 69 65 2c 20  e), readCookie, 
12600 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
12610 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
12620 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20   addr, iDb);.   
12630 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
12640 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31  angeP1(v, addr+1
12650 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
12660 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
12670 33 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 43 6f  3(v, addr+1, iCo
12680 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  okie);.      sql
12690 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
126a0 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
126b0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
126c0 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
126d0 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c  AME_NAME, zLeft,
126e0 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
126f0 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  T);.    }.  }.  
12700 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
12710 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
12720 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47  EMA_VERSION_PRAG
12730 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
12740 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
12750 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
12760 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
12770 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f  MA compile_optio
12780 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  ns.  **.  ** Ret
12790 75 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66  urn the names of
127a0 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   all compile-tim
127b0 65 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 69  e options used i
127c0 6e 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20 20  n this build,.  
127d0 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65  ** one option pe
127e0 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61  r row..  */.  ca
127f0 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49  se PragTyp_COMPI
12800 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20  LE_OPTIONS: {.  
12810 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20    int i = 0;.   
12820 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70   const char *zOp
12830 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  t;.    sqlite3Vd
12840 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
12850 31 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  1);.    pParse->
12860 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73 71  nMem = 1;.    sq
12870 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
12880 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
12890 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70 69 6c 65  E_NAME, "compile
128a0 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c 49 54 45  _option", SQLITE
128b0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 77 68  _STATIC);.    wh
128c0 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c  ile( (zOpt = sql
128d0 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  ite3_compileopti
128e0 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20  on_get(i++))!=0 
128f0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
12900 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
12910 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20  _String8, 0, 1, 
12920 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a 20 20 20  0, zOpt, 0);.   
12930 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
12940 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
12950 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20  tRow, 1, 1);.   
12960 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
12970 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
12980 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
12990 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69  ION_DIAGS */..#i
129a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
129b0 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20  T_WAL.  /*.  ** 
129c0 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
129d0 73 65 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69  se.]wal_checkpoi
129e0 6e 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c  nt = passive|ful
129f0 6c 7c 72 65 73 74 61 72 74 0a 20 20 2a 2a 0a 20  l|restart.  **. 
12a00 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 74   ** Checkpoint t
12a10 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a  he database..  *
12a20 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
12a30 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a  _WAL_CHECKPOINT:
12a40 20 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20 3d   {.    int iBt =
12a50 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51   (pId2->z?iDb:SQ
12a60 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
12a70 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  D);.    int eMod
12a80 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b  e = SQLITE_CHECK
12a90 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20  POINT_PASSIVE;. 
12aa0 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
12ab0 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
12ac0 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
12ad0 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  , "full")==0 ){.
12ae0 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
12af0 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
12b00 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65  T_FULL;.      }e
12b10 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
12b20 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
12b30 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a  restart")==0 ){.
12b40 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
12b50 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
12b60 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20 20  T_RESTART;.     
12b70 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c   }.    }.    sql
12b80 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
12b90 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70 50  ls(v, 3);.    pP
12ba0 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a  arse->nMem = 3;.
12bb0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
12bc0 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
12bd0 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 62  COLNAME_NAME, "b
12be0 75 73 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  usy", SQLITE_STA
12bf0 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
12c00 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
12c10 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
12c20 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c 49 54  ME, "log", SQLIT
12c30 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
12c40 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
12c50 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
12c60 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63 6b 70  ME_NAME, "checkp
12c70 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49 54 45 5f  ointed", SQLITE_
12c80 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 73 71  STATIC);..    sq
12c90 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
12ca0 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74  v, OP_Checkpoint
12cb0 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29  , iBt, eMode, 1)
12cc0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
12cd0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
12ce0 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a  sultRow, 1, 3);.
12cf0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
12d00 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
12d10 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f   wal_autocheckpo
12d20 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  int.  **   PRAGM
12d30 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  A wal_autocheckp
12d40 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  oint = N.  **.  
12d50 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20 64  ** Configure a d
12d60 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
12d70 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61  on to automatica
12d80 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20 61  lly checkpoint a
12d90 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 61   database.  ** a
12da0 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69 6e  fter accumulatin
12db0 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74 68  g N frames in th
12dc0 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79 20  e log. Or query 
12dd0 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
12de0 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e  value.  ** of N.
12df0 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
12e00 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45  gTyp_WAL_AUTOCHE
12e10 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69  CKPOINT: {.    i
12e20 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
12e30 20 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61     sqlite3_wal_a
12e40 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62  utocheckpoint(db
12e50 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52  , sqlite3Atoi(zR
12e60 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20  ight));.    }.  
12e70 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
12e80 74 28 70 50 61 72 73 65 2c 20 22 77 61 6c 5f 61  t(pParse, "wal_a
12e90 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20  utocheckpoint", 
12ea0 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61 6c  .       db->xWal
12eb0 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65  Callback==sqlite
12ec0 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20  3WalDefaultHook 
12ed0 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 53 51  ? .           SQ
12ee0 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
12ef0 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20 30  db->pWalArg) : 0
12f00 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
12f10 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a  #endif..  /*.  *
12f20 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e 6b  *  PRAGMA shrink
12f30 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a  _memory.  **.  *
12f40 2a 20 54 68 69 73 20 70 72 61 67 6d 61 20 61 74  * This pragma at
12f50 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 61  tempts to free a
12f60 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61 73  s much memory as
12f70 20 70 6f 73 73 69 62 6c 65 20 66 72 6f 6d 20 74   possible from t
12f80 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74 20  he.  ** current 
12f90 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
12fa0 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ion..  */.  case
12fb0 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f   PragTyp_SHRINK_
12fc0 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20 20 73 71  MEMORY: {.    sq
12fd0 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65  lite3_db_release
12fe0 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20 20  _memory(db);.   
12ff0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
13000 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
13010 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20 2a  busy_timeout.  *
13020 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f  *   PRAGMA busy_
13030 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a  timeout = N.  **
13040 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74  .  ** Call sqlit
13050 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
13060 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e 20  db, N).  Return 
13070 74 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d 65  the current time
13080 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 69  out value.  ** i
13090 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20 20 49  f one is set.  I
130a0 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c 65  f no busy handle
130b0 72 20 6f 72 20 61 20 64 69 66 66 65 72 65 6e 74  r or a different
130c0 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 69 73   busy handler is
130d0 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20 30   set.  ** then 0
130e0 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 53   is returned.  S
130f0 65 74 74 69 6e 67 20 74 68 65 20 62 75 73 79 5f  etting the busy_
13100 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72 20  timeout to 0 or 
13110 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20 64 69  negative.  ** di
13120 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d 65 6f  sables the timeo
13130 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61 73  ut..  */.  /*cas
13140 65 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54  e PragTyp_BUSY_T
13150 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61 75 6c 74  IMEOUT*/ default
13160 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  : {.    assert( 
13170 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64  aPragmaNames[mid
13180 5d 2e 65 50 72 61 67 54 79 70 3d 3d 50 72 61 67  ].ePragTyp==Prag
13190 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54  Typ_BUSY_TIMEOUT
131a0 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   );.    if( zRig
131b0 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
131c0 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
131d0 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  (db, sqlite3Atoi
131e0 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d  (zRight));.    }
131f0 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
13200 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 69  eInt(pParse, "ti
13210 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73  meout",  db->bus
13220 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62  yTimeout);.    b
13230 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
13240 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f    **   PRAGMA so
13250 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20  ft_heap_limit.  
13260 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74  **   PRAGMA soft
13270 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a  _heap_limit = N.
13280 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73    **.  ** Call s
13290 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
132a0 5f 6c 69 6d 69 74 36 34 28 4e 29 2e 20 20 52 65  _limit64(N).  Re
132b0 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  turn the result.
132c0 20 20 49 66 20 4e 20 69 73 20 6f 6d 69 74 74 65    If N is omitte
132d0 64 2c 0a 20 20 2a 2a 20 75 73 65 20 2d 31 2e 0a  d,.  ** use -1..
132e0 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
132f0 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49  Typ_SOFT_HEAP_LI
13300 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  MIT: {.    sqlit
13310 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20  e3_int64 N;.    
13320 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 73 71  if( zRight && sq
13330 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 52 69 67  lite3Atoi64(zRig
13340 68 74 2c 20 26 4e 2c 20 31 30 30 30 30 30 30 2c  ht, &N, 1000000,
13350 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3d 3d 53   SQLITE_UTF8)==S
13360 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
13370 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68    sqlite3_soft_h
13380 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a  eap_limit64(N);.
13390 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
133a0 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
133b0 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  , "soft_heap_lim
133c0 69 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f  it",  sqlite3_so
133d0 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
133e0 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  -1));.    break;
133f0 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65  .  }..#if define
13400 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
13410 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
13420 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a  E_TEST).  /*.  *
13430 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63 75 72  * Report the cur
13440 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69  rent state of fi
13450 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20  le logs for all 
13460 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20  databases.  */. 
13470 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
13480 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20 20  CK_STATUS: {.   
13490 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
134a0 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b  ar *const azLock
134b0 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Name[] = {.     
134c0 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68   "unlocked", "sh
134d0 61 72 65 64 22 2c 20 22 72 65 73 65 72 76 65 64  ared", "reserved
134e0 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65  ", "pending", "e
134f0 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b  xclusive".    };
13500 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
13510 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
13520 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20  mCols(v, 2);.   
13530 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
13540 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  2;.    sqlite3Vd
13550 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
13560 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
13570 20 22 64 61 74 61 62 61 73 65 22 2c 20 53 51 4c   "database", SQL
13580 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
13590 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
135a0 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
135b0 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74 61 74  NAME_NAME, "stat
135c0 75 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  us", SQLITE_STAT
135d0 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  IC);.    for(i=0
135e0 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
135f0 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a  ){.      Btree *
13600 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74  pBt;.      const
13610 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20   char *zState = 
13620 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20  "unknown";.     
13630 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66   int j;.      if
13640 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ( db->aDb[i].zNa
13650 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  me==0 ) continue
13660 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
13670 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
13680 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
13690 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
136a0 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a  me, P4_STATIC);.
136b0 20 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e        pBt = db->
136c0 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20  aDb[i].pBt;.    
136d0 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20    if( pBt==0 || 
136e0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
136f0 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20  r(pBt)==0 ){.   
13700 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22 63       zState = "c
13710 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d 65  losed";.      }e
13720 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f  lse if( sqlite3_
13730 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
13740 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   i ? db->aDb[i].
13750 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20 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 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f   SQLITE_FCNTL_LO
13790 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51  CKSTATE, &j)==SQ
137a0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
137b0 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c      zState = azL
137c0 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20  ockName[j];.    
137d0 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
137e0 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
137f0 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
13800 20 30 2c 20 7a 53 74 61 74 65 2c 20 50 34 5f 53   0, zState, P4_S
13810 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
13820 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
13830 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
13840 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20   1, 2);.    }.  
13850 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
13860 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
13870 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 63  TE_HAS_CODEC.  c
13880 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59 3a  ase PragTyp_KEY:
13890 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
138a0 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f  t ) sqlite3_key_
138b0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67  v2(db, zDb, zRig
138c0 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
138d0 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
138e0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63    break;.  }.  c
138f0 61 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45  ase PragTyp_REKE
13900 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
13910 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72 65  ght ) sqlite3_re
13920 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
13930 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53  zRight, sqlite3S
13940 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29  trlen30(zRight))
13950 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
13960 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
13970 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66  HEXKEY: {.    if
13980 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
13990 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20 20    u8 iByte;.    
139a0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 63    int i;.      c
139b0 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20  har zKey[40];.  
139c0 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42 79      for(i=0, iBy
139d0 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a  te=0; i<sizeof(z
139e0 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74 65  Key)*2 && sqlite
139f0 33 49 73 78 64 69 67 69 74 28 7a 52 69 67 68 74  3Isxdigit(zRight
13a00 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  [i]); i++){.    
13a10 20 20 20 20 69 42 79 74 65 20 3d 20 28 69 42 79      iByte = (iBy
13a20 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65 33  te<<4) + sqlite3
13a30 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b  HexToInt(zRight[
13a40 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  i]);.        if(
13a50 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65 79   (i&1)!=0 ) zKey
13a60 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20  [i/2] = iByte;. 
13a70 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
13a80 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78 66   (zLeft[3] & 0xf
13a90 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20 20  )==0xb ){.      
13aa0 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32    sqlite3_key_v2
13ab0 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20  (db, zDb, zKey, 
13ac0 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  i/2);.      }els
13ad0 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
13ae0 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20  e3_rekey_v2(db, 
13af0 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b  zDb, zKey, i/2);
13b00 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
13b10 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
13b20 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
13b30 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45  (SQLITE_HAS_CODE
13b40 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  C) || defined(SQ
13b50 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f  LITE_ENABLE_CERO
13b60 44 29 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  D).  case PragTy
13b70 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e  p_ACTIVATE_EXTEN
13b80 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67 68  SIONS: if( zRigh
13b90 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  t ){.#ifdef SQLI
13ba0 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20  TE_HAS_CODEC.   
13bb0 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
13bc0 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65  ICmp(zRight, "se
13bd0 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20  e-", 4)==0 ){.  
13be0 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69      sqlite3_acti
13bf0 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74  vate_see(&zRight
13c00 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  [4]);.    }.#end
13c10 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
13c20 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20  _ENABLE_CEROD.  
13c30 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
13c40 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63  NICmp(zRight, "c
13c50 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b  erod-", 6)==0 ){
13c60 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61  .      sqlite3_a
13c70 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a  ctivate_cerod(&z
13c80 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d  Right[6]);.    }
13c90 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
13ca0 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d  eak;.#endif..  }
13cb0 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 50   /* End of the P
13cc0 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a  RAGMA switch */.
13cd0 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73  .pragma_out:.  s
13ce0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
13cf0 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69 74   zLeft);.  sqlit
13d00 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 52 69  e3DbFree(db, zRi
13d10 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  ght);.}..#endif 
13d20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
13d30 52 41 47 4d 41 20 2a 2f 0a                       RAGMA */.