/ Hex Artifact Content
Login

Artifact bd33aa24456f043bb6f6d32a918bbeed41d8c591:


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 54 48 52 45 41 44 53 20 20  ragTyp_THREADS  
0a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 41 55 54 4f  PragTyp_WAL_AUTO
0a90: 43 48 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20  CHECKPOINT      
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 57 41 4c 5f 43 48 45   PragTyp_WAL_CHE
0ac0: 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20 20  CKPOINT         
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 41 43 54 49 56 41  e PragTyp_ACTIVA
0af0: 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20 20  TE_EXTENSIONS   
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 48 45 58 4b 45  ne PragTyp_HEXKE
0b20: 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Y               
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 4b 45 59 20  ine PragTyp_KEY 
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 52 45 4b  fine PragTyp_REK
0b80: 45 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20  EY              
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 4c 4f  efine PragTyp_LO
0bb0: 43 4b 5f 53 54 41 54 55 53 20 20 20 20 20 20 20  CK_STATUS       
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 54 79 70 5f 50  define PragTyp_P
0be0: 41 52 53 45 52 5f 54 52 41 43 45 20 20 20 20 20  ARSER_TRACE     
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 34 31 0a               41.
0c00: 23 64 65 66 69 6e 65 20 50 72 61 67 46 6c 61 67  #define PragFlag
0c10: 5f 4e 65 65 64 53 63 68 65 6d 61 20 20 20 20 20  _NeedSchema     
0c20: 20 20 20 20 20 20 30 78 30 31 0a 23 64 65 66 69        0x01.#defi
0c30: 6e 65 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64  ne PragFlag_Read
0c40: 4f 6e 6c 79 20 20 20 20 20 20 20 20 20 20 20 20  Only            
0c50: 20 30 78 30 32 0a 73 74 61 74 69 63 20 63 6f 6e   0x02.static con
0c60: 73 74 20 73 74 72 75 63 74 20 73 50 72 61 67 6d  st struct sPragm
0c70: 61 4e 61 6d 65 73 20 7b 0a 20 20 63 6f 6e 73 74  aNames {.  const
0c80: 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 7a 4e 61   char *const zNa
0c90: 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  me;  /* Name of 
0ca0: 70 72 61 67 6d 61 20 2a 2f 0a 20 20 75 38 20 65  pragma */.  u8 e
0cb0: 50 72 61 67 54 79 70 3b 20 20 20 20 20 20 20 20  PragTyp;        
0cc0: 20 20 20 20 20 20 2f 2a 20 50 72 61 67 54 79 70        /* PragTyp
0cd0: 5f 58 58 58 20 76 61 6c 75 65 20 2a 2f 0a 20 20  _XXX value */.  
0ce0: 75 38 20 6d 50 72 61 67 46 6c 61 67 3b 20 20 20  u8 mPragFlag;   
0cf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72            /* Zer
0d00: 6f 20 6f 72 20 6d 6f 72 65 20 50 72 61 67 46 6c  o or more PragFl
0d10: 61 67 5f 58 58 58 20 76 61 6c 75 65 73 20 2a 2f  ag_XXX values */
0d20: 0a 20 20 75 33 32 20 69 41 72 67 3b 20 20 20 20  .  u32 iArg;    
0d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0d40: 45 78 74 72 61 20 61 72 67 75 6d 65 6e 74 20 2a  Extra argument *
0d50: 2f 0a 7d 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  /.} aPragmaNames
0d60: 5b 5d 20 3d 20 7b 0a 23 69 66 20 64 65 66 69 6e  [] = {.#if defin
0d70: 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
0d80: 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  DEC) || defined(
0d90: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
0da0: 52 4f 44 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ROD).  { /* zNam
0db0: 65 3a 20 20 20 20 20 2a 2f 20 22 61 63 74 69 76  e:     */ "activ
0dc0: 61 74 65 5f 65 78 74 65 6e 73 69 6f 6e 73 22 2c  ate_extensions",
0dd0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
0de0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 41 43  :  */ PragTyp_AC
0df0: 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e  TIVATE_EXTENSION
0e00: 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  S,.    /* ePragF
0e10: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
0e20: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
0e30: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
0e40: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0e50: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
0e60: 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  ION_PRAGMAS).  {
0e70: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
0e80: 2f 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69  / "application_i
0e90: 64 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  d",.    /* ePrag
0ea0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
0eb0: 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20  _HEADER_VALUE,. 
0ec0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
0ed0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
0ee0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45  rg:      */ BTRE
0ef0: 45 5f 41 50 50 4c 49 43 41 54 49 4f 4e 5f 49 44  E_APPLICATION_ID
0f00: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
0f10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0f20: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
0f30: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
0f40: 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63 75 75    */ "auto_vacuu
0f50: 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  m",.    /* ePrag
0f60: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
0f70: 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a 20 20  _AUTO_VACUUM,.  
0f80: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
0f90: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
0fa0: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
0fb0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
0fc0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
0fd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0fe0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
0ff0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1000: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d 41 54  ITE_OMIT_AUTOMAT
1010: 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b 20 2f 2a  IC_INDEX).  { /*
1020: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1030: 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78 22  automatic_index"
1040: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1050: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
1060: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
1070: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
1080: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1090: 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64  / SQLITE_AutoInd
10a0: 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e  ex },.#endif.#en
10b0: 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  dif.  { /* zName
10c0: 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79 5f 74  :     */ "busy_t
10d0: 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f 2a 20  imeout",.    /* 
10e0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
10f0: 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
1100: 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UT,.    /* ePrag
1110: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1120: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1130: 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e   0 },.#if !defin
1140: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
1150: 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20  AGER_PRAGMAS).  
1160: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1170: 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c  */ "cache_size",
1180: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1190: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 41  :  */ PragTyp_CA
11a0: 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a  CHE_SIZE,.    /*
11b0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
11c0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
11d0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
11e0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
11f0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1200: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
1210: 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  AG_PRAGMAS).  { 
1220: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1230: 20 22 63 61 63 68 65 5f 73 70 69 6c 6c 22 2c 0a   "cache_spill",.
1240: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1250: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1260: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1270: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1280: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1290: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
12a0: 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20  l },.#endif.  { 
12b0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
12c0: 20 22 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65   "case_sensitive
12d0: 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f 2a 20 65  _like",.    /* e
12e0: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
12f0: 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49 54  gTyp_CASE_SENSIT
1300: 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20 20 2f 2a  IVE_LIKE,.    /*
1310: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1320: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1330: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20      */ 0 },.#if 
1340: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1350: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
1360: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
1370: 20 20 20 20 20 2a 2f 20 22 63 68 65 63 6b 70 6f       */ "checkpo
1380: 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63 22 2c 0a  int_fullfsync",.
1390: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
13a0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
13b0: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
13c0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
13d0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
13e0: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
13f0: 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  Sync },.#endif.#
1400: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1410: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
1420: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
1430: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 6f  Name:     */ "co
1440: 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22 2c 0a 20  llation_list",. 
1450: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1460: 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c   */ PragTyp_COLL
1470: 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20 20 20 20  ATION_LIST,.    
1480: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1490: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
14a0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
14b0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
14c0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  d(SQLITE_OMIT_CO
14d0: 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
14e0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
14f0: 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70 69 6c 65       */ "compile
1500: 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20 20 20 2f  _options",.    /
1510: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1520: 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f  PragTyp_COMPILE_
1530: 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20  OPTIONS,.    /* 
1540: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
1550: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
1560: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
1570: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
1580: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
1590: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
15a0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
15b0: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a 20  ount_changes",. 
15c0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
15d0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
15e0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
15f0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1600: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1610: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
1620: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
1630: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1640: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
1650: 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57  ) && SQLITE_OS_W
1660: 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  IN.  { /* zName:
1670: 20 20 20 20 20 2a 2f 20 22 64 61 74 61 5f 73 74       */ "data_st
1680: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a  ore_directory",.
1690: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
16a0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44 41 54    */ PragTyp_DAT
16b0: 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52  A_STORE_DIRECTOR
16c0: 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  Y,.    /* ePragF
16d0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
16e0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
16f0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
1700: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1710: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
1720: 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  ION_PRAGMAS).  {
1730: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1740: 2f 20 22 64 61 74 61 5f 76 65 72 73 69 6f 6e 22  / "data_version"
1750: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1760: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48  p:  */ PragTyp_H
1770: 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20 20  EADER_VALUE,.   
1780: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1790: 2f 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64 4f  / PragFlag_ReadO
17a0: 6e 6c 79 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  nly,.    /* iArg
17b0: 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45 45 5f  :      */ BTREE_
17c0: 44 41 54 41 5f 56 45 52 53 49 4f 4e 20 7d 2c 0a  DATA_VERSION },.
17d0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
17e0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
17f0: 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a  SCHEMA_PRAGMAS).
1800: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1810: 20 20 2a 2f 20 22 64 61 74 61 62 61 73 65 5f 6c    */ "database_l
1820: 69 73 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ist",.    /* ePr
1830: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1840: 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54  yp_DATABASE_LIST
1850: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1860: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
1870: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
1880: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1890: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
18a0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
18b0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
18c0: 4d 41 53 29 20 26 26 20 21 64 65 66 69 6e 65 64  MAS) && !defined
18d0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50  (SQLITE_OMIT_DEP
18e0: 52 45 43 41 54 45 44 29 0a 20 20 7b 20 2f 2a 20  RECATED).  { /* 
18f0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64  zName:     */ "d
1900: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
1910: 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  e",.    /* ePrag
1920: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1930: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
1940: 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  IZE,.    /* ePra
1950: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
1960: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
1970: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1980: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
1990: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
19a0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
19b0: 41 47 4d 41 53 29 0a 23 69 66 20 21 64 65 66 69  AGMAS).#if !defi
19c0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
19d0: 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
19e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
19f0: 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
1a00: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1a10: 2a 2f 20 22 64 65 66 65 72 5f 66 6f 72 65 69 67  */ "defer_foreig
1a20: 6e 5f 6b 65 79 73 22 2c 0a 20 20 20 20 2f 2a 20  n_keys",.    /* 
1a30: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1a40: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
1a50: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1a60: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1a70: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
1a80: 44 65 66 65 72 46 4b 73 20 7d 2c 0a 23 65 6e 64  DeferFKs },.#end
1a90: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  if.#endif.#if !d
1aa0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1ab0: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
1ac0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1ad0: 20 20 20 2a 2f 20 22 65 6d 70 74 79 5f 72 65 73     */ "empty_res
1ae0: 75 6c 74 5f 63 61 6c 6c 62 61 63 6b 73 22 2c 0a  ult_callbacks",.
1af0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1b00: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1b10: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1b20: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1b30: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1b40: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
1b50: 61 63 6b 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  ack },.#endif.#i
1b60: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1b70: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a 20 20  E_OMIT_UTF16).  
1b80: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1b90: 2a 2f 20 22 65 6e 63 6f 64 69 6e 67 22 2c 0a 20  */ "encoding",. 
1ba0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1bb0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 45 4e 43 4f   */ PragTyp_ENCO
1bc0: 44 49 4e 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  DING,.    /* ePr
1bd0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1be0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1bf0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
1c00: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1c10: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
1c20: 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
1c30: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
1c40: 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GGER).  { /* zNa
1c50: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72 65  me:     */ "fore
1c60: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 22 2c 0a  ign_key_check",.
1c70: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1c80: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f 52    */ PragTyp_FOR
1c90: 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 2c 0a  EIGN_KEY_CHECK,.
1ca0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1cb0: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
1cc0: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
1cd0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
1ce0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
1cf0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1d00: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
1d10: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1d20: 20 20 20 2a 2f 20 22 66 6f 72 65 69 67 6e 5f 6b     */ "foreign_k
1d30: 65 79 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f 2a  ey_list",.    /*
1d40: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1d50: 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b  ragTyp_FOREIGN_K
1d60: 45 59 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a 20  EY_LIST,.    /* 
1d70: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
1d80: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
1d90: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
1da0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
1db0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1dc0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41  (SQLITE_OMIT_FLA
1dd0: 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20 21  G_PRAGMAS).#if !
1de0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1df0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
1e00: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1e10: 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
1e20: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1e30: 20 20 20 20 2a 2f 20 22 66 6f 72 65 69 67 6e 5f      */ "foreign_
1e40: 6b 65 79 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50  keys",.    /* eP
1e50: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1e60: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
1e70: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1e80: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1e90: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46 6f      */ SQLITE_Fo
1ea0: 72 65 69 67 6e 4b 65 79 73 20 7d 2c 0a 23 65 6e  reignKeys },.#en
1eb0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 21  dif.#endif.#if !
1ec0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1ed0: 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  MIT_SCHEMA_VERSI
1ee0: 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  ON_PRAGMAS).  { 
1ef0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1f00: 20 22 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74   "freelist_count
1f10: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1f20: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
1f30: 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20  HEADER_VALUE,.  
1f40: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
1f50: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64  */ PragFlag_Read
1f60: 4f 6e 6c 79 2c 0a 20 20 20 20 2f 2a 20 69 41 72  Only,.    /* iAr
1f70: 67 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45 45  g:      */ BTREE
1f80: 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f 55 4e 54  _FREE_PAGE_COUNT
1f90: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
1fa0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1fb0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
1fc0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1fd0: 20 20 20 20 2a 2f 20 22 66 75 6c 6c 5f 63 6f 6c      */ "full_col
1fe0: 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20 20 20  umn_names",.    
1ff0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2000: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
2010: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2020: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2030: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
2040: 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20  TE_FullColNames 
2050: 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  },.  { /* zName:
2060: 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 66 73 79       */ "fullfsy
2070: 6e 63 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  nc",.    /* ePra
2080: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2090: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
20a0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
20b0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
20c0: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46 75 6c 6c    */ SQLITE_Full
20d0: 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66 0a  FSync },.#endif.
20e0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
20f0: 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 20 20  TE_HAS_CODEC).  
2100: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2110: 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a 20 20 20  */ "hexkey",.   
2120: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2130: 2f 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45 59  / PragTyp_HEXKEY
2140: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2150: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
2160: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
2170: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
2180: 3a 20 20 20 20 20 2a 2f 20 22 68 65 78 72 65 6b  :     */ "hexrek
2190: 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ey",.    /* ePra
21a0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
21b0: 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20 20 2f 2a  p_HEXKEY,.    /*
21c0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
21d0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
21e0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
21f0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
2200: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
2210: 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20 21 64  _PRAGMAS).#if !d
2220: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2230: 49 54 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a  IT_CHECK).  { /*
2240: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2250: 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f 63 6f 6e  ignore_check_con
2260: 73 74 72 61 69 6e 74 73 22 2c 0a 20 20 20 20 2f  straints",.    /
2270: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2280: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
2290: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
22a0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
22b0: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
22c0: 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 7d  E_IgnoreChecks }
22d0: 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ,.#endif.#endif.
22e0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
22f0: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
2300: 55 55 4d 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  UUM).  { /* zNam
2310: 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 63 72 65  e:     */ "incre
2320: 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 22 2c 0a  mental_vacuum",.
2330: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2340: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 43    */ PragTyp_INC
2350: 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d 2c  REMENTAL_VACUUM,
2360: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2370: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
2380: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2390: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
23a0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
23b0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
23c0: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47  OMIT_SCHEMA_PRAG
23d0: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
23e0: 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64 65 78  e:     */ "index
23f0: 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a 20 65  _info",.    /* e
2400: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2410: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 2c  gTyp_INDEX_INFO,
2420: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2430: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
2440: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2450: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2460: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
2470: 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64 65 78  e:     */ "index
2480: 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f 2a 20 65  _list",.    /* e
2490: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
24a0: 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 2c  gTyp_INDEX_LIST,
24b0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
24c0: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
24d0: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
24e0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
24f0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2500: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2510: 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2520: 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  HECK).  { /* zNa
2530: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 74 65  me:     */ "inte
2540: 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20  grity_check",.  
2550: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2560: 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47  */ PragTyp_INTEG
2570: 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20 20 20  RITY_CHECK,.    
2580: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2590: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
25a0: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
25b0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
25c0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
25d0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
25e0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
25f0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
2600: 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64   */ "journal_mod
2610: 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  e",.    /* ePrag
2620: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2630: 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 2c 0a 20  _JOURNAL_MODE,. 
2640: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2650: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
2660: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
2670: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2680: 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  },.  { /* zName:
2690: 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c       */ "journal
26a0: 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 0a 20 20  _size_limit",.  
26b0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
26c0: 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e  */ PragTyp_JOURN
26d0: 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 2c 0a 20  AL_SIZE_LIMIT,. 
26e0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
26f0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2700: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
2710: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2720: 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43  ned(SQLITE_HAS_C
2730: 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  ODEC).  { /* zNa
2740: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6b 65 79 22  me:     */ "key"
2750: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2760: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4b  p:  */ PragTyp_K
2770: 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  EY,.    /* ePrag
2780: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2790: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
27a0: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
27b0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27c0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
27d0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
27e0: 3a 20 20 20 20 20 2a 2f 20 22 6c 65 67 61 63 79  :     */ "legacy
27f0: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 22 2c 0a 20  _file_format",. 
2800: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2810: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2820: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2830: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
2840: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
2850: 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65  QLITE_LegacyFile
2860: 46 6d 74 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  Fmt },.#endif.#i
2870: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2880: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
2890: 47 4d 41 53 29 20 26 26 20 53 51 4c 49 54 45 5f  GMAS) && SQLITE_
28a0: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
28b0: 54 59 4c 45 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  TYLE.  { /* zNam
28c0: 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63 6b 5f  e:     */ "lock_
28d0: 70 72 6f 78 79 5f 66 69 6c 65 22 2c 0a 20 20 20  proxy_file",.   
28e0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
28f0: 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  / PragTyp_LOCK_P
2900: 52 4f 58 59 5f 46 49 4c 45 2c 0a 20 20 20 20 2f  ROXY_FILE,.    /
2910: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
2920: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
2930: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
2940: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2950: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
2960: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2970: 54 45 53 54 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  TEST).  { /* zNa
2980: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63 6b  me:     */ "lock
2990: 5f 73 74 61 74 75 73 22 2c 0a 20 20 20 20 2f 2a  _status",.    /*
29a0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
29b0: 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54  ragTyp_LOCK_STAT
29c0: 55 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  US,.    /* ePrag
29d0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
29e0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
29f0: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
2a00: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2a10: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
2a20: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
2a30: 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63 6b 69  e:     */ "locki
2a40: 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20 20 20 2f 2a  ng_mode",.    /*
2a50: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2a60: 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d  ragTyp_LOCKING_M
2a70: 4f 44 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ODE,.    /* ePra
2a80: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
2a90: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2aa0: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2ab0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6d 61 78  ame:     */ "max
2ac0: 5f 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20 20  _page_count",.  
2ad0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2ae0: 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f  */ PragTyp_PAGE_
2af0: 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50  COUNT,.    /* eP
2b00: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67  ragFlag: */ Prag
2b10: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c  Flag_NeedSchema,
2b20: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2b30: 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f     */ 0 },.  { /
2b40: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2b50: 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 0a 20 20 20  "mmap_size",.   
2b60: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2b70: 2f 20 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53  / PragTyp_MMAP_S
2b80: 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  IZE,.    /* ePra
2b90: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
2ba0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2bb0: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2bc0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 67  ame:     */ "pag
2bd0: 65 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a  e_count",.    /*
2be0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2bf0: 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e  ragTyp_PAGE_COUN
2c00: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
2c10: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2c20: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2c30: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2c40: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2c50: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 67  ame:     */ "pag
2c60: 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f 2a 20  e_size",.    /* 
2c70: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2c80: 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a 45 2c  agTyp_PAGE_SIZE,
2c90: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2ca0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2cb0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2cc0: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  },.#endif.#if de
2cd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
2ce0: 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  UG).  { /* zName
2cf0: 3a 20 20 20 20 20 2a 2f 20 22 70 61 72 73 65 72  :     */ "parser
2d00: 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20  _trace",.    /* 
2d10: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2d20: 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41  agTyp_PARSER_TRA
2d30: 43 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  CE,.    /* ePrag
2d40: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2d50: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2d60: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
2d70: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2d80: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
2d90: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
2da0: 3a 20 20 20 20 20 2a 2f 20 22 71 75 65 72 79 5f  :     */ "query_
2db0: 6f 6e 6c 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  only",.    /* eP
2dc0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2dd0: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
2de0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
2df0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
2e00: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 51 75      */ SQLITE_Qu
2e10: 65 72 79 4f 6e 6c 79 20 7d 2c 0a 23 65 6e 64 69  eryOnly },.#endi
2e20: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2e30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2e40: 52 49 54 59 5f 43 48 45 43 4b 29 0a 20 20 7b 20  RITY_CHECK).  { 
2e50: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2e60: 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 2c 0a   "quick_check",.
2e70: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2e80: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54    */ PragTyp_INT
2e90: 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20  EGRITY_CHECK,.  
2ea0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2eb0: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
2ec0: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
2ed0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
2ee0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
2ef0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2f00: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
2f10: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
2f20: 20 20 2a 2f 20 22 72 65 61 64 5f 75 6e 63 6f 6d    */ "read_uncom
2f30: 6d 69 74 74 65 64 22 2c 0a 20 20 20 20 2f 2a 20  mitted",.    /* 
2f40: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2f50: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
2f60: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2f70: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2f80: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
2f90: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20  ReadUncommitted 
2fa0: 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  },.  { /* zName:
2fb0: 20 20 20 20 20 2a 2f 20 22 72 65 63 75 72 73 69       */ "recursi
2fc0: 76 65 5f 74 72 69 67 67 65 72 73 22 2c 0a 20 20  ve_triggers",.  
2fd0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2fe0: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
2ff0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
3000: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3010: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
3020: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
3030: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64   },.#endif.#if d
3040: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
3050: 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20  S_CODEC).  { /* 
3060: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 72  zName:     */ "r
3070: 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ekey",.    /* eP
3080: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3090: 54 79 70 5f 52 45 4b 45 59 2c 0a 20 20 20 20 2f  Typ_REKEY,.    /
30a0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
30b0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
30c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
30d0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
30e0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41  (SQLITE_OMIT_FLA
30f0: 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  G_PRAGMAS).  { /
3100: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3110: 22 72 65 76 65 72 73 65 5f 75 6e 6f 72 64 65 72  "reverse_unorder
3120: 65 64 5f 73 65 6c 65 63 74 73 22 2c 0a 20 20 20  ed_selects",.   
3130: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3140: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
3150: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3160: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3170: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
3180: 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72  ITE_ReverseOrder
3190: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
31a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
31b0: 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  MIT_SCHEMA_VERSI
31c0: 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  ON_PRAGMAS).  { 
31d0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
31e0: 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e   "schema_version
31f0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3200: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3210: 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20  HEADER_VALUE,.  
3220: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
3230: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
3240: 67 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45 45  g:      */ BTREE
3250: 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
3260: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
3270: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3280: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3290: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
32a0: 20 20 20 20 2a 2f 20 22 73 65 63 75 72 65 5f 64      */ "secure_d
32b0: 65 6c 65 74 65 22 2c 0a 20 20 20 20 2f 2a 20 65  elete",.    /* e
32c0: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
32d0: 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45  gTyp_SECURE_DELE
32e0: 54 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  TE,.    /* ePrag
32f0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3300: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3310: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
3320: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3330: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
3340: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
3350: 3a 20 20 20 20 20 2a 2f 20 22 73 68 6f 72 74 5f  :     */ "short_
3360: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20  column_names",. 
3370: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3380: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
3390: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
33a0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
33b0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
33c0: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
33d0: 6d 65 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20  mes },.#endif.  
33e0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
33f0: 2a 2f 20 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72  */ "shrink_memor
3400: 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  y",.    /* ePrag
3410: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3420: 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 2c 0a  _SHRINK_MEMORY,.
3430: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3440: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3450: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
3460: 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ,.  { /* zName: 
3470: 20 20 20 20 2a 2f 20 22 73 6f 66 74 5f 68 65 61      */ "soft_hea
3480: 70 5f 6c 69 6d 69 74 22 2c 0a 20 20 20 20 2f 2a  p_limit",.    /*
3490: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
34a0: 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50  ragTyp_SOFT_HEAP
34b0: 5f 4c 49 4d 49 54 2c 0a 20 20 20 20 2f 2a 20 65  _LIMIT,.    /* e
34c0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
34d0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
34e0: 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64    */ 0 },.#if !d
34f0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3500: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
3510: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3520: 49 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f  ITE_DEBUG).  { /
3530: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3540: 22 73 71 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20  "sql_trace",.   
3550: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3560: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
3570: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3580: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3590: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
35a0: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 7d 2c 0a  ITE_SqlTrace },.
35b0: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69  #endif.#endif.#i
35c0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
35d0: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
35e0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
35f0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 74 61  ame:     */ "sta
3600: 74 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ts",.    /* ePra
3610: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3620: 70 5f 53 54 41 54 53 2c 0a 20 20 20 20 2f 2a 20  p_STATS,.    /* 
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 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a   "synchronous",.
36c0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
36d0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 59 4e    */ PragTyp_SYN
36e0: 43 48 52 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a  CHRONOUS,.    /*
36f0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
3700: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
3710: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
3720: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
3730: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
3740: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  d(SQLITE_OMIT_SC
3750: 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20  HEMA_PRAGMAS).  
3760: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3770: 2a 2f 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c  */ "table_info",
3780: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3790: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 41  :  */ PragTyp_TA
37a0: 42 4c 45 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a  BLE_INFO,.    /*
37b0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
37c0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
37d0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
37e0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
37f0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
3800: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
3810: 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  GER_PRAGMAS).  {
3820: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3830: 2f 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a  / "temp_store",.
3840: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3850: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d    */ PragTyp_TEM
3860: 50 5f 53 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20  P_STORE,.    /* 
3870: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3880: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3890: 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f     */ 0 },.  { /
38a0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
38b0: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
38c0: 63 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65  ctory",.    /* e
38d0: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
38e0: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  gTyp_TEMP_STORE_
38f0: 44 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f  DIRECTORY,.    /
3900: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
3910: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
3920: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3930: 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  dif.  { /* zName
3940: 3a 20 20 20 20 20 2a 2f 20 22 74 68 72 65 61 64  :     */ "thread
3950: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
3960: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3970: 5f 54 48 52 45 41 44 53 2c 0a 20 20 20 20 2f 2a  _THREADS,.    /*
3980: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3990: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
39a0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20      */ 0 },.#if 
39b0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
39c0: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
39d0: 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  ION_PRAGMAS).  {
39e0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
39f0: 2f 20 22 75 73 65 72 5f 76 65 72 73 69 6f 6e 22  / "user_version"
3a00: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3a10: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48  p:  */ PragTyp_H
3a20: 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20 20  EADER_VALUE,.   
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 42 54 52 45 45 5f  :      */ BTREE_
3a60: 55 53 45 52 5f 56 45 52 53 49 4f 4e 20 7d 2c 0a  USER_VERSION },.
3a70: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
3a80: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
3a90: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69  FLAG_PRAGMAS).#i
3aa0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
3ab0: 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a  _DEBUG).  { /* z
3ac0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64  Name:     */ "vd
3ad0: 62 65 5f 61 64 64 6f 70 74 72 61 63 65 22 2c 0a  be_addoptrace",.
3ae0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3af0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
3b00: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
3b10: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3b20: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3b30: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
3b40: 54 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20  Trace },.  { /* 
3b50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76  zName:     */ "v
3b60: 64 62 65 5f 64 65 62 75 67 22 2c 0a 20 20 20 20  dbe_debug",.    
3b70: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
3b80: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
3b90: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3ba0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3bb0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
3bc0: 54 45 5f 53 71 6c 54 72 61 63 65 7c 53 51 4c 49  TE_SqlTrace|SQLI
3bd0: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53  TE_VdbeListing|S
3be0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
3bf0: 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  },.  { /* zName:
3c00: 20 20 20 20 20 2a 2f 20 22 76 64 62 65 5f 65 71       */ "vdbe_eq
3c10: 70 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  p",.    /* ePrag
3c20: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3c30: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
3c40: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3c50: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3c60: 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 45   */ SQLITE_VdbeE
3c70: 51 50 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61  QP },.  { /* zNa
3c80: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65  me:     */ "vdbe
3c90: 5f 6c 69 73 74 69 6e 67 22 2c 0a 20 20 20 20 2f  _listing",.    /
3ca0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
3cb0: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
3cc0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
3cd0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
3ce0: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
3cf0: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 7d 2c  E_VdbeListing },
3d00: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3d10: 20 20 20 2a 2f 20 22 76 64 62 65 5f 74 72 61 63     */ "vdbe_trac
3d20: 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  e",.    /* ePrag
3d30: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3d40: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
3d50: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3d60: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3d70: 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 54   */ SQLITE_VdbeT
3d80: 72 61 63 65 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  race },.#endif.#
3d90: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
3da0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ed(SQLITE_OMIT_W
3db0: 41 4c 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AL).  { /* zName
3dc0: 3a 20 20 20 20 20 2a 2f 20 22 77 61 6c 5f 61 75  :     */ "wal_au
3dd0: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20  tocheckpoint",. 
3de0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3df0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f   */ PragTyp_WAL_
3e00: 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 2c 0a  AUTOCHECKPOINT,.
3e10: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3e20: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3e30: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
3e40: 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ,.  { /* zName: 
3e50: 20 20 20 20 2a 2f 20 22 77 61 6c 5f 63 68 65 63      */ "wal_chec
3e60: 6b 70 6f 69 6e 74 22 2c 0a 20 20 20 20 2f 2a 20  kpoint",.    /* 
3e70: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3e80: 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50  agTyp_WAL_CHECKP
3e90: 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  OINT,.    /* ePr
3ea0: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
3eb0: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
3ec0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3ed0: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
3ee0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
3ef0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
3f00: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
3f10: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 72  Name:     */ "wr
3f20: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 22 2c 0a  itable_schema",.
3f30: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3f40: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
3f50: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
3f60: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3f70: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3f80: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
3f90: 6d 61 7c 53 51 4c 49 54 45 5f 52 65 63 6f 76 65  ma|SQLITE_Recove
3fa0: 72 79 4d 6f 64 65 20 7d 2c 0a 23 65 6e 64 69 66  ryMode },.#endif
3fb0: 0a 7d 3b 0a 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  .};./* Number of
3fc0: 20 70 72 61 67 6d 61 73 3a 20 35 38 20 6f 6e 20   pragmas: 58 on 
3fd0: 62 79 20 64 65 66 61 75 6c 74 2c 20 37 31 20 74  by default, 71 t
3fe0: 6f 74 61 6c 2e 20 2a 2f 0a 2f 2a 20 45 6e 64 20  otal. */./* End 
3ff0: 6f 66 20 74 68 65 20 61 75 74 6f 6d 61 74 69 63  of the automatic
4000: 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70  ally generated p
4010: 72 61 67 6d 61 20 74 61 62 6c 65 2e 0a 2a 2a 2a  ragma table..***
4020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4040: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4050: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4060: 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 0a 2a 2a  ********/../*.**
4070: 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67   Interpret the g
4080: 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61  iven string as a
4090: 20 73 61 66 65 74 79 20 6c 65 76 65 6c 2e 20 20   safety level.  
40a0: 52 65 74 75 72 6e 20 30 20 66 6f 72 20 4f 46 46  Return 0 for OFF
40b0: 2c 0a 2a 2a 20 31 20 66 6f 72 20 4f 4e 20 6f 72  ,.** 1 for ON or
40c0: 20 4e 4f 52 4d 41 4c 20 61 6e 64 20 32 20 66 6f   NORMAL and 2 fo
40d0: 72 20 46 55 4c 4c 2e 20 20 52 65 74 75 72 6e 20  r FULL.  Return 
40e0: 31 20 66 6f 72 20 61 6e 20 65 6d 70 74 79 20 6f  1 for an empty o
40f0: 72 20 0a 2a 2a 20 75 6e 72 65 63 6f 67 6e 69 7a  r .** unrecogniz
4100: 65 64 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65  ed string argume
4110: 6e 74 2e 20 20 54 68 65 20 46 55 4c 4c 20 6f 70  nt.  The FULL op
4120: 74 69 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77  tion is disallow
4130: 65 64 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69  ed.** if the omi
4140: 74 46 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20  tFull parameter 
4150: 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  it 1..**.** Note
4160: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73   that the values
4170: 20 72 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e   returned are on
4180: 65 20 6c 65 73 73 20 74 68 61 74 20 74 68 65 20  e less that the 
4190: 76 61 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73  values that.** s
41a0: 68 6f 75 6c 64 20 62 65 20 70 61 73 73 65 64 20  hould be passed 
41b0: 69 6e 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65  into sqlite3Btre
41c0: 65 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28  eSetSafetyLevel(
41d0: 29 2e 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a  ).  The is done.
41e0: 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65  ** to support le
41f0: 67 61 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20  gacy SQL code.  
4200: 54 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c  The safety level
4210: 20 75 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c   used to be bool
4220: 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72  ean.** and older
4230: 20 73 63 72 69 70 74 73 20 6d 61 79 20 68 61 76   scripts may hav
4240: 65 20 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30  e used numbers 0
4250: 20 66 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66   for OFF and 1 f
4260: 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63  or ON..*/.static
4270: 20 75 38 20 67 65 74 53 61 66 65 74 79 4c 65 76   u8 getSafetyLev
4280: 65 6c 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  el(const char *z
4290: 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20  , int omitFull, 
42a0: 75 38 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20  u8 dflt){.      
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42c0: 20 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36         /* 123456
42d0: 37 38 39 20 31 32 33 34 35 36 37 38 39 20 2a 2f  789 123456789 */
42e0: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
42f0: 63 68 61 72 20 7a 54 65 78 74 5b 5d 20 3d 20 22  char zText[] = "
4300: 6f 6e 6f 66 66 61 6c 73 65 79 65 73 74 72 75 65  onoffalseyestrue
4310: 66 75 6c 6c 22 3b 0a 20 20 73 74 61 74 69 63 20  full";.  static 
4320: 63 6f 6e 73 74 20 75 38 20 69 4f 66 66 73 65 74  const u8 iOffset
4330: 5b 5d 20 3d 20 7b 30 2c 20 31 2c 20 32 2c 20 34  [] = {0, 1, 2, 4
4340: 2c 20 39 2c 20 31 32 2c 20 31 36 7d 3b 0a 20 20  , 9, 12, 16};.  
4350: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20  static const u8 
4360: 69 4c 65 6e 67 74 68 5b 5d 20 3d 20 7b 32 2c 20  iLength[] = {2, 
4370: 32 2c 20 33 2c 20 35 2c 20 33 2c 20 34 2c 20 34  2, 3, 5, 3, 4, 4
4380: 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
4390: 74 20 75 38 20 69 56 61 6c 75 65 5b 5d 20 3d 20  t u8 iValue[] = 
43a0: 20 7b 31 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c   {1, 0, 0, 0, 1,
43b0: 20 31 2c 20 32 7d 3b 0a 20 20 69 6e 74 20 69 2c   1, 2};.  int i,
43c0: 20 6e 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   n;.  if( sqlite
43d0: 33 49 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a  3Isdigit(*z) ){.
43e0: 20 20 20 20 72 65 74 75 72 6e 20 28 75 38 29 73      return (u8)s
43f0: 71 6c 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a 20  qlite3Atoi(z);. 
4400: 20 7d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33   }.  n = sqlite3
4410: 53 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20 20 66  Strlen30(z);.  f
4420: 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53  or(i=0; i<ArrayS
4430: 69 7a 65 28 69 4c 65 6e 67 74 68 29 2d 6f 6d 69  ize(iLength)-omi
4440: 74 46 75 6c 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  tFull; i++){.   
4450: 20 69 66 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d   if( iLength[i]=
4460: 3d 6e 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  =n && sqlite3Str
4470: 4e 49 43 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66  NICmp(&zText[iOf
4480: 66 73 65 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30  fset[i]],z,n)==0
4490: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
44a0: 20 69 56 61 6c 75 65 5b 69 5d 3b 0a 20 20 20 20   iValue[i];.    
44b0: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 64  }.  }.  return d
44c0: 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e  flt;.}../*.** In
44d0: 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65  terpret the give
44e0: 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 62 6f  n string as a bo
44f0: 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a  olean value..*/.
4500: 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
4510: 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
4520: 2a 7a 2c 20 75 38 20 64 66 6c 74 29 7b 0a 20 20  *z, u8 dflt){.  
4530: 72 65 74 75 72 6e 20 67 65 74 53 61 66 65 74 79  return getSafety
4540: 4c 65 76 65 6c 28 7a 2c 31 2c 64 66 6c 74 29 21  Level(z,1,dflt)!
4550: 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 73 71  =0;.}../* The sq
4560: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
4570: 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  ) function is us
4580: 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75  ed by other modu
4590: 6c 65 73 20 62 75 74 20 74 68 65 0a 2a 2a 20 72  les but the.** r
45a0: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 69 73  emainder of this
45b0: 20 66 69 6c 65 20 69 73 20 73 70 65 63 69 66 69   file is specifi
45c0: 63 20 74 6f 20 50 52 41 47 4d 41 20 70 72 6f 63  c to PRAGMA proc
45d0: 65 73 73 69 6e 67 2e 20 20 53 6f 20 6f 6d 69 74  essing.  So omit
45e0: 0a 2a 2a 20 74 68 65 20 72 65 73 74 20 6f 66 20  .** the rest of 
45f0: 74 68 65 20 66 69 6c 65 20 69 66 20 50 52 41 47  the file if PRAG
4600: 4d 41 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20  MAs are omitted 
4610: 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
4620: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
4630: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
4640: 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  MA)../*.** Inter
4650: 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20 73  pret the given s
4660: 74 72 69 6e 67 20 61 73 20 61 20 6c 6f 63 6b 69  tring as a locki
4670: 6e 67 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a  ng mode value..*
4680: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
4690: 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 63 6f 6e 73  LockingMode(cons
46a0: 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66  t char *z){.  if
46b0: 28 20 7a 20 29 7b 0a 20 20 20 20 69 66 28 20 30  ( z ){.    if( 0
46c0: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
46d0: 28 7a 2c 20 22 65 78 63 6c 75 73 69 76 65 22 29  (z, "exclusive")
46e0: 20 29 20 72 65 74 75 72 6e 20 50 41 47 45 52 5f   ) return PAGER_
46f0: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c  LOCKINGMODE_EXCL
4700: 55 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 30  USIVE;.    if( 0
4710: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
4720: 28 7a 2c 20 22 6e 6f 72 6d 61 6c 22 29 20 29 20  (z, "normal") ) 
4730: 72 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43  return PAGER_LOC
4740: 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 3b  KINGMODE_NORMAL;
4750: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 50 41  .  }.  return PA
4760: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
4770: 51 55 45 52 59 3b 0a 7d 0a 0a 23 69 66 6e 64 65  QUERY;.}..#ifnde
4780: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
4790: 54 4f 56 41 43 55 55 4d 0a 2f 2a 0a 2a 2a 20 49  TOVACUUM./*.** I
47a0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
47b0: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20  en string as an 
47c0: 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65  auto-vacuum mode
47d0: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
47e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 69  e following stri
47f0: 6e 67 73 2c 20 22 6e 6f 6e 65 22 2c 20 22 66 75  ngs, "none", "fu
4800: 6c 6c 22 20 61 6e 64 20 22 69 6e 63 72 65 6d 65  ll" and "increme
4810: 6e 74 61 6c 22 20 61 72 65 20 0a 2a 2a 20 61 63  ntal" are .** ac
4820: 63 65 70 74 61 62 6c 65 2c 20 61 73 20 61 72 65  ceptable, as are
4830: 20 74 68 65 69 72 20 6e 75 6d 65 72 69 63 20 65   their numeric e
4840: 71 75 69 76 61 6c 65 6e 74 73 3a 20 30 2c 20 31  quivalents: 0, 1
4850: 20 61 6e 64 20 32 20 72 65 73 70 65 63 74 69 76   and 2 respectiv
4860: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ely..*/.static i
4870: 6e 74 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d  nt getAutoVacuum
4880: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
4890: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20  .  int i;.  if( 
48a0: 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d  0==sqlite3StrICm
48b0: 70 28 7a 2c 20 22 6e 6f 6e 65 22 29 20 29 20 72  p(z, "none") ) r
48c0: 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55 54 4f  eturn BTREE_AUTO
48d0: 56 41 43 55 55 4d 5f 4e 4f 4e 45 3b 0a 20 20 69  VACUUM_NONE;.  i
48e0: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
48f0: 49 43 6d 70 28 7a 2c 20 22 66 75 6c 6c 22 29 20  ICmp(z, "full") 
4900: 29 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41  ) return BTREE_A
4910: 55 54 4f 56 41 43 55 55 4d 5f 46 55 4c 4c 3b 0a  UTOVACUUM_FULL;.
4920: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
4930: 53 74 72 49 43 6d 70 28 7a 2c 20 22 69 6e 63 72  StrICmp(z, "incr
4940: 65 6d 65 6e 74 61 6c 22 29 20 29 20 72 65 74 75  emental") ) retu
4950: 72 6e 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43  rn BTREE_AUTOVAC
4960: 55 55 4d 5f 49 4e 43 52 3b 0a 20 20 69 20 3d 20  UUM_INCR;.  i = 
4970: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a  sqlite3Atoi(z);.
4980: 20 20 72 65 74 75 72 6e 20 28 75 38 29 28 28 69    return (u8)((i
4990: 3e 3d 30 26 26 69 3c 3d 32 29 3f 69 3a 30 29 3b  >=0&&i<=2)?i:0);
49a0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e  .}.#endif /* ifn
49b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
49c0: 41 55 54 4f 56 41 43 55 55 4d 20 2a 2f 0a 0a 23  AUTOVACUUM */..#
49d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
49e0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
49f0: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
4a00: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
4a10: 67 20 61 73 20 61 20 74 65 6d 70 20 64 62 20 6c  g as a temp db l
4a20: 6f 63 61 74 69 6f 6e 2e 20 52 65 74 75 72 6e 20  ocation. Return 
4a30: 31 20 66 6f 72 20 66 69 6c 65 0a 2a 2a 20 62 61  1 for file.** ba
4a40: 63 6b 65 64 20 74 65 6d 70 6f 72 61 72 79 20 64  cked temporary d
4a50: 61 74 61 62 61 73 65 73 2c 20 32 20 66 6f 72 20  atabases, 2 for 
4a60: 74 68 65 20 52 65 64 2d 42 6c 61 63 6b 20 74 72  the Red-Black tr
4a70: 65 65 20 69 6e 20 6d 65 6d 6f 72 79 20 64 61 74  ee in memory dat
4a80: 61 62 61 73 65 0a 2a 2a 20 61 6e 64 20 30 20 74  abase.** and 0 t
4a90: 6f 20 75 73 65 20 74 68 65 20 63 6f 6d 70 69 6c  o use the compil
4aa0: 65 2d 74 69 6d 65 20 64 65 66 61 75 6c 74 2e 0a  e-time default..
4ab0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65  */.static int ge
4ac0: 74 54 65 6d 70 53 74 6f 72 65 28 63 6f 6e 73 74  tTempStore(const
4ad0: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28   char *z){.  if(
4ae0: 20 7a 5b 30 5d 3e 3d 27 30 27 20 26 26 20 7a 5b   z[0]>='0' && z[
4af0: 30 5d 3c 3d 27 32 27 20 29 7b 0a 20 20 20 20 72  0]<='2' ){.    r
4b00: 65 74 75 72 6e 20 7a 5b 30 5d 20 2d 20 27 30 27  eturn z[0] - '0'
4b10: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71  ;.  }else if( sq
4b20: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
4b30: 22 66 69 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20  "file")==0 ){.  
4b40: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65    return 1;.  }e
4b50: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
4b60: 74 72 49 43 6d 70 28 7a 2c 20 22 6d 65 6d 6f 72  trICmp(z, "memor
4b70: 79 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65  y")==0 ){.    re
4b80: 74 75 72 6e 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  turn 2;.  }else{
4b90: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
4ba0: 20 7d 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53   }.}.#endif /* S
4bb0: 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47  QLITE_PAGER_PRAG
4bc0: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
4bd0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
4be0: 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20  R_PRAGMAS./*.** 
4bf0: 49 6e 76 61 6c 69 64 61 74 65 20 74 65 6d 70 20  Invalidate temp 
4c00: 73 74 6f 72 61 67 65 2c 20 65 69 74 68 65 72 20  storage, either 
4c10: 77 68 65 6e 20 74 68 65 20 74 65 6d 70 20 73 74  when the temp st
4c20: 6f 72 61 67 65 20 69 73 20 63 68 61 6e 67 65 64  orage is changed
4c30: 0a 2a 2a 20 66 72 6f 6d 20 64 65 66 61 75 6c 74  .** from default
4c40: 2c 20 6f 72 20 77 68 65 6e 20 27 66 69 6c 65 27  , or when 'file'
4c50: 20 61 6e 64 20 74 68 65 20 74 65 6d 70 5f 73 74   and the temp_st
4c60: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 68 61  ore_directory ha
4c70: 73 20 63 68 61 6e 67 65 64 0a 2a 2f 0a 73 74 61  s changed.*/.sta
4c80: 74 69 63 20 69 6e 74 20 69 6e 76 61 6c 69 64 61  tic int invalida
4c90: 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 50 61  teTempStorage(Pa
4ca0: 72 73 65 20 2a 70 50 61 72 73 65 29 7b 0a 20 20  rse *pParse){.  
4cb0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50  sqlite3 *db = pP
4cc0: 61 72 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20  arse->db;.  if( 
4cd0: 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 21 3d  db->aDb[1].pBt!=
4ce0: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62  0 ){.    if( !db
4cf0: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20  ->autoCommit || 
4d00: 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
4d10: 52 65 61 64 54 72 61 6e 73 28 64 62 2d 3e 61 44  ReadTrans(db->aD
4d20: 62 5b 31 5d 2e 70 42 74 29 20 29 7b 0a 20 20 20  b[1].pBt) ){.   
4d30: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
4d40: 73 67 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70  sg(pParse, "temp
4d50: 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 63 61  orary storage ca
4d60: 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20  nnot be changed 
4d70: 22 0a 20 20 20 20 20 20 20 20 22 66 72 6f 6d 20  ".        "from 
4d80: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
4d90: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 72 65  tion");.      re
4da0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4db0: 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  R;.    }.    sql
4dc0: 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 28 64  ite3BtreeClose(d
4dd0: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 3b 0a  b->aDb[1].pBt);.
4de0: 20 20 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 70      db->aDb[1].p
4df0: 42 74 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  Bt = 0;.    sqli
4e00: 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
4e10: 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
4e20: 62 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  b);.  }.  return
4e30: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65   SQLITE_OK;.}.#e
4e40: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50  ndif /* SQLITE_P
4e50: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
4e60: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4e70: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
4e80: 41 53 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  AS./*.** If the 
4e90: 54 45 4d 50 20 64 61 74 61 62 61 73 65 20 69 73  TEMP database is
4ea0: 20 6f 70 65 6e 2c 20 63 6c 6f 73 65 20 69 74 20   open, close it 
4eb0: 61 6e 64 20 6d 61 72 6b 20 74 68 65 20 64 61 74  and mark the dat
4ec0: 61 62 61 73 65 20 73 63 68 65 6d 61 0a 2a 2a 20  abase schema.** 
4ed0: 61 73 20 6e 65 65 64 69 6e 67 20 72 65 6c 6f 61  as needing reloa
4ee0: 64 69 6e 67 2e 20 20 54 68 69 73 20 6d 75 73 74  ding.  This must
4ef0: 20 62 65 20 64 6f 6e 65 20 77 68 65 6e 20 75 73   be done when us
4f00: 69 6e 67 20 74 68 65 20 53 51 4c 49 54 45 5f 54  ing the SQLITE_T
4f10: 45 4d 50 5f 53 54 4f 52 45 0a 2a 2a 20 6f 72 20  EMP_STORE.** or 
4f20: 44 45 46 41 55 4c 54 5f 54 45 4d 50 5f 53 54 4f  DEFAULT_TEMP_STO
4f30: 52 45 20 70 72 61 67 6d 61 73 2e 0a 2a 2f 0a 73  RE pragmas..*/.s
4f40: 74 61 74 69 63 20 69 6e 74 20 63 68 61 6e 67 65  tatic int change
4f50: 54 65 6d 70 53 74 6f 72 61 67 65 28 50 61 72 73  TempStorage(Pars
4f60: 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
4f70: 20 63 68 61 72 20 2a 7a 53 74 6f 72 61 67 65 54   char *zStorageT
4f80: 79 70 65 29 7b 0a 20 20 69 6e 74 20 74 73 20 3d  ype){.  int ts =
4f90: 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28 7a 53   getTempStore(zS
4fa0: 74 6f 72 61 67 65 54 79 70 65 29 3b 0a 20 20 73  torageType);.  s
4fb0: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61  qlite3 *db = pPa
4fc0: 72 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64  rse->db;.  if( d
4fd0: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 74  b->temp_store==t
4fe0: 73 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  s ) return SQLIT
4ff0: 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 69 6e 76 61  E_OK;.  if( inva
5000: 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67  lidateTempStorag
5010: 65 28 20 70 50 61 72 73 65 20 29 20 21 3d 20 53  e( pParse ) != S
5020: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
5030: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
5040: 52 4f 52 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 74  ROR;.  }.  db->t
5050: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 28 75 38 29  emp_store = (u8)
5060: 74 73 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  ts;.  return SQL
5070: 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  ITE_OK;.}.#endif
5080: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
5090: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 2f 2a 0a  _PRAGMAS */../*.
50a0: 2a 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65  ** Generate code
50b0: 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e   to return a sin
50c0: 67 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  gle integer valu
50d0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  e..*/.static voi
50e0: 64 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e  d returnSingleIn
50f0: 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  t(Parse *pParse,
5100: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61   const char *zLa
5110: 62 65 6c 2c 20 69 36 34 20 76 61 6c 75 65 29 7b  bel, i64 value){
5120: 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c  .  Vdbe *v = sql
5130: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
5140: 73 65 29 3b 0a 20 20 69 6e 74 20 6d 65 6d 20 3d  se);.  int mem =
5150: 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b   ++pParse->nMem;
5160: 0a 20 20 69 36 34 20 2a 70 49 36 34 20 3d 20 73  .  i64 *pI64 = s
5170: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
5180: 77 28 70 50 61 72 73 65 2d 3e 64 62 2c 20 73 69  w(pParse->db, si
5190: 7a 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20  zeof(value));.  
51a0: 69 66 28 20 70 49 36 34 20 29 7b 0a 20 20 20 20  if( pI64 ){.    
51b0: 6d 65 6d 63 70 79 28 70 49 36 34 2c 20 26 76 61  memcpy(pI64, &va
51c0: 6c 75 65 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75  lue, sizeof(valu
51d0: 65 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  e));.  }.  sqlit
51e0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
51f0: 4f 50 5f 49 6e 74 36 34 2c 20 30 2c 20 6d 65 6d  OP_Int64, 0, mem
5200: 2c 20 30 2c 20 28 63 68 61 72 2a 29 70 49 36 34  , 0, (char*)pI64
5210: 2c 20 50 34 5f 49 4e 54 36 34 29 3b 0a 20 20 73  , P4_INT64);.  s
5220: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
5230: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 73 71  Cols(v, 1);.  sq
5240: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
5250: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
5260: 45 5f 4e 41 4d 45 2c 20 7a 4c 61 62 65 6c 2c 20  E_NAME, zLabel, 
5270: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
5280: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5290: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
52a0: 52 6f 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 7d 0a  Row, mem, 1);.}.
52b0: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
52c0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 61 6e 64  safety_level and
52d0: 20 70 61 67 65 72 20 66 6c 61 67 73 20 66 6f 72   pager flags for
52e0: 20 70 61 67 65 72 20 69 44 62 2e 20 20 4f 72 20   pager iDb.  Or 
52f0: 69 66 20 69 44 62 3c 30 0a 2a 2a 20 73 65 74 20  if iDb<0.** set 
5300: 74 68 65 73 65 20 76 61 6c 75 65 73 20 66 6f 72  these values for
5310: 20 61 6c 6c 20 70 61 67 65 72 73 2e 0a 2a 2f 0a   all pagers..*/.
5320: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5330: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
5340: 53 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65  S.static void se
5350: 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 73  tAllPagerFlags(s
5360: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
5370: 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
5380: 74 20 29 7b 0a 20 20 20 20 44 62 20 2a 70 44 62  t ){.    Db *pDb
5390: 20 3d 20 64 62 2d 3e 61 44 62 3b 0a 20 20 20 20   = db->aDb;.    
53a0: 69 6e 74 20 6e 20 3d 20 64 62 2d 3e 6e 44 62 3b  int n = db->nDb;
53b0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c  .    assert( SQL
53c0: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 3d 3d 50  ITE_FullFSync==P
53d0: 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 20 29  AGER_FULLFSYNC )
53e0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51  ;.    assert( SQ
53f0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
5400: 6e 63 3d 3d 50 41 47 45 52 5f 43 4b 50 54 5f 46  nc==PAGER_CKPT_F
5410: 55 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20  ULLFSYNC );.    
5420: 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43  assert( SQLITE_C
5430: 61 63 68 65 53 70 69 6c 6c 3d 3d 50 41 47 45 52  acheSpill==PAGER
5440: 5f 43 41 43 48 45 53 50 49 4c 4c 20 29 3b 0a 20  _CACHESPILL );. 
5450: 20 20 20 61 73 73 65 72 74 28 20 28 50 41 47 45     assert( (PAGE
5460: 52 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41  R_FULLFSYNC | PA
5470: 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59  GER_CKPT_FULLFSY
5480: 4e 43 20 7c 20 50 41 47 45 52 5f 43 41 43 48 45  NC | PAGER_CACHE
5490: 53 50 49 4c 4c 29 0a 20 20 20 20 20 20 20 20 20  SPILL).         
54a0: 20 20 20 20 3d 3d 20 20 50 41 47 45 52 5f 46 4c      ==  PAGER_FL
54b0: 41 47 53 5f 4d 41 53 4b 20 29 3b 0a 20 20 20 20  AGS_MASK );.    
54c0: 61 73 73 65 72 74 28 20 28 70 44 62 2d 3e 73 61  assert( (pDb->sa
54d0: 66 65 74 79 5f 6c 65 76 65 6c 20 26 20 50 41 47  fety_level & PAG
54e0: 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d  ER_SYNCHRONOUS_M
54f0: 41 53 4b 29 3d 3d 70 44 62 2d 3e 73 61 66 65 74  ASK)==pDb->safet
5500: 79 5f 6c 65 76 65 6c 20 29 3b 0a 20 20 20 20 77  y_level );.    w
5510: 68 69 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30 20  hile( (n--) > 0 
5520: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 44 62  ){.      if( pDb
5530: 2d 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 20  ->pBt ){.       
5540: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
5550: 50 61 67 65 72 46 6c 61 67 73 28 70 44 62 2d 3e  PagerFlags(pDb->
5560: 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pBt,.           
5570: 20 20 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74        pDb->safet
5580: 79 5f 6c 65 76 65 6c 20 7c 20 28 64 62 2d 3e 66  y_level | (db->f
5590: 6c 61 67 73 20 26 20 50 41 47 45 52 5f 46 4c 41  lags & PAGER_FLA
55a0: 47 53 5f 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20  GS_MASK) );.    
55b0: 20 20 7d 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b    }.      pDb++;
55c0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c  .    }.  }.}.#el
55d0: 73 65 0a 23 20 64 65 66 69 6e 65 20 73 65 74 41  se.# define setA
55e0: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 58 29 20  llPagerFlags(X) 
55f0: 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e   /* no-op */.#en
5600: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75  dif.../*.** Retu
5610: 72 6e 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61  rn a human-reada
5620: 62 6c 65 20 6e 61 6d 65 20 66 6f 72 20 61 20 63  ble name for a c
5630: 6f 6e 73 74 72 61 69 6e 74 20 72 65 73 6f 6c 75  onstraint resolu
5640: 74 69 6f 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a  tion action..*/.
5650: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5660: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
5670: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
5680: 72 20 2a 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38  r *actionName(u8
5690: 20 61 63 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73   action){.  cons
56a0: 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20  t char *zName;. 
56b0: 20 73 77 69 74 63 68 28 20 61 63 74 69 6f 6e 20   switch( action 
56c0: 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53  ){.    case OE_S
56d0: 65 74 4e 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d  etNull:  zName =
56e0: 20 22 53 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20   "SET NULL";    
56f0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
5700: 61 73 65 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20  ase OE_SetDflt: 
5710: 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 44 45   zName = "SET DE
5720: 46 41 55 4c 54 22 3b 20 20 20 20 20 62 72 65 61  FAULT";     brea
5730: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 43  k;.    case OE_C
5740: 61 73 63 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d  ascade:  zName =
5750: 20 22 43 41 53 43 41 44 45 22 3b 20 20 20 20 20   "CASCADE";     
5760: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
5770: 61 73 65 20 4f 45 5f 52 65 73 74 72 69 63 74 3a  ase OE_Restrict:
5780: 20 7a 4e 61 6d 65 20 3d 20 22 52 45 53 54 52 49   zName = "RESTRI
5790: 43 54 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  CT";        brea
57a0: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
57b0: 20 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d           zName =
57c0: 20 22 4e 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a   "NO ACTION";  .
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57e0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61 63        assert( ac
57f0: 74 69 6f 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b  tion==OE_None );
5800: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65   break;.  }.  re
5810: 74 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65  turn zName;.}.#e
5820: 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72  ndif.../*.** Par
5830: 61 6d 65 74 65 72 20 65 4d 6f 64 65 20 6d 75 73  ameter eMode mus
5840: 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20  t be one of the 
5850: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
5860: 45 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a  E_XXX constants.
5870: 2a 2a 20 64 65 66 69 6e 65 64 20 69 6e 20 70 61  ** defined in pa
5880: 67 65 72 2e 68 2e 20 54 68 69 73 20 66 75 6e 63  ger.h. This func
5890: 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
58a0: 20 61 73 73 6f 63 69 61 74 65 64 20 6c 6f 77 65   associated lowe
58b0: 72 63 61 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c  rcase.** journal
58c0: 2d 6d 6f 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63  -mode name..*/.c
58d0: 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
58e0: 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
58f0: 65 28 69 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20  e(int eMode){.  
5900: 73 74 61 74 69 63 20 63 68 61 72 20 2a 20 63 6f  static char * co
5910: 6e 73 74 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d  nst azModeName[]
5920: 20 3d 20 7b 0a 20 20 20 20 22 64 65 6c 65 74 65   = {.    "delete
5930: 22 2c 20 22 70 65 72 73 69 73 74 22 2c 20 22 6f  ", "persist", "o
5940: 66 66 22 2c 20 22 74 72 75 6e 63 61 74 65 22 2c  ff", "truncate",
5950: 20 22 6d 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65   "memory".#ifnde
5960: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
5970: 4c 0a 20 20 20 20 20 2c 20 22 77 61 6c 22 0a 23  L.     , "wal".#
5980: 65 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73  endif.  };.  ass
5990: 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e  ert( PAGER_JOURN
59a0: 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30  ALMODE_DELETE==0
59b0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   );.  assert( PA
59c0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
59d0: 50 45 52 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20  PERSIST==1 );.  
59e0: 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f  assert( PAGER_JO
59f0: 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32  URNALMODE_OFF==2
5a00: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   );.  assert( PA
5a10: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
5a20: 54 52 55 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20  TRUNCATE==3 );. 
5a30: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
5a40: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
5a50: 59 3d 3d 34 20 29 3b 0a 20 20 61 73 73 65 72 74  Y==4 );.  assert
5a60: 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ( PAGER_JOURNALM
5a70: 4f 44 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20  ODE_WAL==5 );.  
5a80: 61 73 73 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30  assert( eMode>=0
5a90: 20 26 26 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79   && eMode<=Array
5aa0: 53 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29  Size(azModeName)
5ab0: 20 29 3b 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65   );..  if( eMode
5ac0: 3d 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f  ==ArraySize(azMo
5ad0: 64 65 4e 61 6d 65 29 20 29 20 72 65 74 75 72 6e  deName) ) return
5ae0: 20 30 3b 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d   0;.  return azM
5af0: 6f 64 65 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a  odeName[eMode];.
5b00: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
5b10: 20 61 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d   a pragma statem
5b20: 65 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61  ent.  .**.** Pra
5b30: 67 6d 61 73 20 61 72 65 20 6f 66 20 74 68 69 73  gmas are of this
5b40: 20 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   form:.**.**    
5b50: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
5b60: 73 65 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d  se.]id [= value]
5b70: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74  .**.** The ident
5b80: 69 66 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f  ifier might also
5b90: 20 62 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54   be a string.  T
5ba0: 68 65 20 76 61 6c 75 65 20 69 73 20 61 20 73 74  he value is a st
5bb0: 72 69 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65  ring, and.** ide
5bc0: 6e 74 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75  ntifier, or a nu
5bd0: 6d 62 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46  mber.  If minusF
5be0: 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68 65  lag is true, the
5bf0: 6e 20 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a  n the value is.*
5c00: 2a 20 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20  * a number that 
5c10: 77 61 73 20 70 72 65 63 65 64 65 64 20 62 79 20  was preceded by 
5c20: 61 20 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a  a minus sign..**
5c30: 0a 2a 2a 20 49 66 20 74 68 65 20 6c 65 66 74 20  .** If the left 
5c40: 73 69 64 65 20 69 73 20 22 64 61 74 61 62 61 73  side is "databas
5c50: 65 2e 69 64 22 20 74 68 65 6e 20 70 49 64 31 20  e.id" then pId1 
5c60: 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
5c70: 6e 61 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32  name.** and pId2
5c80: 20 69 73 20 74 68 65 20 69 64 2e 20 20 49 66 20   is the id.  If 
5c90: 74 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73  the left side is
5ca0: 20 6a 75 73 74 20 22 69 64 22 20 74 68 65 6e 20   just "id" then 
5cb0: 70 49 64 31 20 69 73 20 74 68 65 0a 2a 2a 20 69  pId1 is the.** i
5cc0: 64 20 61 6e 64 20 70 49 64 32 20 69 73 20 61 6e  d and pId2 is an
5cd0: 79 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a  y empty string..
5ce0: 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  */.void sqlite3P
5cf0: 72 61 67 6d 61 28 0a 20 20 50 61 72 73 65 20 2a  ragma(.  Parse *
5d00: 70 50 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e  pParse, .  Token
5d10: 20 2a 70 49 64 31 2c 20 20 20 20 20 20 20 20 2f   *pId1,        /
5d20: 2a 20 46 69 72 73 74 20 70 61 72 74 20 6f 66 20  * First part of 
5d30: 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69  [database.]id fi
5d40: 65 6c 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  eld */.  Token *
5d50: 70 49 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20  pId2,        /* 
5d60: 53 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b  Second part of [
5d70: 64 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65  database.]id fie
5d80: 6c 64 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  ld, or NULL */. 
5d90: 20 54 6f 6b 65 6e 20 2a 70 56 61 6c 75 65 2c 20   Token *pValue, 
5da0: 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 66 6f       /* Token fo
5db0: 72 20 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55  r <value>, or NU
5dc0: 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 6d 69 6e 75  LL */.  int minu
5dd0: 73 46 6c 61 67 20 20 20 20 20 20 20 2f 2a 20 54  sFlag       /* T
5de0: 72 75 65 20 69 66 20 61 20 27 2d 27 20 73 69 67  rue if a '-' sig
5df0: 6e 20 70 72 65 63 65 64 65 64 20 3c 76 61 6c 75  n preceded <valu
5e00: 65 3e 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20  e> */.){.  char 
5e10: 2a 7a 4c 65 66 74 20 3d 20 30 3b 20 20 20 20 20  *zLeft = 0;     
5e20: 20 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61    /* Nul-termina
5e30: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
5e40: 20 3c 69 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20   <id> */.  char 
5e50: 2a 7a 52 69 67 68 74 20 3d 20 30 3b 20 20 20 20  *zRight = 0;    
5e60: 20 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61    /* Nul-termina
5e70: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
5e80: 20 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c   <value>, or NUL
5e90: 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  L */.  const cha
5ea0: 72 20 2a 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a  r *zDb = 0;   /*
5eb0: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 6e 61   The database na
5ec0: 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  me */.  Token *p
5ed0: 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
5ee0: 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64  * Pointer to <id
5ef0: 3e 20 74 6f 6b 65 6e 20 2a 2f 0a 20 20 63 68 61  > token */.  cha
5f00: 72 20 2a 61 46 63 6e 74 6c 5b 34 5d 3b 20 20 20  r *aFcntl[4];   
5f10: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
5f20: 74 6f 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  to SQLITE_FCNTL_
5f30: 50 52 41 47 4d 41 20 2a 2f 0a 20 20 69 6e 74 20  PRAGMA */.  int 
5f40: 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  iDb;            
5f50: 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69     /* Database i
5f60: 6e 64 65 78 20 66 6f 72 20 3c 64 61 74 61 62 61  ndex for <databa
5f70: 73 65 3e 20 2a 2f 0a 20 20 69 6e 74 20 6c 77 72  se> */.  int lwr
5f80: 2c 20 75 70 72 2c 20 6d 69 64 3b 20 20 20 20 20  , upr, mid;     
5f90: 20 20 20 20 20 20 2f 2a 20 42 69 6e 61 72 79 20        /* Binary 
5fa0: 73 65 61 72 63 68 20 62 6f 75 6e 64 73 20 2a 2f  search bounds */
5fb0: 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5fd0: 2f 2a 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20  /* return value 
5fe0: 66 6f 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54  form SQLITE_FCNT
5ff0: 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71  L_PRAGMA */.  sq
6000: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72  lite3 *db = pPar
6010: 73 65 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68  se->db;    /* Th
6020: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
6030: 63 74 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70  ction */.  Db *p
6040: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
6050: 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73          /* The s
6060: 70 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65  pecific database
6070: 20 62 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20   being pragmaed 
6080: 2a 2f 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73  */.  Vdbe *v = s
6090: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
60a0: 61 72 73 65 29 3b 20 20 2f 2a 20 50 72 65 70 61  arse);  /* Prepa
60b0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f  red statement */
60c0: 0a 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72  ..  if( v==0 ) r
60d0: 65 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33  eturn;.  sqlite3
60e0: 56 64 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28  VdbeRunOnlyOnce(
60f0: 76 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d  v);.  pParse->nM
6100: 65 6d 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e  em = 2;..  /* In
6110: 74 65 72 70 72 65 74 20 74 68 65 20 5b 64 61 74  terpret the [dat
6120: 61 62 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20  abase.] part of 
6130: 74 68 65 20 70 72 61 67 6d 61 20 73 74 61 74 65  the pragma state
6140: 6d 65 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65  ment. iDb is the
6150: 0a 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74  .  ** index of t
6160: 68 65 20 64 61 74 61 62 61 73 65 20 74 68 69 73  he database this
6170: 20 70 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67   pragma is being
6180: 20 61 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64   applied to in d
6190: 62 2e 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44  b.aDb[]. */.  iD
61a0: 62 20 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61  b = sqlite3TwoPa
61b0: 72 74 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70  rtName(pParse, p
61c0: 49 64 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29  Id1, pId2, &pId)
61d0: 3b 0a 20 20 69 66 28 20 69 44 62 3c 30 20 29 20  ;.  if( iDb<0 ) 
61e0: 72 65 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20  return;.  pDb = 
61f0: 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a  &db->aDb[iDb];..
6200: 20 20 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70    /* If the temp
6210: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 62 65   database has be
6220: 65 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61  en explicitly na
6230: 6d 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  med as part of t
6240: 68 65 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c  he .  ** pragma,
6250: 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73   make sure it is
6260: 20 6f 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69   open. .  */.  i
6270: 66 28 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c  f( iDb==1 && sql
6280: 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
6290: 62 61 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a  base(pParse) ){.
62a0: 20 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a      return;.  }.
62b0: 0a 20 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74  .  zLeft = sqlit
62c0: 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
62d0: 64 62 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20  db, pId);.  if( 
62e0: 21 7a 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b  !zLeft ) return;
62f0: 0a 20 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67  .  if( minusFlag
6300: 20 29 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d   ){.    zRight =
6310: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
6320: 64 62 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75  db, "-%T", pValu
6330: 65 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  e);.  }else{.   
6340: 20 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65   zRight = sqlite
6350: 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64  3NameFromToken(d
6360: 62 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a  b, pValue);.  }.
6370: 0a 20 20 61 73 73 65 72 74 28 20 70 49 64 32 20  .  assert( pId2 
6380: 29 3b 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d  );.  zDb = pId2-
6390: 3e 6e 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d  >n>0 ? pDb->zNam
63a0: 65 20 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c  e : 0;.  if( sql
63b0: 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 70 50  ite3AuthCheck(pP
63c0: 61 72 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41  arse, SQLITE_PRA
63d0: 47 4d 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67  GMA, zLeft, zRig
63e0: 68 74 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20  ht, zDb) ){.    
63f0: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
6400: 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20  .  }..  /* Send 
6410: 61 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  an SQLITE_FCNTL_
6420: 50 52 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74  PRAGMA file-cont
6430: 72 6f 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72  rol to the under
6440: 6c 79 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63  lying VFS.  ** c
6450: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69  onnection.  If i
6460: 74 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45  t returns SQLITE
6470: 5f 4f 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65  _OK, then assume
6480: 20 74 68 61 74 20 74 68 65 20 56 46 53 0a 20 20   that the VFS.  
6490: 2a 2a 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70  ** handled the p
64a0: 72 61 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61  ragma and genera
64b0: 74 65 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61  te a no-op prepa
64c0: 72 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20  red statement.. 
64d0: 20 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20   */.  aFcntl[0] 
64e0: 3d 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d  = 0;.  aFcntl[1]
64f0: 20 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e   = zLeft;.  aFcn
6500: 74 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a  tl[2] = zRight;.
6510: 20 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b    aFcntl[3] = 0;
6520: 0a 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c  .  db->busyHandl
6530: 65 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20  er.nBusy = 0;.  
6540: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c  rc = sqlite3_fil
6550: 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44  e_control(db, zD
6560: 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  b, SQLITE_FCNTL_
6570: 50 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61  PRAGMA, (void*)a
6580: 46 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63  Fcntl);.  if( rc
6590: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
65a0: 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d     if( aFcntl[0]
65b0: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 65   ){.      int me
65c0: 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  m = ++pParse->nM
65d0: 65 6d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  em;.      sqlite
65e0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
65f0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d 65  P_String8, 0, me
6600: 6d 2c 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c  m, 0, aFcntl[0],
6610: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
6620: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
6630: 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  (v, 1);.      sq
6640: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
6650: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
6660: 45 5f 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74 22  E_NAME, "result"
6670: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
6680: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6690: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
66a0: 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20  ResultRow, mem, 
66b0: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
66c0: 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d  3_free(aFcntl[0]
66d0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  );.    }.    got
66e0: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
66f0: 7d 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  }.  if( rc!=SQLI
6700: 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20  TE_NOTFOUND ){. 
6710: 20 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d     if( aFcntl[0]
6720: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
6730: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
6740: 2c 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30  , "%s", aFcntl[0
6750: 5d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ]);.      sqlite
6760: 33 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d  3_free(aFcntl[0]
6770: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61  );.    }.    pPa
6780: 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20  rse->nErr++;.   
6790: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63   pParse->rc = rc
67a0: 3b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d  ;.    goto pragm
67b0: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  a_out;.  }..  /*
67c0: 20 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61 67   Locate the prag
67d0: 6d 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70  ma in the lookup
67e0: 20 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20   table */.  lwr 
67f0: 3d 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72  = 0;.  upr = Arr
6800: 61 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61  aySize(aPragmaNa
6810: 6d 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28  mes)-1;.  while(
6820: 20 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20   lwr<=upr ){.   
6830: 20 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29   mid = (lwr+upr)
6840: 2f 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  /2;.    rc = sql
6850: 69 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65  ite3_stricmp(zLe
6860: 66 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  ft, aPragmaNames
6870: 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20  [mid].zName);.  
6880: 20 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72    if( rc==0 ) br
6890: 65 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c  eak;.    if( rc<
68a0: 30 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d  0 ){.      upr =
68b0: 20 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65   mid - 1;.    }e
68c0: 6c 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d  lse{.      lwr =
68d0: 20 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a   mid + 1;.    }.
68e0: 20 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70    }.  if( lwr>up
68f0: 72 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  r ) goto pragma_
6900: 6f 75 74 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  out;..  /* Make 
6910: 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73  sure the databas
6920: 65 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64  e schema is load
6930: 65 64 20 69 66 20 74 68 65 20 70 72 61 67 6d 61  ed if the pragma
6940: 20 72 65 71 75 69 72 65 73 20 74 68 61 74 20 2a   requires that *
6950: 2f 0a 20 20 69 66 28 20 28 61 50 72 61 67 6d 61  /.  if( (aPragma
6960: 4e 61 6d 65 73 5b 6d 69 64 5d 2e 6d 50 72 61 67  Names[mid].mPrag
6970: 46 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f  Flag & PragFlag_
6980: 4e 65 65 64 53 63 68 65 6d 61 29 21 3d 30 20 29  NeedSchema)!=0 )
6990: 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  {.    if( sqlite
69a0: 33 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72  3ReadSchema(pPar
69b0: 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d  se) ) goto pragm
69c0: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  a_out;.  }..  /*
69d0: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 61 70 70   Jump to the app
69e0: 72 6f 70 72 69 61 74 65 20 70 72 61 67 6d 61 20  ropriate pragma 
69f0: 68 61 6e 64 6c 65 72 20 2a 2f 0a 20 20 73 77 69  handler */.  swi
6a00: 74 63 68 28 20 61 50 72 61 67 6d 61 4e 61 6d 65  tch( aPragmaName
6a10: 73 5b 6d 69 64 5d 2e 65 50 72 61 67 54 79 70 20  s[mid].ePragTyp 
6a20: 29 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e  ){.  .#if !defin
6a30: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
6a40: 41 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26  AGER_PRAGMAS) &&
6a50: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
6a60: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
6a70: 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ).  /*.  **  PRA
6a80: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64  GMA [database.]d
6a90: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
6aa0: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
6ab0: 64 61 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c  database.]defaul
6ac0: 74 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20  t_cache_size=N. 
6ad0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72   **.  ** The fir
6ae0: 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20  st form reports 
6af0: 74 68 65 20 63 75 72 72 65 6e 74 20 70 65 72 73  the current pers
6b00: 69 73 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66  istent setting f
6b10: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65  or the.  ** page
6b20: 20 63 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68   cache size.  Th
6b30: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
6b40: 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20   is the maximum 
6b50: 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70  number of.  ** p
6b60: 61 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65  ages in the page
6b70: 20 63 61 63 68 65 2e 20 20 54 68 65 20 73 65 63   cache.  The sec
6b80: 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f  ond form sets bo
6b90: 74 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20  th the current. 
6ba0: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
6bb0: 69 7a 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68  ize value and th
6bc0: 65 20 70 65 72 73 69 73 74 65 6e 74 20 70 61 67  e persistent pag
6bd0: 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c  e cache size val
6be0: 75 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69  ue.  ** stored i
6bf0: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
6c00: 69 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f  ile..  **.  ** O
6c10: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
6c20: 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65   SQLite would se
6c30: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61  t the default ca
6c40: 63 68 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20  che size to a.  
6c50: 2a 2a 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62  ** negative numb
6c60: 65 72 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73  er to indicate s
6c70: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20  ynchronous=OFF. 
6c80: 20 54 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e   These days, syn
6c90: 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73  chronous.  ** is
6ca0: 20 61 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65   always on by de
6cb0: 66 61 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73  fault regardless
6cc0: 20 6f 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20   of the sign of 
6cd0: 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68  the default cach
6ce0: 65 0a 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75  e.  ** size.  Bu
6cf0: 74 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61  t continue to ta
6d00: 6b 65 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20  ke the absolute 
6d10: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66  value of the def
6d20: 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20  ault cache.  ** 
6d30: 73 69 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63  size of historic
6d40: 61 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79  al compatibility
6d50: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
6d60: 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43 41  agTyp_DEFAULT_CA
6d70: 43 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20  CHE_SIZE: {.    
6d80: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
6d90: 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53   iLn = VDBE_OFFS
6da0: 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20  ET_LINENO(2);.  
6db0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
6dc0: 64 62 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63  dbeOpList getCac
6dd0: 68 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20  heSize[] = {.   
6de0: 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74     { OP_Transact
6df0: 69 6f 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20  ion, 0, 0,      
6e00: 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20    0},           
6e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6e20: 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   0 */.      { OP
6e30: 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c  _ReadCookie,  0,
6e40: 20 31 2c 20 20 20 20 20 20 20 20 42 54 52 45 45   1,        BTREE
6e50: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
6e60: 49 5a 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20  IZE},  /* 1 */. 
6e70: 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c       { OP_IfPos,
6e80: 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20         1, 8,    
6e90: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
6ea0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
6eb0: 30 2c 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 2,        0},
6ec0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74  .      { OP_Subt
6ed0: 72 61 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20  ract,    1, 2,  
6ee0: 20 20 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20        1},.      
6ef0: 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20  { OP_IfPos,     
6f00: 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30    1, 8,        0
6f10: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e  },.      { OP_In
6f20: 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c  teger,     0, 1,
6f30: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20          0},     
6f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f50: 20 20 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20      /* 6 */.    
6f60: 20 20 7b 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20    { OP_Noop,    
6f70: 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20      0, 0,       
6f80: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
6f90: 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20  ResultRow,   1, 
6fa0: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  1,        0},.  
6fb0: 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 61 64 64    };.    int add
6fc0: 72 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  r;.    sqlite3Vd
6fd0: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
6fe0: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  Db);.    if( !zR
6ff0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
7000: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
7010: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20  ols(v, 1);.     
7020: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
7030: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
7040: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 61 63 68  NAME_NAME, "cach
7050: 65 5f 73 69 7a 65 22 2c 20 53 51 4c 49 54 45 5f  e_size", SQLITE_
7060: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70  STATIC);.      p
7070: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32  Parse->nMem += 2
7080: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
7090: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
70a0: 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
70b0: 28 67 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20  (getCacheSize), 
70c0: 67 65 74 43 61 63 68 65 53 69 7a 65 2c 69 4c 6e  getCacheSize,iLn
70d0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
70e0: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
70f0: 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20  addr, iDb);.    
7100: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
7110: 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP1(v, addr+1,
7120: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
7130: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
7140: 28 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49  (v, addr+6, SQLI
7150: 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  TE_DEFAULT_CACHE
7160: 5f 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73  _SIZE);.    }els
7170: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a  e{.      int siz
7180: 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e  e = sqlite3AbsIn
7190: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
71a0: 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20  zRight));.      
71b0: 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74  sqlite3BeginWrit
71c0: 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73  eOperation(pPars
71d0: 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20  e, 0, iDb);.    
71e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
71f0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
7200: 72 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20  r, size, 1);.   
7210: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
7220: 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f  dOp3(v, OP_SetCo
7230: 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45  okie, iDb, BTREE
7240: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
7250: 49 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61  IZE, 1);.      a
7260: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
7270: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
7280: 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
7290: 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
72a0: 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69  >cache_size = si
72b0: 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ze;.      sqlite
72c0: 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69  3BtreeSetCacheSi
72d0: 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62  ze(pDb->pBt, pDb
72e0: 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65  ->pSchema->cache
72f0: 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20  _size);.    }.  
7300: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
7310: 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f  dif /* !SQLITE_O
7320: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
7330: 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49  S && !SQLITE_OMI
7340: 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a  T_DEPRECATED */.
7350: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
7360: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
7370: 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20  PRAGMAS).  /*.  
7380: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
7390: 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a  base.]page_size.
73a0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
73b0: 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a  tabase.]page_siz
73c0: 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  e=N.  **.  ** Th
73d0: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
73e0: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
73f0: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
7400: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70  .  ** database p
7410: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
7420: 73 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  s.  The second f
7430: 6f 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a  orm sets the.  *
7440: 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  * database page 
7450: 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65  size value.  The
7460: 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20   value can only 
7470: 62 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74  be set if.  ** t
7480: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20  he database has 
7490: 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65  not yet been cre
74a0: 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  ated..  */.  cas
74b0: 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53  e PragTyp_PAGE_S
74c0: 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65  IZE: {.    Btree
74d0: 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74   *pBt = pDb->pBt
74e0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42  ;.    assert( pB
74f0: 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  t!=0 );.    if( 
7500: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
7510: 20 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41   int size = ALWA
7520: 59 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65  YS(pBt) ? sqlite
7530: 33 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a  3BtreeGetPageSiz
7540: 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20  e(pBt) : 0;.    
7550: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
7560: 74 28 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f  t(pParse, "page_
7570: 73 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20  size", size);.  
7580: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
7590: 2a 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69  * Malloc may fai
75a0: 6c 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74  l when setting t
75b0: 68 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73  he page-size, as
75c0: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74   there is an int
75d0: 65 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62  ernal.      ** b
75e0: 75 66 66 65 72 20 74 68 61 74 20 74 68 65 20 70  uffer that the p
75f0: 61 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69  ager module resi
7600: 7a 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65  zes using sqlite
7610: 33 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20  3_realloc()..   
7620: 20 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e     */.      db->
7630: 6e 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73  nextPagesize = s
7640: 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
7650: 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51  t);.      if( SQ
7660: 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69  LITE_NOMEM==sqli
7670: 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65 53  te3BtreeSetPageS
7680: 69 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78  ize(pBt, db->nex
7690: 74 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20  tPagesize,-1,0) 
76a0: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d  ){.        db->m
76b0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
76c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
76d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
76e0: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
76f0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75   [database.]secu
7700: 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20  re_delete.  **  
7710: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
7720: 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d  .]secure_delete=
7730: 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a  ON/OFF.  **.  **
7740: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
7750: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
7760: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
7770: 74 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f  the.  ** secure_
7780: 64 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68  delete flag.  Th
7790: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68  e second form ch
77a0: 61 6e 67 65 73 20 74 68 65 20 73 65 63 75 72 65  anges the secure
77b0: 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61  _delete.  ** fla
77c0: 67 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65  g setting and re
77d0: 70 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c  ports thenew val
77e0: 75 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ue..  */.  case 
77f0: 50 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44  PragTyp_SECURE_D
7800: 45 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72  ELETE: {.    Btr
7810: 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70  ee *pBt = pDb->p
7820: 42 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20  Bt;.    int b = 
7830: 2d 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  -1;.    assert( 
7840: 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66  pBt!=0 );.    if
7850: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
7860: 20 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74    b = sqlite3Get
7870: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
7880: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  0);.    }.    if
7890: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20  ( pId2->n==0 && 
78a0: 62 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  b>=0 ){.      in
78b0: 74 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28  t ii;.      for(
78c0: 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
78d0: 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
78e0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63   sqlite3BtreeSec
78f0: 75 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44  ureDelete(db->aD
7900: 62 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20  b[ii].pBt, b);. 
7910: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
7920: 20 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   b = sqlite3Btre
7930: 65 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42  eSecureDelete(pB
7940: 74 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72  t, b);.    retur
7950: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
7960: 65 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74  e, "secure_delet
7970: 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61  e", b);.    brea
7980: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
7990: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
79a0: 61 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f  ase.]max_page_co
79b0: 75 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  unt.  **  PRAGMA
79c0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f   [database.]max_
79d0: 70 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a  page_count=N.  *
79e0: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
79f0: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
7a00: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
7a10: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d  g for the.  ** m
7a20: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
7a30: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
7a40: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
7a50: 65 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66  e .  ** second f
7a60: 6f 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20  orm attempts to 
7a70: 63 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74  change this sett
7a80: 69 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20  ing.  Both.  ** 
7a90: 66 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65  forms return the
7aa0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
7ab0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
7ac0: 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f  absolute value o
7ad0: 66 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68  f N is used.  Th
7ae0: 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74  is is undocument
7af0: 65 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a  ed and might.  *
7b00: 2a 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f  * change.  The o
7b10: 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74  nly purpose is t
7b20: 6f 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73  o provide an eas
7b30: 79 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20  y way to test.  
7b40: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62  ** the sqlite3Ab
7b50: 73 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f  sInt32() functio
7b60: 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52  n..  **.  **  PR
7b70: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
7b80: 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a  page_count.  **.
7b90: 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20    ** Return the 
7ba0: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
7bb0: 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  in the specified
7bc0: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a   database..  */.
7bd0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50    case PragTyp_P
7be0: 41 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20  AGE_COUNT: {.   
7bf0: 20 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73   int iReg;.    s
7c00: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
7c10: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
7c20: 44 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20  Db);.    iReg = 
7c30: 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a  ++pParse->nMem;.
7c40: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54      if( sqlite3T
7c50: 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29  olower(zLeft[0])
7c60: 3d 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73  =='p' ){.      s
7c70: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
7c80: 28 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74  (v, OP_Pagecount
7c90: 2c 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20  , iDb, iReg);.  
7ca0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
7cb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
7cc0: 28 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c  (v, OP_MaxPgcnt,
7cd0: 20 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20   iDb, iReg, .   
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cf0: 20 20 20 20 20 73 71 6c 69 74 65 33 41 62 73 49       sqlite3AbsI
7d00: 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69  nt32(sqlite3Atoi
7d10: 28 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20  (zRight)));.    
7d20: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
7d30: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
7d40: 73 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31  sultRow, iReg, 1
7d50: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
7d60: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
7d70: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
7d80: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
7d90: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
7da0: 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f  , zLeft, SQLITE_
7db0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
7dc0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
7dd0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
7de0: 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67  atabase.]locking
7df0: 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47  _mode.  **  PRAG
7e00: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f  MA [database.]lo
7e10: 63 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f  cking_mode = (no
7e20: 72 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a  rmal|exclusive).
7e30: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
7e40: 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45  Typ_LOCKING_MODE
7e50: 3a 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  : {.    const ch
7e60: 61 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d  ar *zRet = "norm
7e70: 61 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f  al";.    int eMo
7e80: 64 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d  de = getLockingM
7e90: 6f 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20  ode(zRight);..  
7ea0: 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30    if( pId2->n==0
7eb0: 20 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52   && eMode==PAGER
7ec0: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45  _LOCKINGMODE_QUE
7ed0: 52 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53  RY ){.      /* S
7ee0: 69 6d 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f  imple "PRAGMA lo
7ef0: 63 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61  cking_mode;" sta
7f00: 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20  tement. This is 
7f10: 61 20 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20  a query for.    
7f20: 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
7f30: 20 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67   default locking
7f40: 20 6d 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79   mode (which may
7f50: 20 62 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f   be different to
7f60: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f  .      ** the lo
7f70: 63 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68  cking-mode of th
7f80: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29  e main database)
7f90: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
7fa0: 20 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c   eMode = db->dfl
7fb0: 74 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d  tLockMode;.    }
7fc0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65  else{.      Page
7fd0: 72 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20  r *pPager;.     
7fe0: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
7ff0: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ){.        /* Th
8000: 69 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61  is indicates tha
8010: 74 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61  t no database na
8020: 6d 65 20 77 61 73 20 73 70 65 63 69 66 69 65 64  me was specified
8030: 20 61 73 20 70 61 72 74 0a 20 20 20 20 20 20 20   as part.       
8040: 20 2a 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d   ** of the PRAGM
8050: 41 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68  A command. In th
8060: 69 73 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b  is case the lock
8070: 69 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65  ing-mode must be
8080: 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20  .        ** set 
8090: 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  on all attached 
80a0: 64 61 74 61 62 61 73 65 73 2c 20 61 73 20 77 65  databases, as we
80b0: 6c 6c 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64  ll as the main d
80c0: 62 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20  b file..        
80d0: 2a 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c  **.        ** Al
80e0: 73 6f 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e  so, the sqlite3.
80f0: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72  dfltLockMode var
8100: 69 61 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20  iable is set so 
8110: 74 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20  that.        ** 
8120: 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79  any subsequently
8130: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
8140: 73 65 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65  ses also use the
8150: 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20   specified.     
8160: 20 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f     ** locking mo
8170: 64 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  de..        */. 
8180: 20 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20         int ii;. 
8190: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 70 44         assert(pD
81a0: 62 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b  b==&db->aDb[0]);
81b0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
81c0: 32 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  2; ii<db->nDb; i
81d0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
81e0: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
81f0: 42 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61  BtreePager(db->a
8200: 44 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20  Db[ii].pBt);.   
8210: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
8220: 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70  gerLockingMode(p
8230: 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20  Pager, eMode);. 
8240: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
8250: 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64   db->dfltLockMod
8260: 65 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20  e = (u8)eMode;. 
8270: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61       }.      pPa
8280: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
8290: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
82a0: 29 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  );.      eMode =
82b0: 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63   sqlite3PagerLoc
82c0: 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c  kingMode(pPager,
82d0: 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a   eMode);.    }..
82e0: 20 20 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64      assert( eMod
82f0: 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  e==PAGER_LOCKING
8300: 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20  MODE_NORMAL.    
8310: 20 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65          || eMode
8320: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
8330: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b  ODE_EXCLUSIVE );
8340: 0a 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d  .    if( eMode==
8350: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
8360: 45 5f 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20  E_EXCLUSIVE ){. 
8370: 20 20 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63       zRet = "exc
8380: 6c 75 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20  lusive";.    }. 
8390: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
83a0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
83b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
83c0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
83d0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c  COLNAME_NAME, "l
83e0: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51  ocking_mode", SQ
83f0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8400: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8410: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
8420: 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74  8, 0, 1, 0, zRet
8430: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
8440: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8450: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
8460: 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  1);.    break;. 
8470: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
8480: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
8490: 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20  ]journal_mode.  
84a0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
84b0: 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f  base.]journal_mo
84c0: 64 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20  de =.  **       
84d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
84e0: 64 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f  delete|persist|o
84f0: 66 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f  ff|truncate|memo
8500: 72 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f  ry|wal|off).  */
8510: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
8520: 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a  JOURNAL_MODE: {.
8530: 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20      int eMode;  
8540: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
8550: 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  the PAGER_JOURNA
8560: 4c 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c  LMODE_XXX symbol
8570: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b  s */.    int ii;
8580: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
8590: 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20  op counter */.. 
85a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
85b0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
85c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
85d0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
85e0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a  COLNAME_NAME, "j
85f0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51  ournal_mode", SQ
8600: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20  LITE_STATIC);.. 
8610: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
8620: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
8630: 74 68 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f  there is no "=MO
8640: 44 45 22 20 70 61 72 74 20 6f 66 20 74 68 65 20  DE" part of the 
8650: 70 72 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65  pragma, do a que
8660: 72 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20  ry for the.     
8670: 20 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65   ** current mode
8680: 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20   */.      eMode 
8690: 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  = PAGER_JOURNALM
86a0: 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d  ODE_QUERY;.    }
86b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73  else{.      cons
86c0: 74 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20  t char *zMode;. 
86d0: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c       int n = sql
86e0: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69  ite3Strlen30(zRi
86f0: 67 68 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  ght);.      for(
8700: 65 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20  eMode=0; (zMode 
8710: 3d 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  = sqlite3Journal
8720: 4d 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29  Modename(eMode))
8730: 21 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20  !=0; eMode++){. 
8740: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
8750: 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68  e3StrNICmp(zRigh
8760: 74 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20  t, zMode, n)==0 
8770: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d  ) break;.      }
8780: 0a 20 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64  .      if( !zMod
8790: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  e ){.        /* 
87a0: 49 66 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70  If the "=MODE" p
87b0: 61 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  art does not mat
87c0: 63 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75  ch any known jou
87d0: 72 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20  rnal mode,.     
87e0: 20 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20     ** then do a 
87f0: 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20  query */.       
8800: 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a   eMode = PAGER_J
8810: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
8820: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
8830: 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50      if( eMode==P
8840: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
8850: 5f 51 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e  _QUERY && pId2->
8860: 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  n==0 ){.      /*
8870: 20 43 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41   Convert "PRAGMA
8880: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69   journal_mode" i
8890: 6e 74 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e  nto "PRAGMA main
88a0: 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a  .journal_mode" *
88b0: 2f 0a 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b  /.      iDb = 0;
88c0: 0a 20 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d  .      pId2->n =
88d0: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f   1;.    }.    fo
88e0: 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20  r(ii=db->nDb-1; 
88f0: 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20  ii>=0; ii--){.  
8900: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
8910: 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d  ii].pBt && (ii==
8920: 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d  iDb || pId2->n==
8930: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0) ){.        sq
8940: 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
8950: 65 65 28 76 2c 20 69 69 29 3b 0a 20 20 20 20 20  ee(v, ii);.     
8960: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
8970: 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e  dOp3(v, OP_Journ
8980: 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c 20 65  alMode, ii, 1, e
8990: 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Mode);.      }. 
89a0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
89b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
89c0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
89d0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
89e0: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
89f0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
8a00: 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d  journal_size_lim
8a10: 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  it.  **  PRAGMA 
8a20: 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e  [database.]journ
8a30: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a  al_size_limit=N.
8a40: 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72    **.  ** Get or
8a50: 20 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69   set the size li
8a60: 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20  mit on rollback 
8a70: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20  journal files.. 
8a80: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
8a90: 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f  yp_JOURNAL_SIZE_
8aa0: 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67  LIMIT: {.    Pag
8ab0: 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c  er *pPager = sql
8ac0: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
8ad0: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36  Db->pBt);.    i6
8ae0: 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20  4 iLimit = -2;. 
8af0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
8b00: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65  .      sqlite3De
8b10: 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67  cOrHexToI64(zRig
8b20: 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20 20  ht, &iLimit);.  
8b30: 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d      if( iLimit<-
8b40: 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b  1 ) iLimit = -1;
8b50: 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69  .    }.    iLimi
8b60: 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  t = sqlite3Pager
8b70: 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74  JournalSizeLimit
8b80: 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29  (pPager, iLimit)
8b90: 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  ;.    returnSing
8ba0: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6a  leInt(pParse, "j
8bb0: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
8bc0: 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20  t", iLimit);.   
8bd0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e   break;.  }..#en
8be0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
8bf0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
8c00: 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20   */..  /*.  **  
8c10: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
8c20: 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20  .]auto_vacuum.  
8c30: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
8c40: 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75  base.]auto_vacuu
8c50: 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65  m=N.  **.  ** Ge
8c60: 74 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c  t or set the val
8c70: 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ue of the databa
8c80: 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27  se 'auto-vacuum'
8c90: 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a   parameter..  **
8ca0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 6f 6e   The value is on
8cb0: 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20  e of:  0 NONE 1 
8cc0: 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54  FULL 2 INCREMENT
8cd0: 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  AL.  */.#ifndef 
8ce0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
8cf0: 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72  VACUUM.  case Pr
8d00: 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55 55  agTyp_AUTO_VACUU
8d10: 4d 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  M: {.    Btree *
8d20: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
8d30: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
8d40: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  =0 );.    if( !z
8d50: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
8d60: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
8d70: 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63  Parse, "auto_vac
8d80: 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42 74 72  uum", sqlite3Btr
8d90: 65 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d 28  eeGetAutoVacuum(
8da0: 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65  pBt));.    }else
8db0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75 74  {.      int eAut
8dc0: 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75 75  o = getAutoVacuu
8dd0: 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  m(zRight);.     
8de0: 20 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e 3d   assert( eAuto>=
8df0: 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b  0 && eAuto<=2 );
8e00: 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 41  .      db->nextA
8e10: 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41 75  utovac = (u8)eAu
8e20: 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61 6c  to;.      /* Cal
8e30: 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28  l SetAutoVacuum(
8e40: 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61 6c  ) to set initial
8e50: 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ize the internal
8e60: 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20 20   auto and.      
8e70: 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66  ** incr-vacuum f
8e80: 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20 72 65  lags. This is re
8e90: 71 75 69 72 65 64 20 69 6e 20 63 61 73 65 20 74  quired in case t
8ea0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20  his connection. 
8eb0: 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73 20       ** creates 
8ec0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
8ed0: 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  e. It is importa
8ee0: 6e 74 20 74 68 61 74 20 69 74 20 69 73 20 63 72  nt that it is cr
8ef0: 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  eated.      ** a
8f00: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
8f10: 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20 20 20   capable db..   
8f20: 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d     */.      rc =
8f30: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
8f40: 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c 20  AutoVacuum(pBt, 
8f50: 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 69 66  eAuto);.      if
8f60: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
8f70: 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c 20  && (eAuto==1 || 
8f80: 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20 20  eAuto==2) ){.   
8f90: 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73 65 74       /* When set
8fa0: 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f 76 61  ting the auto_va
8fb0: 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69 74  cuum mode to eit
8fc0: 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a 20  her "full" or . 
8fd0: 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72 65         ** "incre
8fe0: 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20 74  mental", write t
8ff0: 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74 61  he value of meta
9000: 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61 62  [6] in the datab
9010: 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66  ase.        ** f
9020: 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74  ile. Before writ
9030: 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20  ing to meta[6], 
9040: 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b  check that meta[
9050: 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20  3] indicates.   
9060: 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 69       ** that thi
9070: 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20 61  s really is an a
9080: 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62  uto-vacuum capab
9090: 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  le database..   
90a0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
90b0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
90c0: 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53   iLn = VDBE_OFFS
90d0: 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20  ET_LINENO(2);.  
90e0: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
90f0: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65  st VdbeOpList se
9100: 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20 20  tMeta6[] = {.   
9110: 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e         { OP_Tran
9120: 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20  saction,    0,  
9130: 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20         1,       
9140: 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20            0},   
9150: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
9160: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
9170: 69 65 2c 20 20 20 20 20 30 2c 20 20 20 20 20 20  ie,     0,      
9180: 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 42 54     1,         BT
9190: 52 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f 4f 54  REE_LARGEST_ROOT
91a0: 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20 20 20 20  _PAGE},.        
91b0: 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20    { OP_If,      
91c0: 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20         1,       
91d0: 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20    0,            
91e0: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32       0},    /* 2
91f0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
9200: 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20  OP_Halt,        
9210: 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 4f 45     SQLITE_OK, OE
9220: 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20 20 20  _Abort,         
9230: 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a   0},    /* 3 */.
9240: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49            { OP_I
9250: 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20 20 30  nteger,        0
9260: 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20  ,         1,    
9270: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c               0},
9280: 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20      /* 4 */.    
9290: 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f        { OP_SetCo
92a0: 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 20  okie,      0,   
92b0: 20 20 20 20 20 20 42 54 52 45 45 5f 49 4e 43 52        BTREE_INCR
92c0: 5f 56 41 43 55 55 4d 2c 20 31 7d 2c 20 20 20 20  _VACUUM, 1},    
92d0: 2f 2a 20 35 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 5 */.        
92e0: 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  };.        int i
92f0: 41 64 64 72 3b 0a 20 20 20 20 20 20 20 20 69 41  Addr;.        iA
9300: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
9310: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
9320: 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36  raySize(setMeta6
9330: 29 2c 20 73 65 74 4d 65 74 61 36 2c 20 69 4c 6e  ), setMeta6, iLn
9340: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
9350: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
9360: 2c 20 69 41 64 64 72 2c 20 69 44 62 29 3b 0a 20  , iAddr, iDb);. 
9370: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9380: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
9390: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
93a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
93b0: 43 68 61 6e 67 65 50 32 28 76 2c 20 69 41 64 64  ChangeP2(v, iAdd
93c0: 72 2b 32 2c 20 69 41 64 64 72 2b 34 29 3b 0a 20  r+2, iAddr+4);. 
93d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
93e0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
93f0: 64 64 72 2b 34 2c 20 65 41 75 74 6f 2d 31 29 3b  ddr+4, eAuto-1);
9400: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9410: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
9420: 69 41 64 64 72 2b 35 2c 20 69 44 62 29 3b 0a 20  iAddr+5, iDb);. 
9430: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9440: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
9450: 44 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  Db);.      }.   
9460: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
9470: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20  }.#endif..  /*. 
9480: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
9490: 61 62 61 73 65 2e 5d 69 6e 63 72 65 6d 65 6e 74  abase.]increment
94a0: 61 6c 5f 76 61 63 75 75 6d 28 4e 29 0a 20 20 2a  al_vacuum(N).  *
94b0: 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20 73 74 65 70  *.  ** Do N step
94c0: 73 20 6f 66 20 69 6e 63 72 65 6d 65 6e 74 61 6c  s of incremental
94d0: 20 76 61 63 75 75 6d 69 6e 67 20 6f 6e 20 61 20   vacuuming on a 
94e0: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 23  database..  */.#
94f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9500: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
9510: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 43  case PragTyp_INC
9520: 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d 3a  REMENTAL_VACUUM:
9530: 20 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69 6d 69   {.    int iLimi
9540: 74 2c 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28  t, addr;.    if(
9550: 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21 73   zRight==0 || !s
9560: 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a  qlite3GetInt32(z
9570: 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 20  Right, &iLimit) 
9580: 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a  || iLimit<=0 ){.
9590: 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 30        iLimit = 0
95a0: 78 37 66 66 66 66 66 66 66 3b 0a 20 20 20 20 7d  x7fffffff;.    }
95b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69  .    sqlite3Begi
95c0: 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
95d0: 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b  pParse, 0, iDb);
95e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
95f0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
9600: 65 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20 31 29  eger, iLimit, 1)
9610: 3b 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c  ;.    addr = sql
9620: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
9630: 2c 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 2c  , OP_IncrVacuum,
9640: 20 69 44 62 29 3b 20 56 64 62 65 43 6f 76 65 72   iDb); VdbeCover
9650: 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69  age(v);.    sqli
9660: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
9670: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
9680: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9690: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
96a0: 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20  ddImm, 1, -1);. 
96b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
96c0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp2(v, OP_IfPos
96d0: 2c 20 31 2c 20 61 64 64 72 29 3b 20 56 64 62 65  , 1, addr); Vdbe
96e0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
96f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
9700: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
9710: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
9720: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
9730: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
9740: 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a  PRAGMAS.  /*.  *
9750: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
9760: 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 0a  ase.]cache_size.
9770: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
9780: 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69  tabase.]cache_si
9790: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
97a0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
97b0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
97c0: 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20  t local setting 
97d0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67  for the.  ** pag
97e0: 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68  e cache size. Th
97f0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
9800: 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a  ts the local.  *
9810: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
9820: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69  e value.  If N i
9830: 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20  s positive then 
9840: 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a  that is the.  **
9850: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
9860: 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20   in the cache.  
9870: 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  If N is negative
9880: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
9890: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
98a0: 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74  is adjusted so t
98b0: 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75 73  hat the cache us
98c0: 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a  es -N kibibytes.
98d0: 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a    ** of memory..
98e0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
98f0: 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20  Typ_CACHE_SIZE: 
9900: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  {.    assert( sq
9910: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
9920: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
9930: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
9940: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
9950: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
9960: 72 73 65 2c 20 22 63 61 63 68 65 5f 73 69 7a 65  rse, "cache_size
9970: 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  ", pDb->pSchema-
9980: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
9990: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
99a0: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
99b0: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20  3Atoi(zRight);. 
99c0: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
99d0: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
99e0: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
99f0: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
9a00: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
9a10: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
9a20: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
9a30: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
9a40: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
9a50: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 6d 61  A [database.]mma
9a60: 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20  p_size(N).  **. 
9a70: 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20   ** Used to set 
9a80: 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d  mapping size lim
9a90: 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20  it. The mapping 
9aa0: 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20  size limit is.  
9ab0: 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74  ** used to limit
9ac0: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
9ad0: 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72  ize of all memor
9ae0: 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73  y mapped regions
9af0: 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74   of the.  ** dat
9b00: 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74  abase file. If t
9b10: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 69 73  his parameter is
9b20: 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68   set to zero, th
9b30: 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e  en memory mappin
9b40: 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73  g.  ** is not us
9b50: 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e  ed at all.  If N
9b60: 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68   is negative, th
9b70: 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d  en the default m
9b80: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c  emory map.  ** l
9b90: 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20  imit determined 
9ba0: 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  by sqlite3_confi
9bb0: 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  g(SQLITE_CONFIG_
9bc0: 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65  MMAP_SIZE) is se
9bd0: 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61  t..  ** The para
9be0: 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75  meter N is measu
9bf0: 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20  red in bytes..  
9c00: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c  **.  ** This val
9c10: 75 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20  ue is advisory. 
9c20: 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   The underlying 
9c30: 56 46 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d  VFS is free to m
9c40: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61  emory map.  ** a
9c50: 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d  s little or as m
9c60: 75 63 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e  uch as it wants.
9c70: 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69    Except, if N i
9c80: 73 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20  s set to 0 then 
9c90: 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c  the.  ** upper l
9ca0: 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72  ayers will never
9cb0: 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74   invoke the xFet
9cc0: 63 68 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f  ch interfaces to
9cd0: 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20   the VFS..  */. 
9ce0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d   case PragTyp_MM
9cf0: 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73  AP_SIZE: {.    s
9d00: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b  qlite3_int64 sz;
9d10: 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
9d20: 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20  MMAP_SIZE>0.    
9d30: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
9d40: 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
9d50: 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
9d60: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
9d70: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
9d80: 20 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72      sqlite3DecOr
9d90: 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c  HexToI64(zRight,
9da0: 20 26 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28   &sz);.      if(
9db0: 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c   sz<0 ) sz = sql
9dc0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
9dd0: 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69  .szMmap;.      i
9de0: 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20  f( pId2->n==0 ) 
9df0: 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b  db->szMmap = sz;
9e00: 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62  .      for(ii=db
9e10: 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20  ->nDb-1; ii>=0; 
9e20: 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69  ii--){.        i
9e30: 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  f( db->aDb[ii].p
9e40: 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c  Bt && (ii==iDb |
9e50: 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b  | pId2->n==0) ){
9e60: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
9e70: 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69  e3BtreeSetMmapLi
9e80: 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  mit(db->aDb[ii].
9e90: 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20  pBt, sz);.      
9ea0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
9eb0: 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20  }.    sz = -1;. 
9ec0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
9ed0: 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
9ee0: 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e   zDb, SQLITE_FCN
9ef0: 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73  TL_MMAP_SIZE, &s
9f00: 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a  z);.#else.    sz
9f10: 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 0;.    rc = S
9f20: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66  QLITE_OK;.#endif
9f30: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
9f40: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
9f50: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
9f60: 70 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f 73 69  pParse, "mmap_si
9f70: 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65  ze", sz);.    }e
9f80: 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49  lse if( rc!=SQLI
9f90: 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20  TE_NOTFOUND ){. 
9fa0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72       pParse->nEr
9fb0: 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61 72 73  r++;.      pPars
9fc0: 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20  e->rc = rc;.    
9fd0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
9fe0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
9ff0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a  AGMA temp_store.
a000: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65    **   PRAGMA te
a010: 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61  mp_store = "defa
a020: 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66  ult"|"memory"|"f
a030: 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ile".  **.  ** R
a040: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
a050: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
a060: 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66  the temp_store f
a070: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
a080: 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61   ** the local va
a090: 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b  lue does not mak
a0a0: 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
a0b0: 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74   disk file and t
a0c0: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20  he default.  ** 
a0d0: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65  value will be re
a0e0: 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20  stored the next 
a0f0: 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73  time the databas
a100: 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a  e is opened..  *
a110: 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74  *.  ** Note that
a120: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
a130: 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72 79 20  for the library 
a140: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
a150: 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65  ions to.  ** ove
a160: 72 72 69 64 65 20 74 68 69 73 20 73 65 74 74 69  rride this setti
a170: 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  ng.  */.  case P
a180: 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52  ragTyp_TEMP_STOR
a190: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  E: {.    if( !zR
a1a0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
a1b0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
a1c0: 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74 6f 72  arse, "temp_stor
a1d0: 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  e", db->temp_sto
a1e0: 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  re);.    }else{.
a1f0: 20 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70        changeTemp
a200: 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20  Storage(pParse, 
a210: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20  zRight);.    }. 
a220: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
a230: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
a240: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
a250: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
a260: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
a270: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
a280: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
a290: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
a2a0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
a2b0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74  l value of the t
a2c0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
a2d0: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
a2e0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
a2f0: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
a300: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
a310: 62 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  be used for temp
a320: 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a  orary files..  *
a330: 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e  * Setting to a n
a340: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
a350: 74 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  ts to the defaul
a360: 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  t temporary dire
a370: 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20  ctory search..  
a380: 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20  ** If temporary 
a390: 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61  directory is cha
a3a0: 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c  nged, then inval
a3b0: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
a3c0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
a3d0: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
a3e0: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a  STORE_DIRECTORY:
a3f0: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
a400: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
a410: 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
a420: 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20  ectory ){.      
a430: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a440: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
a450: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a460: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
a470: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
a480: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 74   .            "t
a490: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
a4a0: 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ory", SQLITE_STA
a4b0: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
a4c0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
a4d0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
a4e0: 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f  , 1, 0, sqlite3_
a4f0: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20  temp_directory, 
a500: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
a510: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
a520: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
a530: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
a540: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66    }else{.#ifndef
a550: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
a560: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
a570: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
a580: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20  int res;.       
a590: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
a5a0: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
a5b0: 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41  zRight, SQLITE_A
a5c0: 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c  CCESS_READWRITE,
a5d0: 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
a5e0: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
a5f0: 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K || res==0 ){. 
a600: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a610: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
a620: 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65   "not a writable
a630: 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20   directory");.  
a640: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
a650: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  gma_out;.       
a660: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
a670: 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45 4d 50   if( SQLITE_TEMP
a680: 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20  _STORE==0.      
a690: 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50   || (SQLITE_TEMP
a6a0: 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d  _STORE==1 && db-
a6b0: 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a  >temp_store<=1).
a6c0: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
a6d0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20  E_TEMP_STORE==2 
a6e0: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
a6f0: 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a 20  e==1).      ){. 
a700: 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 61 74         invalidat
a710: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
a720: 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rse);.      }.  
a730: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
a740: 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69  (sqlite3_temp_di
a750: 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20  rectory);.      
a760: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
a770: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a780: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
a790: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
a7a0: 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b  f("%s", zRight);
a7b0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
a7c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65        sqlite3_te
a7d0: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30  mp_directory = 0
a7e0: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
a7f0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
a800: 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  WSD */.    }.   
a810: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
a820: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20   SQLITE_OS_WIN. 
a830: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
a840: 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  A data_store_dir
a850: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
a860: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
a870: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
a880: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
a890: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
a8a0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
a8b0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  l value of the d
a8c0: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
a8d0: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
a8e0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
a8f0: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
a900: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
a910: 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61  be used for data
a920: 62 61 73 65 20 66 69 6c 65 73 20 74 68 61 74 0a  base files that.
a930: 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63 69 66    ** were specif
a940: 69 65 64 20 77 69 74 68 20 61 20 72 65 6c 61 74  ied with a relat
a950: 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20 20 53  ive pathname.  S
a960: 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c  etting to a null
a970: 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 0a   string reverts.
a980: 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65 66 61    ** to the defa
a990: 75 6c 74 20 64 61 74 61 62 61 73 65 20 64 69 72  ult database dir
a9a0: 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20 66 6f  ectory, which fo
a9b0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
a9c0: 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 0a   specified with.
a9d0: 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76 65 20    ** a relative 
a9e0: 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62 61 62  path will probab
a9f0: 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74  ly be based on t
aa00: 68 65 20 63 75 72 72 65 6e 74 20 64 69 72 65 63  he current direc
aa10: 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20 20 2a  tory for the.  *
aa20: 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61 74 61  * process.  Data
aa30: 62 61 73 65 20 66 69 6c 65 20 73 70 65 63 69 66  base file specif
aa40: 69 65 64 20 77 69 74 68 20 61 6e 20 61 62 73 6f  ied with an abso
aa50: 6c 75 74 65 20 70 61 74 68 20 61 72 65 20 6e 6f  lute path are no
aa60: 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a 20  t impacted.  ** 
aa70: 62 79 20 74 68 69 73 20 73 65 74 74 69 6e 67 2c  by this setting,
aa80: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 69   regardless of i
aa90: 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20  ts value..  **. 
aaa0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
aab0: 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44 49  yp_DATA_STORE_DI
aac0: 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69  RECTORY: {.    i
aad0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
aae0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
aaf0: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 29  data_directory )
ab00: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
ab10: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
ab20: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  v, 1);.        s
ab30: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
ab40: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
ab50: 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20  ME_NAME, .      
ab60: 20 20 20 20 20 20 22 64 61 74 61 5f 73 74 6f 72        "data_stor
ab70: 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51  e_directory", SQ
ab80: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
ab90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
aba0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
abb0: 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20  ring8, 0, 1, 0, 
abc0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
abd0: 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20  ectory, 0);.    
abe0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
abf0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
ac00: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
ac10: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
ac20: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
ac30: 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69  OMIT_WSD.      i
ac40: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
ac50: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b          int res;
ac60: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
ac70: 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62  lite3OsAccess(db
ac80: 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20  ->pVfs, zRight, 
ac90: 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45  SQLITE_ACCESS_RE
aca0: 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a  ADWRITE, &res);.
acb0: 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
acc0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
acd0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
ace0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
acf0: 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20  (pParse, "not a 
ad00: 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f  writable directo
ad10: 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ry");.          
ad20: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
ad30: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
ad40: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
ad50: 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61  _free(sqlite3_da
ad60: 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20  ta_directory);. 
ad70: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
ad80: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0] ){.        sq
ad90: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
ada0: 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  tory = sqlite3_m
adb0: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69  printf("%s", zRi
adc0: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ght);.      }els
add0: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
ade0: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
adf0: 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23  y = 0;.      }.#
ae00: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ae10: 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20  OMIT_WSD */.    
ae20: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
ae30: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
ae40: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
ae50: 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20  NG_STYLE.  /*.  
ae60: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
ae70: 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78  abase.]lock_prox
ae80: 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52  y_file.  **   PR
ae90: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
aea0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20  lock_proxy_file 
aeb0: 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b  = ":auto:"|"lock
aec0: 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a 2a  _file_path".  **
aed0: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
aee0: 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  set the value of
aef0: 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f   the lock_proxy_
af00: 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  file flag.  Chan
af10: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61  ging.  ** the va
af20: 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69  lue sets a speci
af30: 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20 75  fic file to be u
af40: 73 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65  sed for database
af50: 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a 20   access locks.. 
af60: 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   **.  */.  case 
af70: 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f  PragTyp_LOCK_PRO
af80: 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20 69  XY_FILE: {.    i
af90: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
afa0: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
afb0: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
afc0: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
afd0: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f  .      char *pro
afe0: 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e  xy_file_path = N
aff0: 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ULL;.      sqlit
b000: 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d  e3_file *pFile =
b010: 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
b020: 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  e(pPager);.     
b030: 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f   sqlite3OsFileCo
b040: 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c  ntrolHint(pFile,
b050: 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b   SQLITE_GET_LOCK
b060: 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20  PROXYFILE, .    
b070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b080: 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66 69         &proxy_fi
b090: 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20 20  le_path);.      
b0a0: 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f 78 79  .      if( proxy
b0b0: 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a 20 20  _file_path ){.  
b0c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b0d0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
b0e0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b0f0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
b100: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
b110: 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  AME, .          
b120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b130: 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f      "lock_proxy_
b140: 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  file", SQLITE_ST
b150: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
b160: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
b170: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
b180: 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79 5f 66  0, 1, 0, proxy_f
b190: 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a 20 20  ile_path, 0);.  
b1a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b1b0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
b1c0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
b1d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
b1e0: 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a  e{.      Pager *
b1f0: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
b200: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
b210: 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  pBt);.      sqli
b220: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
b230: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
b240: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
b250: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
b260: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
b270: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
b280: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
b290: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
b2a0: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
b2b0: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
b2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2d0: 20 20 20 20 20 20 20 20 20 20 7a 52 69 67 68 74            zRight
b2e0: 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  );.      } else 
b2f0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
b300: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
b310: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
b320: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
b330: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b350: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 29 3b            NULL);
b360: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
b370: 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f  f( res!=SQLITE_O
b380: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  K ){.        sql
b390: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
b3a0: 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  rse, "failed to 
b3b0: 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66  set lock proxy f
b3c0: 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67  ile");.        g
b3d0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
b3e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
b3f0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
b400: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e  dif /* SQLITE_EN
b410: 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59  ABLE_LOCKING_STY
b420: 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20 20 20  LE */      .    
b430: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
b440: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
b450: 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20  ynchronous.  ** 
b460: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
b470: 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  se.]synchronous=
b480: 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55  OFF|ON|NORMAL|FU
b490: 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  LL.  **.  ** Ret
b4a0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
b4b0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
b4c0: 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c  e synchronous fl
b4d0: 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20  ag.  Changing.  
b4e0: 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  ** the local val
b4f0: 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65  ue does not make
b500: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
b510: 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68  disk file and th
b520: 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76  e.  ** default v
b530: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73  alue will be res
b540: 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74  tored the next t
b550: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
b560: 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e   is.  ** opened.
b570: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
b580: 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  gTyp_SYNCHRONOUS
b590: 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  : {.    if( !zRi
b5a0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
b5b0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
b5c0: 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75  rse, "synchronou
b5d0: 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f  s", pDb->safety_
b5e0: 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65  level-1);.    }e
b5f0: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21  lse{.      if( !
b600: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
b610: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
b620: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
b630: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
b640: 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79  Safety level may
b650: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
b660: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
b670: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65  tion");.      }e
b680: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 62  lse{.        pDb
b690: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ->safety_level =
b6a0: 20 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28   getSafetyLevel(
b6b0: 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31 3b 0a 20  zRight,0,1)+1;. 
b6c0: 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67         setAllPag
b6d0: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
b6e0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
b6f0: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
b700: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
b710: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
b720: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b730: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
b740: 41 53 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  AS.  case PragTy
b750: 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66  p_FLAG: {.    if
b760: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
b770: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
b780: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 61 50 72  eInt(pParse, aPr
b790: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a  agmaNames[mid].z
b7a0: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
b7b0: 20 20 20 20 20 20 20 20 20 20 20 28 64 62 2d 3e             (db->
b7c0: 66 6c 61 67 73 20 26 20 61 50 72 61 67 6d 61 4e  flags & aPragmaN
b7d0: 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 29 21  ames[mid].iArg)!
b7e0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
b7f0: 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20  .      int mask 
b800: 3d 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  = aPragmaNames[m
b810: 69 64 5d 2e 69 41 72 67 3b 20 20 20 20 2f 2a 20  id].iArg;    /* 
b820: 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74 6f 20  Mask of bits to 
b830: 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f  set or clear. */
b840: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
b850: 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a  utoCommit==0 ){.
b860: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65 69          /* Forei
b870: 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20 6d  gn key support m
b880: 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65  ay not be enable
b890: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77 68  d or disabled wh
b8a0: 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20 20  ile not.        
b8b0: 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69  ** in auto-commi
b8c0: 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20  t mode.  */.    
b8d0: 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51      mask &= ~(SQ
b8e0: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
b8f0: 29 3b 0a 20 20 20 20 20 20 7d 0a 23 69 66 20 53  );.      }.#if S
b900: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
b910: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 20 20 20 20  NTICATION.      
b920: 69 66 28 20 64 62 2d 3e 61 75 74 68 2e 61 75 74  if( db->auth.aut
b930: 68 4c 65 76 65 6c 3d 3d 55 41 55 54 48 5f 55 73  hLevel==UAUTH_Us
b940: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  er ){.        /*
b950: 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f   Do not allow no
b960: 6e 2d 61 64 6d 69 6e 20 75 73 65 72 73 20 74 6f  n-admin users to
b970: 20 6d 6f 64 69 66 79 20 74 68 65 20 73 63 68 65   modify the sche
b980: 6d 61 20 61 72 62 69 74 72 61 72 69 6c 79 20 2a  ma arbitrarily *
b990: 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26  /.        mask &
b9a0: 3d 20 7e 28 53 51 4c 49 54 45 5f 57 72 69 74 65  = ~(SQLITE_Write
b9b0: 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 7d  Schema);.      }
b9c0: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 69  .#endif..      i
b9d0: 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  f( sqlite3GetBoo
b9e0: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20  lean(zRight, 0) 
b9f0: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66  ){.        db->f
ba00: 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20  lags |= mask;.  
ba10: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
ba20: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
ba30: 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 69  ~mask;.        i
ba40: 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49 54 45 5f  f( mask==SQLITE_
ba50: 44 65 66 65 72 46 4b 73 20 29 20 64 62 2d 3e 6e  DeferFKs ) db->n
ba60: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
ba70: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  = 0;.      }..  
ba80: 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f 66 20 74      /* Many of t
ba90: 68 65 20 66 6c 61 67 2d 70 72 61 67 6d 61 73 20  he flag-pragmas 
baa0: 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 64 65 20  modify the code 
bab0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
bac0: 20 53 51 4c 20 0a 20 20 20 20 20 20 2a 2a 20 63   SQL .      ** c
bad0: 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20 63 6f 75  ompiler (eg. cou
bae0: 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f 20  nt_changes). So 
baf0: 61 64 64 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f  add an opcode to
bb00: 20 65 78 70 69 72 65 20 61 6c 6c 0a 20 20 20 20   expire all.    
bb10: 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 53 51    ** compiled SQ
bb20: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61 66 74  L statements aft
bb30: 65 72 20 6d 6f 64 69 66 79 69 6e 67 20 61 20 70  er modifying a p
bb40: 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20 20 20  ragma value..   
bb50: 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
bb60: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bb70: 20 4f 50 5f 45 78 70 69 72 65 2c 20 30 2c 20 30   OP_Expire, 0, 0
bb80: 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50  );.      setAllP
bb90: 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20  agerFlags(db);. 
bba0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
bbb0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
bbc0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
bbd0: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
bbe0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
bbf0: 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20  CHEMA_PRAGMAS.  
bc00: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
bc10: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62   table_info(<tab
bc20: 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  le>).  **.  ** R
bc30: 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72  eturn a single r
bc40: 6f 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ow for each colu
bc50: 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20  mn of the named 
bc60: 74 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d  table. The colum
bc70: 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72  ns of.  ** the r
bc80: 65 74 75 72 6e 65 64 20 64 61 74 61 20 73 65 74  eturned data set
bc90: 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20   are:.  **.  ** 
bca0: 63 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75  cid:        Colu
bcb0: 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20  mn id (numbered 
bcc0: 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
bcd0: 68 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20  ht, starting at 
bce0: 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20  0).  ** name:   
bcf0: 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a      Column name.
bd00: 20 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20    ** type:      
bd10: 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74   Column declarat
bd20: 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e  ion type..  ** n
bd30: 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20  otnull:    True 
bd40: 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73  if 'NOT NULL' is
bd50: 20 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20   part of column 
bd60: 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a  declaration.  **
bd70: 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65   dflt_value: The
bd80: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
bd90: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69  or the column, i
bda0: 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61  f any..  */.  ca
bdb0: 73 65 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45  se PragTyp_TABLE
bdc0: 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68  _INFO: if( zRigh
bdd0: 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a  t ){.    Table *
bde0: 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d  pTab;.    pTab =
bdf0: 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
be00: 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e(db, zRight, zD
be10: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  b);.    if( pTab
be20: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c   ){.      int i,
be30: 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48   k;.      int nH
be40: 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20  idden = 0;.     
be50: 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20   Column *pCol;. 
be60: 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 20       Index *pPk 
be70: 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79  = sqlite3Primary
be80: 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a  KeyIndex(pTab);.
be90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bea0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36  eSetNumCols(v, 6
beb0: 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  );.      pParse-
bec0: 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20  >nMem = 6;.     
bed0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
bee0: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
bef0: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
bf00: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
bf10: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
bf20: 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20 53 51  _NAME, "cid", SQ
bf30: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
bf40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
bf50: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
bf60: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
bf70: 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ame", SQLITE_STA
bf80: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
bf90: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
bfa0: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
bfb0: 4e 41 4d 45 2c 20 22 74 79 70 65 22 2c 20 53 51  NAME, "type", SQ
bfc0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
bfd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
bfe0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20  etColName(v, 3, 
bff0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
c000: 6f 74 6e 75 6c 6c 22 2c 20 53 51 4c 49 54 45 5f  otnull", SQLITE_
c010: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
c020: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
c030: 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41  Name(v, 4, COLNA
c040: 4d 45 5f 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76  ME_NAME, "dflt_v
c050: 61 6c 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  alue", SQLITE_ST
c060: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
c070: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c080: 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45  me(v, 5, COLNAME
c090: 5f 4e 41 4d 45 2c 20 22 70 6b 22 2c 20 53 51 4c  _NAME, "pk", SQL
c0a0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c0b0: 20 20 20 73 71 6c 69 74 65 33 56 69 65 77 47 65     sqlite3ViewGe
c0c0: 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61  tColumnNames(pPa
c0d0: 72 73 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20  rse, pTab);.    
c0e0: 20 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d    for(i=0, pCol=
c0f0: 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54  pTab->aCol; i<pT
c100: 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70  ab->nCol; i++, p
c110: 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  Col++){.        
c120: 69 66 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  if( IsHiddenColu
c130: 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20  mn(pCol) ){.    
c140: 20 20 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b        nHidden++;
c150: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69  .          conti
c160: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  nue;.        }. 
c170: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c180: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
c190: 6e 74 65 67 65 72 2c 20 69 2d 6e 48 69 64 64 65  nteger, i-nHidde
c1a0: 6e 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  n, 1);.        s
c1b0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
c1c0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
c1d0: 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a  0, 2, 0, pCol->z
c1e0: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
c1f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c200: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
c210: 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20  8, 0, 3, 0,.    
c220: 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79         pCol->zTy
c230: 70 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65  pe ? pCol->zType
c240: 20 3a 20 22 22 2c 20 30 29 3b 0a 20 20 20 20 20   : "", 0);.     
c250: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c260: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c270: 65 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75  er, (pCol->notNu
c280: 6c 6c 20 3f 20 31 20 3a 20 30 29 2c 20 34 29 3b  ll ? 1 : 0), 4);
c290: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 43 6f  .        if( pCo
c2a0: 6c 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20 20 20 20  l->zDflt ){.    
c2b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c2c0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
c2d0: 72 69 6e 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20  ring8, 0, 5, 0, 
c2e0: 28 63 68 61 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66  (char*)pCol->zDf
c2f0: 6c 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  lt, 0);.        
c300: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
c310: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c320: 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30  p2(v, OP_Null, 0
c330: 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 5);.        }.
c340: 20 20 20 20 20 20 20 20 69 66 28 20 28 70 43 6f          if( (pCo
c350: 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  l->colFlags & CO
c360: 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d  LFLAG_PRIMKEY)==
c370: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  0 ){.          k
c380: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 0;.        }e
c390: 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29  lse if( pPk==0 )
c3a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
c3b0: 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
c3c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
c3d0: 6b 3d 31 3b 20 41 4c 57 41 59 53 28 6b 3c 3d 70  k=1; ALWAYS(k<=p
c3e0: 54 61 62 2d 3e 6e 43 6f 6c 29 20 26 26 20 70 50  Tab->nCol) && pP
c3f0: 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d  k->aiColumn[k-1]
c400: 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20  !=i; k++){}.    
c410: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
c420: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c430: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6b  v, OP_Integer, k
c440: 2c 20 36 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 6);.        sq
c450: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c460: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
c470: 20 31 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 6);.      }.
c480: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
c490: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
c4a0: 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20  yp_STATS: {.    
c4b0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
c4c0: 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20   HashElem *i;.  
c4d0: 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74    v = sqlite3Get
c4e0: 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20  Vdbe(pParse);.  
c4f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c500: 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20  NumCols(v, 4);. 
c510: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
c520: 3d 20 34 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 4;.    sqlite3
c530: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
c540: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
c550: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c560: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
c570: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61  OLNAME_NAME, "ta
c580: 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ble", SQLITE_STA
c590: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
c5a0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
c5b0: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
c5c0: 4d 45 2c 20 22 69 6e 64 65 78 22 2c 20 53 51 4c  ME, "index", SQL
c5d0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c5e0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
c5f0: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
c600: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 77 69 64 74  NAME_NAME, "widt
c610: 68 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  h", SQLITE_STATI
c620: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
c630: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
c640: 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   3, COLNAME_NAME
c650: 2c 20 22 68 65 69 67 68 74 22 2c 20 53 51 4c 49  , "height", SQLI
c660: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
c670: 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68  for(i=sqliteHash
c680: 46 69 72 73 74 28 26 70 44 62 2d 3e 70 53 63 68  First(&pDb->pSch
c690: 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69  ema->tblHash); i
c6a0: 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; i=sqliteHashNe
c6b0: 78 74 28 69 29 29 7b 0a 20 20 20 20 20 20 54 61  xt(i)){.      Ta
c6c0: 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69  ble *pTab = sqli
c6d0: 74 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20  teHashData(i);. 
c6e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c6f0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
c700: 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70  ing8, 0, 1, 0, p
c710: 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  Tab->zName, 0);.
c720: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c730: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75  eAddOp2(v, OP_Nu
c740: 6c 6c 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20 20  ll, 0, 2);.     
c750: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c760: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
c770: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
c790: 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  t)sqlite3LogEstT
c7a0: 6f 49 6e 74 28 70 54 61 62 2d 3e 73 7a 54 61 62  oInt(pTab->szTab
c7b0: 52 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20 20 20  Row), 3);.      
c7c0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c7d0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c7e0: 20 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 74   .          (int
c7f0: 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f  )sqlite3LogEstTo
c800: 49 6e 74 28 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f  Int(pTab->nRowLo
c810: 67 45 73 74 29 2c 20 34 29 3b 0a 20 20 20 20 20  gEst), 4);.     
c820: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c830: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
c840: 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20  ow, 1, 4);.     
c850: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
c860: 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
c870: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b  dx=pIdx->pNext){
c880: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
c890: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
c8a0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
c8b0: 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20  0, pIdx->zName, 
c8c0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
c8d0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c8e0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20   OP_Integer,.   
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c900: 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73            (int)s
c910: 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
c920: 74 28 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77  t(pIdx->szIdxRow
c930: 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73  ), 3);.        s
c940: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c950: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e  .            (in
c970: 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  t)sqlite3LogEstT
c980: 6f 49 6e 74 28 70 49 64 78 2d 3e 61 69 52 6f 77  oInt(pIdx->aiRow
c990: 4c 6f 67 45 73 74 5b 30 5d 29 2c 20 34 29 3b 0a  LogEst[0]), 4);.
c9a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c9b0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c9c0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29  ResultRow, 1, 4)
c9d0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
c9e0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
c9f0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44  case PragTyp_IND
ca00: 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69  EX_INFO: if( zRi
ca10: 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78  ght ){.    Index
ca20: 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c   *pIdx;.    Tabl
ca30: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64  e *pTab;.    pId
ca40: 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  x = sqlite3FindI
ca50: 6e 64 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c  ndex(db, zRight,
ca60: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
ca70: 49 64 78 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  Idx ){.      int
ca80: 20 69 3b 0a 20 20 20 20 20 20 70 54 61 62 20 3d   i;.      pTab =
ca90: 20 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20   pIdx->pTable;. 
caa0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cab0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29  SetNumCols(v, 3)
cac0: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
cad0: 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20  nMem = 3;.      
cae0: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
caf0: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
cb00: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
cb10: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
cb20: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
cb30: 4e 41 4d 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53  NAME, "seqno", S
cb40: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
cb50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cb60: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
cb70: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
cb80: 63 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  cid", SQLITE_STA
cb90: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
cba0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
cbb0: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
cbc0: 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51  NAME, "name", SQ
cbd0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
cbe0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
cbf0: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 69 2b  Idx->nKeyCol; i+
cc00: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 31 36 20  +){.        i16 
cc10: 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43  cnum = pIdx->aiC
cc20: 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20  olumn[i];.      
cc30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cc40: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
cc50: 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20  r, i, 1);.      
cc60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cc70: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
cc80: 72 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20  r, cnum, 2);.   
cc90: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
cca0: 62 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a  b->nCol>cnum );.
ccb0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ccc0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
ccd0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
cce0: 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75  , pTab->aCol[cnu
ccf0: 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  m].zName, 0);.  
cd00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cd10: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
cd20: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a  sultRow, 1, 3);.
cd30: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
cd40: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
cd50: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58  se PragTyp_INDEX
cd60: 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68  _LIST: if( zRigh
cd70: 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  t ){.    Index *
cd80: 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20  pIdx;.    Table 
cd90: 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e 74 20 69  *pTab;.    int i
cda0: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
cdb0: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
cdc0: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
cdd0: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
cde0: 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
cdf0: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
ce00: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
ce10: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
ce20: 20 33 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73   3);.      pPars
ce30: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
ce40: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
ce50: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
ce60: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  e, iDb);.      s
ce70: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
ce80: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
ce90: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20  ME_NAME, "seq", 
cea0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
ceb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cec0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
ced0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
cee0: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
cef0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
cf00: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
cf10: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
cf20: 45 5f 4e 41 4d 45 2c 20 22 75 6e 69 71 75 65 22  E_NAME, "unique"
cf30: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
cf40: 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78  ;.      for(pIdx
cf50: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69  =pTab->pIndex, i
cf60: 3d 30 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  =0; pIdx; pIdx=p
cf70: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29  Idx->pNext, i++)
cf80: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
cf90: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cfa0: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29  P_Integer, i, 1)
cfb0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
cfc0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
cfd0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
cfe0: 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c   0, pIdx->zName,
cff0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
d000: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d010: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 49 73  , OP_Integer, Is
d020: 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78  UniqueIndex(pIdx
d030: 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73  ), 3);.        s
d040: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d050: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
d060: 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 7d  , 1, 3);.      }
d070: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
d080: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
d090: 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53  Typ_DATABASE_LIS
d0a0: 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  T: {.    int i;.
d0b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d0c0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b  etNumCols(v, 3);
d0d0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
d0e0: 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74  m = 3;.    sqlit
d0f0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d100: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
d110: 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49  AME, "seq", SQLI
d120: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d130: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d140: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
d150: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
d160: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d170: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
d180: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
d190: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
d1a0: 22 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53  "file", SQLITE_S
d1b0: 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
d1c0: 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
d1d0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
d1e0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d  db->aDb[i].pBt==
d1f0: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
d200: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
d210: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20  aDb[i].zName!=0 
d220: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d230: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d240: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
d250: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
d260: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
d270: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
d280: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
d290: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
d2a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
d2b0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
d2c0: 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   3, 0,.         
d2d0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
d2e0: 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44  tFilename(db->aD
d2f0: 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20  b[i].pBt), 0);. 
d300: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d310: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
d320: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
d330: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
d340: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
d350: 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54  p_COLLATION_LIST
d360: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20  : {.    int i = 
d370: 30 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20  0;.    HashElem 
d380: 2a 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  *p;.    sqlite3V
d390: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
d3a0: 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   2);.    pParse-
d3b0: 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73  >nMem = 2;.    s
d3c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
d3d0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
d3e0: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20  ME_NAME, "seq", 
d3f0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
d400: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d410: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
d420: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
d430: 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ame", SQLITE_STA
d440: 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d  TIC);.    for(p=
d450: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
d460: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20  &db->aCollSeq); 
d470: 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e  p; p=sqliteHashN
d480: 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43  ext(p)){.      C
d490: 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20  ollSeq *pColl = 
d4a0: 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74  (CollSeq *)sqlit
d4b0: 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20  eHashData(p);.  
d4c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d4d0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
d4e0: 67 65 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20 20  ger, i++, 1);.  
d4f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d500: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d510: 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43  ng8, 0, 2, 0, pC
d520: 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  oll->zName, 0);.
d530: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d540: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
d550: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a  sultRow, 1, 2);.
d560: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
d570: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
d580: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
d590: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
d5a0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
d5b0: 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61  FOREIGN_KEY.  ca
d5c0: 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49  se PragTyp_FOREI
d5d0: 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28  GN_KEY_LIST: if(
d5e0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46   zRight ){.    F
d5f0: 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61  Key *pFK;.    Ta
d600: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70  ble *pTab;.    p
d610: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
d620: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
d630: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
d640: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76   pTab ){.      v
d650: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
d660: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
d670: 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b   pFK = pTab->pFK
d680: 65 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46  ey;.      if( pF
d690: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  K ){.        int
d6a0: 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20   i = 0; .       
d6b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
d6c0: 75 6d 43 6f 6c 73 28 76 2c 20 38 29 3b 0a 20 20  umCols(v, 8);.  
d6d0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
d6e0: 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20  em = 8;.        
d6f0: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
d700: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
d710: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71  iDb);.        sq
d720: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d730: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
d740: 45 5f 4e 41 4d 45 2c 20 22 69 64 22 2c 20 53 51  E_NAME, "id", SQ
d750: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
d760: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d770: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
d780: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
d790: 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54  "seq", SQLITE_ST
d7a0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
d7b0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
d7c0: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
d7d0: 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22  ME_NAME, "table"
d7e0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d7f0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d800: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d810: 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 3, COLNAME_NA
d820: 4d 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49  ME, "from", SQLI
d830: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d840: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d850: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20  etColName(v, 4, 
d860: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74  COLNAME_NAME, "t
d870: 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  o", SQLITE_STATI
d880: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
d890: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d8a0: 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 5, COLNAME_
d8b0: 4e 41 4d 45 2c 20 22 6f 6e 5f 75 70 64 61 74 65  NAME, "on_update
d8c0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d8d0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
d8e0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d8f0: 28 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 6, COLNAME_N
d900: 41 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22  AME, "on_delete"
d910: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d920: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d930: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d940: 76 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 7, COLNAME_NA
d950: 4d 45 2c 20 22 6d 61 74 63 68 22 2c 20 53 51 4c  ME, "match", SQL
d960: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d970: 20 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b       while(pFK){
d980: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a  .          int j
d990: 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  ;.          for(
d9a0: 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c  j=0; j<pFK->nCol
d9b0: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
d9c0: 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d      char *zCol =
d9d0: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43   pFK->aCol[j].zC
d9e0: 6f 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ol;.            
d9f0: 63 68 61 72 20 2a 7a 4f 6e 44 65 6c 65 74 65 20  char *zOnDelete 
da00: 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e  = (char *)action
da10: 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f  Name(pFK->aActio
da20: 6e 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  n[0]);.         
da30: 20 20 20 63 68 61 72 20 2a 7a 4f 6e 55 70 64 61     char *zOnUpda
da40: 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74  te = (char *)act
da50: 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63  ionName(pFK->aAc
da60: 74 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20 20 20  tion[1]);.      
da70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
da80: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
da90: 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20  teger, i, 1);.  
daa0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
dab0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
dac0: 50 5f 49 6e 74 65 67 65 72 2c 20 6a 2c 20 32 29  P_Integer, j, 2)
dad0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
dae0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
daf0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
db00: 2c 20 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f  , 3, 0, pFK->zTo
db10: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
db20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
db30: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
db40: 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20  8, 0, 4, 0,.    
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db60: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
db70: 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a  aCol[pFK->aCol[j
db80: 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20  ].iFrom].zName, 
db90: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
dba0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
dbb0: 34 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53  4(v, zCol ? OP_S
dbc0: 74 72 69 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c  tring8 : OP_Null
dbd0: 2c 20 30 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c  , 0, 5, 0, zCol,
dbe0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
dbf0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
dc00: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
dc10: 2c 20 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55 70  , 0, 6, 0, zOnUp
dc20: 64 61 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  date, 0);.      
dc30: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
dc40: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
dc50: 72 69 6e 67 38 2c 20 30 2c 20 37 2c 20 30 2c 20  ring8, 0, 7, 0, 
dc60: 7a 4f 6e 44 65 6c 65 74 65 2c 20 30 29 3b 0a 20  zOnDelete, 0);. 
dc70: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
dc80: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
dc90: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 38  OP_String8, 0, 8
dca0: 2c 20 30 2c 20 22 4e 4f 4e 45 22 2c 20 30 29 3b  , 0, "NONE", 0);
dcb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
dcc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
dcd0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
dce0: 31 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20  1, 8);.         
dcf0: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69   }.          ++i
dd00: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b 20  ;.          pFK 
dd10: 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d  = pFK->pNextFrom
dd20: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
dd30: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
dd40: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
dd50: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
dd60: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
dd70: 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  Y) */..#ifndef S
dd80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
dd90: 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53  GN_KEY.#ifndef S
dda0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
ddb0: 45 52 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ER.  case PragTy
ddc0: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48  p_FOREIGN_KEY_CH
ddd0: 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20  ECK: {.    FKey 
dde0: 2a 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20  *pFK;           
ddf0: 20 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b    /* A foreign k
de00: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  ey constraint */
de10: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
de20: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
de30: 68 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61  hild table conta
de40: 69 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22 20  in "REFERENCES" 
de50: 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54  keyword */.    T
de60: 61 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20  able *pParent;  
de70: 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
de80: 74 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64  table that child
de90: 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20   points to */.  
dea0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20    Index *pIdx;  
deb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
dec0: 78 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  x in the parent 
ded0: 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
dee0: 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
def0: 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
df00: 74 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65  ter:  Foreign ke
df10: 79 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61  y number for pTa
df20: 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20  b */.    int j; 
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df40: 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a  /* Loop counter:
df50: 20 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66    Field of the f
df60: 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20  oreign key */.  
df70: 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20    HashElem *k;  
df80: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
df90: 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20   counter:  Next 
dfa0: 74 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20  table in schema 
dfb0: 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20  */.    int x;   
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dfd0: 20 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65   result variable
dfe0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
dff0: 65 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f  esult;         /
e000: 2a 20 33 20 72 65 67 69 73 74 65 72 73 20 74 6f  * 3 registers to
e010: 20 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72   hold a result r
e020: 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ow */.    int re
e030: 67 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  gKey;           
e040: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
e050: 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65  hold key for che
e060: 63 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a  cking the FK */.
e070: 20 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20      int regRow; 
e080: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
e090: 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20  gisters to hold 
e0a0: 61 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20  a row from pTab 
e0b0: 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54  */.    int addrT
e0c0: 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
e0d0: 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63   Top of a loop c
e0e0: 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20  hecking foreign 
e0f0: 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20  keys */.    int 
e100: 61 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20  addrOk;         
e110: 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20     /* Jump here 
e120: 69 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b  if the key is OK
e130: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43   */.    int *aiC
e140: 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ols;           /
e150: 2a 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e  * child to paren
e160: 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67  t column mapping
e170: 20 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65 73 75   */..    regResu
e180: 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65  lt = pParse->nMe
e190: 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  m+1;.    pParse-
e1a0: 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20  >nMem += 4;.    
e1b0: 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73  regKey = ++pPars
e1c0: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67  e->nMem;.    reg
e1d0: 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Row = ++pParse->
e1e0: 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71  nMem;.    v = sq
e1f0: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
e200: 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  rse);.    sqlite
e210: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
e220: 76 2c 20 34 29 3b 0a 20 20 20 20 73 71 6c 69 74  v, 4);.    sqlit
e230: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
e240: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
e250: 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51  AME, "table", SQ
e260: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
e270: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
e280: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
e290: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f 77  LNAME_NAME, "row
e2a0: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
e2b0: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
e2c0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
e2d0: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
e2e0: 45 2c 20 22 70 61 72 65 6e 74 22 2c 20 53 51 4c  E, "parent", SQL
e2f0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
e300: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
e310: 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c  olName(v, 3, COL
e320: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b 69 64  NAME_NAME, "fkid
e330: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
e340: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  );.    sqlite3Co
e350: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
e360: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
e370: 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46   k = sqliteHashF
e380: 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44  irst(&db->aDb[iD
e390: 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48  b].pSchema->tblH
e3a0: 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  ash);.    while(
e3b0: 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20   k ){.      if( 
e3c0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
e3d0: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
e3e0: 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72  LocateTable(pPar
e3f0: 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a  se, 0, zRight, z
e400: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d  Db);.        k =
e410: 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
e420: 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20  .        pTab = 
e430: 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61  (Table*)sqliteHa
e440: 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20  shData(k);.     
e450: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
e460: 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20  hNext(k);.      
e470: 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62  }.      if( pTab
e480: 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b  ==0 || pTab->pFK
e490: 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ey==0 ) continue
e4a0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  ;.      sqlite3T
e4b0: 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c  ableLock(pParse,
e4c0: 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d   iDb, pTab->tnum
e4d0: 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  , 0, pTab->zName
e4e0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54 61  );.      if( pTa
e4f0: 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70  b->nCol+regRow>p
e500: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50  Parse->nMem ) pP
e510: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61  arse->nMem = pTa
e520: 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77  b->nCol + regRow
e530: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f  ;.      sqlite3O
e540: 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c  penTable(pParse,
e550: 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f   0, iDb, pTab, O
e560: 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20  P_OpenRead);.   
e570: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e580: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
e590: 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74  g8, 0, regResult
e5a0: 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  , 0, pTab->zName
e5b0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
e5c0: 20 20 20 20 20 20 20 20 20 20 50 34 5f 54 52 41            P4_TRA
e5d0: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 66  NSIENT);.      f
e5e0: 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62  or(i=1, pFK=pTab
e5f0: 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b  ->pFKey; pFK; i+
e600: 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78  +, pFK=pFK->pNex
e610: 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20  tFrom){.        
e620: 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65  pParent = sqlite
e630: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70  3FindTable(db, p
e640: 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20  FK->zTo, zDb);. 
e650: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
e660: 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  nt==0 ) continue
e670: 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d  ;.        pIdx =
e680: 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   0;.        sqli
e690: 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61  te3TableLock(pPa
e6a0: 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e  rse, iDb, pParen
e6b0: 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72  t->tnum, 0, pPar
e6c0: 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  ent->zName);.   
e6d0: 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
e6e0: 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50  FkLocateIndex(pP
e6f0: 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70  arse, pParent, p
e700: 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20  FK, &pIdx, 0);. 
e710: 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20         if( x==0 
e720: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
e730: 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20   pIdx==0 ){.    
e740: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f          sqlite3O
e750: 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c  penTable(pParse,
e760: 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74   i, iDb, pParent
e770: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a  , OP_OpenRead);.
e780: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
e790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e7a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
e7b0: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69  , OP_OpenRead, i
e7c0: 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44  , pIdx->tnum, iD
e7d0: 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  b);.            
e7e0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 50 34  sqlite3VdbeSetP4
e7f0: 4b 65 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20  KeyInfo(pParse, 
e800: 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20  pIdx);.         
e810: 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65   }.        }else
e820: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
e830: 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65  0;.          bre
e840: 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ak;.        }.  
e850: 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65      }.      asse
e860: 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72  rt( pParse->nErr
e870: 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a  >0 || pFK==0 );.
e880: 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 20        if( pFK ) 
e890: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28  break;.      if(
e8a0: 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20   pParse->nTab<i 
e8b0: 29 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d  ) pParse->nTab =
e8c0: 20 69 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f   i;.      addrTo
e8d0: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
e8e0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69  ddOp1(v, OP_Rewi
e8f0: 6e 64 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65  nd, 0); VdbeCove
e900: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66  rage(v);.      f
e910: 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62  or(i=1, pFK=pTab
e920: 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b  ->pFKey; pFK; i+
e930: 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78  +, pFK=pFK->pNex
e940: 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20  tFrom){.        
e950: 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65  pParent = sqlite
e960: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70  3FindTable(db, p
e970: 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20  FK->zTo, zDb);. 
e980: 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b         pIdx = 0;
e990: 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20  .        aiCols 
e9a0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 0;.        if(
e9b0: 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20   pParent ){.    
e9c0: 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65        x = sqlite
e9d0: 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70  3FkLocateIndex(p
e9e0: 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20  Parse, pParent, 
e9f0: 70 46 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43  pFK, &pIdx, &aiC
ea00: 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ols);.          
ea10: 61 73 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a  assert( x==0 );.
ea20: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ea30: 20 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74    addrOk = sqlit
ea40: 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28  e3VdbeMakeLabel(
ea50: 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  v);.        if( 
ea60: 70 50 61 72 65 6e 74 20 26 26 20 70 49 64 78 3d  pParent && pIdx=
ea70: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
ea80: 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e  int iKey = pFK->
ea90: 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20  aCol[0].iFrom;. 
eaa0: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
eab0: 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79   iKey>=0 && iKey
eac0: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20  <pTab->nCol );. 
ead0: 20 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65           if( iKe
eae0: 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29  y!=pTab->iPKey )
eaf0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
eb00: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
eb10: 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c  v, OP_Column, 0,
eb20: 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a   iKey, regRow);.
eb30: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
eb40: 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
eb50: 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20  (v, pTab, iKey, 
eb60: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
eb70: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
eb80: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e  AddOp2(v, OP_IsN
eb90: 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64  ull, regRow, add
eba0: 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61  rOk); VdbeCovera
ebb0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
ebc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ebd0: 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42  dOp2(v, OP_MustB
ebe0: 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c 20 0a 20  eInt, regRow, . 
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
ec00: 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74  lite3VdbeCurrent
ec10: 41 64 64 72 28 76 29 2b 33 29 3b 20 56 64 62 65  Addr(v)+3); Vdbe
ec20: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
ec30: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
ec40: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ec50: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
ec60: 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52  P_Rowid, 0, regR
ec70: 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ow);.          }
ec80: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
ec90: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
eca0: 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c  OP_NotExists, i,
ecb0: 20 30 2c 20 72 65 67 52 6f 77 29 3b 20 56 64 62   0, regRow); Vdb
ecc0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
ecd0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ece0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
ecf0: 47 6f 74 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29  Goto, 0, addrOk)
ed00: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
ed10: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
ed20: 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  v, sqlite3VdbeCu
ed30: 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b  rrentAddr(v)-2);
ed40: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
ed50: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d            for(j=
ed60: 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20  0; j<pFK->nCol; 
ed70: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
ed80: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
ed90: 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
eda0: 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20  e(v, pTab, 0,.  
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edc0: 20 20 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73            aiCols
edd0: 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70   ? aiCols[j] : p
ede0: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f  FK->aCol[j].iFro
edf0: 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20  m, regRow+j);.  
ee00: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ee10: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
ee20: 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77  P_IsNull, regRow
ee30: 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62  +j, addrOk); Vdb
ee40: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
ee50: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ee60: 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20      if( pParent 
ee70: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
ee80: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
ee90: 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  (v, OP_MakeRecor
eea0: 64 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e  d, regRow, pFK->
eeb0: 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20  nCol, regKey,.  
eec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
eee0: 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
eef0: 53 74 72 28 76 2c 70 49 64 78 29 2c 20 70 46 4b  Str(v,pIdx), pFK
ef00: 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20  ->nCol);.       
ef10: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ef20: 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f  AddOp4Int(v, OP_
ef30: 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b  Found, i, addrOk
ef40: 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20  , regKey, 0);.  
ef50: 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f            VdbeCo
ef60: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
ef70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
ef80: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ef90: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
efa0: 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 65  _Rowid, 0, regRe
efb0: 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20 20  sult+1);.       
efc0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
efd0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
efe0: 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 32  , 0, regResult+2
eff0: 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20  , 0, .          
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f010: 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34 5f 54 52 41  pFK->zTo, P4_TRA
f020: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20  NSIENT);.       
f030: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f040: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
f050: 2c 20 69 2d 31 2c 20 72 65 67 52 65 73 75 6c 74  , i-1, regResult
f060: 2b 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +3);.        sql
f070: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
f080: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
f090: 72 65 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20  regResult, 4);. 
f0a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
f0b0: 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76  beResolveLabel(v
f0c0: 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20  , addrOk);.     
f0d0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
f0e0: 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20  (db, aiCols);.  
f0f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
f100: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
f110: 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64   OP_Next, 0, add
f120: 72 54 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f 76  rTop+1); VdbeCov
f130: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
f140: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
f150: 65 72 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b  ere(v, addrTop);
f160: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
f170: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ak;.#endif /* !d
f180: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
f190: 49 54 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23  IT_TRIGGER) */.#
f1a0: 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65  endif /* !define
f1b0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
f1c0: 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23  REIGN_KEY) */..#
f1d0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20  ifndef NDEBUG.  
f1e0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 52  case PragTyp_PAR
f1f0: 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20  SER_TRACE: {.   
f200: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
f210: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
f220: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
f230: 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20  t, 0) ){.       
f240: 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
f250: 61 63 65 28 73 74 64 65 72 72 2c 20 22 70 61 72  ace(stderr, "par
f260: 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d  ser: ");.      }
f270: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
f280: 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
f290: 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a  (0, 0);.      }.
f2a0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
f2b0: 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20  k;.#endif..  /* 
f2c0: 52 65 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49  Reinstall the LI
f2d0: 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63  KE and GLOB func
f2e0: 74 69 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69  tions.  The vari
f2f0: 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a  ant of LIKE.  **
f300: 20 75 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61   used will be ca
f310: 73 65 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20  se sensitive or 
f320: 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  not depending on
f330: 20 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20   the RHS..  */. 
f340: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 41   case PragTyp_CA
f350: 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b  SE_SENSITIVE_LIK
f360: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  E: {.    if( zRi
f370: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
f380: 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
f390: 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71  Functions(db, sq
f3a0: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
f3b0: 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20  zRight, 0));.   
f3c0: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
f3d0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
f3e0: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
f3f0: 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69  ERROR_MAX.# defi
f400: 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52  ne SQLITE_INTEGR
f410: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
f420: 4d 41 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a  MAX 100.#endif..
f430: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
f440: 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
f450: 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20  ECK.  /* Pragma 
f460: 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 20 69 73  "quick_check" is
f470: 20 72 65 64 75 63 65 64 20 76 65 72 73 69 6f 6e   reduced version
f480: 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72   of .  ** integr
f490: 69 74 79 5f 63 68 65 63 6b 20 64 65 73 69 67 6e  ity_check design
f4a0: 65 64 20 74 6f 20 64 65 74 65 63 74 20 6d 6f 73  ed to detect mos
f4b0: 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  t database corru
f4c0: 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f  ption.  ** witho
f4d0: 75 74 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f  ut most of the o
f4e0: 76 65 72 68 65 61 64 20 6f 66 20 61 20 66 75 6c  verhead of a ful
f4f0: 6c 20 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63  l integrity-chec
f500: 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  k..  */.  case P
f510: 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59  ragTyp_INTEGRITY
f520: 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e  _CHECK: {.    in
f530: 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78  t i, j, addr, mx
f540: 45 72 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64  Err;..    /* Cod
f550: 65 20 74 68 61 74 20 61 70 70 65 61 72 73 20 61  e that appears a
f560: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
f570: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
f580: 2e 20 20 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20  .  If no error. 
f590: 20 20 20 2a 2a 20 6d 65 73 73 61 67 65 73 20 68     ** messages h
f5a0: 61 76 65 20 62 65 65 6e 20 67 65 6e 65 72 61 74  ave been generat
f5b0: 65 64 2c 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20  ed, output OK.  
f5c0: 4f 74 68 65 72 77 69 73 65 20 6f 75 74 70 75 74  Otherwise output
f5d0: 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f   the.    ** erro
f5e0: 72 20 6d 65 73 73 61 67 65 0a 20 20 20 20 2a 2f  r message.    */
f5f0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
f600: 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45  t int iLn = VDBE
f610: 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32  _OFFSET_LINENO(2
f620: 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  );.    static co
f630: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 65  nst VdbeOpList e
f640: 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20  ndCode[] = {.   
f650: 20 20 20 7b 20 4f 50 5f 49 66 4e 65 67 2c 20 20     { OP_IfNeg,  
f660: 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20       1, 0,      
f670: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
f680: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69  .      { OP_Stri
f690: 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20  ng8,     0, 3,  
f6a0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
f6b0: 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  1 */.      { OP_
f6c0: 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20  ResultRow,   3, 
f6d0: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  1,        0},.  
f6e0: 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73    };..    int is
f6f0: 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33  Quick = (sqlite3
f700: 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d  Tolower(zLeft[0]
f710: 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a  )=='q');..    /*
f720: 20 49 66 20 74 68 65 20 50 52 41 47 4d 41 20 63   If the PRAGMA c
f730: 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68  ommand was of th
f740: 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c  e form "PRAGMA <
f750: 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68  db>.integrity_ch
f760: 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65  eck",.    ** the
f770: 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20  n iDb is set to 
f780: 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65  the index of the
f790: 20 64 61 74 61 62 61 73 65 20 69 64 65 6e 74 69   database identi
f7a0: 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20  fied by <db>..  
f7b0: 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73    ** In this cas
f7c0: 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  e, the integrity
f7d0: 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62   of database iDb
f7e0: 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65   only is verifie
f7f0: 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20  d by.    ** the 
f800: 56 44 42 45 20 63 72 65 61 74 65 64 20 62 65 6c  VDBE created bel
f810: 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a  ow..    **.    *
f820: 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  * Otherwise, if 
f830: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  the command was 
f840: 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69  simply "PRAGMA i
f850: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20  ntegrity_check" 
f860: 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47  (or.    ** "PRAG
f870: 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29  MA quick_check")
f880: 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65  , then iDb is se
f890: 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20  t to 0. In this 
f8a0: 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20  case, set iDb.  
f8b0: 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c    ** to -1 here,
f8c0: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
f8d0: 74 20 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c  t the VDBE shoul
f8e0: 64 20 76 65 72 69 66 79 20 74 68 65 20 69 6e 74  d verify the int
f8f0: 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66  egrity.    ** of
f900: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
f910: 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20  tabases.  */.   
f920: 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
f930: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
f940: 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a  Db==0 || pId2->z
f950: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32   );.    if( pId2
f960: 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d  ->z==0 ) iDb = -
f970: 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69  1;..    /* Initi
f980: 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20 70  alize the VDBE p
f990: 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50  rogram */.    pP
f9a0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a  arse->nMem = 6;.
f9b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
f9c0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
f9d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f9e0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
f9f0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
fa00: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
fa10: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
fa20: 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68  ;..    /* Set th
fa30: 65 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72 20  e maximum error 
fa40: 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45  count */.    mxE
fa50: 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rr = SQLITE_INTE
fa60: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
fa70: 52 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28 20 7a  R_MAX;.    if( z
fa80: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
fa90: 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a  qlite3GetInt32(z
faa0: 52 69 67 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a  Right, &mxErr);.
fab0: 20 20 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c        if( mxErr<
fac0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78  =0 ){.        mx
fad0: 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54  Err = SQLITE_INT
fae0: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
faf0: 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a  OR_MAX;.      }.
fb00: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
fb10: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
fb20: 50 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45 72 72  P_Integer, mxErr
fb30: 2c 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d  , 1);  /* reg[1]
fb40: 20 68 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c 65   holds errors le
fb50: 66 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f  ft */..    /* Do
fb60: 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68   an integrity ch
fb70: 65 63 6b 20 6f 6e 20 65 61 63 68 20 64 61 74 61  eck on each data
fb80: 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20  base file */.   
fb90: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
fba0: 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nDb; i++){.     
fbb0: 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20   HashElem *x;.  
fbc0: 20 20 20 20 48 61 73 68 20 2a 70 54 62 6c 73 3b      Hash *pTbls;
fbd0: 0a 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d  .      int cnt =
fbe0: 20 30 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 4f   0;..      if( O
fbf0: 4d 49 54 5f 54 45 4d 50 44 42 20 26 26 20 69 3d  MIT_TEMPDB && i=
fc00: 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =1 ) continue;. 
fc10: 20 20 20 20 20 69 66 28 20 69 44 62 3e 3d 30 20       if( iDb>=0 
fc20: 26 26 20 69 21 3d 69 44 62 20 29 20 63 6f 6e 74  && i!=iDb ) cont
fc30: 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c  inue;..      sql
fc40: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
fc50: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b  hema(pParse, i);
fc60: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
fc70: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
fc80: 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
fc90: 20 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75 74 20   /* Halt if out 
fca0: 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20  of errors */.   
fcb0: 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28     VdbeCoverage(
fcc0: 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  v);.      sqlite
fcd0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
fce0: 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
fcf0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fd00: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
fd10: 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20  );..      /* Do 
fd20: 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  an integrity che
fd30: 63 6b 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65  ck of the B-Tree
fd40: 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20  .      **.      
fd50: 2a 2a 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c  ** Begin by fill
fd60: 69 6e 67 20 72 65 67 69 73 74 65 72 73 20 32 2c  ing registers 2,
fd70: 20 33 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65   3, ... with the
fd80: 20 72 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62   root pages numb
fd90: 65 72 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72  ers.      ** for
fda0: 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20   all tables and 
fdb0: 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20 64  indices in the d
fdc0: 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a  atabase..      *
fdd0: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
fde0: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
fdf0: 65 78 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29  exHeld(db, i, 0)
fe00: 20 29 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20   );.      pTbls 
fe10: 3d 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53  = &db->aDb[i].pS
fe20: 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a  chema->tblHash;.
fe30: 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69        for(x=sqli
fe40: 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c  teHashFirst(pTbl
fe50: 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48  s); x; x=sqliteH
fe60: 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20  ashNext(x)){.   
fe70: 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
fe80: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
fe90: 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e  a(x);.        In
fea0: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20  dex *pIdx;.     
feb0: 20 20 20 69 66 28 20 48 61 73 52 6f 77 69 64 28     if( HasRowid(
fec0: 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 20  pTab) ){.       
fed0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
fee0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
fef0: 65 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20  er, pTab->tnum, 
ff00: 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  2+cnt);.        
ff10: 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76    VdbeComment((v
ff20: 2c 20 22 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e  , "%s", pTab->zN
ff30: 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ame));.         
ff40: 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20   cnt++;.        
ff50: 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 49  }.        for(pI
ff60: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
ff70: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
ff80: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20  ->pNext){.      
ff90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ffa0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
ffb0: 67 65 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c  ger, pIdx->tnum,
ffc0: 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20   2+cnt);.       
ffd0: 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28     VdbeComment((
ffe0: 76 2c 20 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a  v, "%s", pIdx->z
fff0: 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20  Name));.        
10000 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20    cnt++;.       
10010 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20   }.      }..    
10020 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73    /* Make sure s
10030 75 66 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72  ufficient number
10040 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 68 61   of registers ha
10050 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65  ve been allocate
10060 64 20 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73  d */.      pPars
10070 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70  e->nMem = MAX( p
10080 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74  Parse->nMem, cnt
10090 2b 38 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  +8 );..      /* 
100a0 44 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e  Do the b-tree in
100b0 74 65 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a  tegrity checks *
100c0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
100d0 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
100e0 49 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20  IntegrityCk, 2, 
100f0 63 6e 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  cnt, 1);.      s
10100 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
10110 50 35 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20  P5(v, (u8)i);.  
10120 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
10130 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
10140 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56  OP_IsNull, 2); V
10150 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
10160 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10170 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
10180 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a  ring8, 0, 3, 0,.
10190 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
101a0 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a  MPrintf(db, "***
101b0 20 69 6e 20 64 61 74 61 62 61 73 65 20 25 73 20   in database %s 
101c0 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b  ***\n", db->aDb[
101d0 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20  i].zName),.     
101e0 20 20 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b      P4_DYNAMIC);
101f0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10200 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d  beAddOp3(v, OP_M
10210 6f 76 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20  ove, 2, 4, 1);. 
10220 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10230 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
10240 63 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20  cat, 4, 3, 2);. 
10250 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10260 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
10270 75 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20  ultRow, 2, 1);. 
10280 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10290 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
102a0 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b  );..      /* Mak
102b0 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69  e sure all the i
102c0 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74  ndices are const
102d0 72 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79  ructed correctly
102e0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
102f0 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73   for(x=sqliteHas
10300 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78  hFirst(pTbls); x
10310 20 26 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d   && !isQuick; x=
10320 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78  sqliteHashNext(x
10330 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c  )){.        Tabl
10340 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
10350 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20  HashData(x);.   
10360 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78       Index *pIdx
10370 2c 20 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20 20  , *pPk;.        
10380 49 6e 64 65 78 20 2a 70 50 72 69 6f 72 20 3d 20  Index *pPrior = 
10390 30 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c  0;.        int l
103a0 6f 6f 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20  oopTop;.        
103b0 69 6e 74 20 69 44 61 74 61 43 75 72 2c 20 69 49  int iDataCur, iI
103c0 64 78 43 75 72 3b 0a 20 20 20 20 20 20 20 20 69  dxCur;.        i
103d0 6e 74 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20  nt r1 = -1;..   
103e0 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70       if( pTab->p
103f0 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69  Index==0 ) conti
10400 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70 50 6b  nue;.        pPk
10410 20 3d 20 48 61 73 52 6f 77 69 64 28 70 54 61 62   = HasRowid(pTab
10420 29 20 3f 20 30 20 3a 20 73 71 6c 69 74 65 33 50  ) ? 0 : sqlite3P
10430 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70  rimaryKeyIndex(p
10440 54 61 62 29 3b 0a 20 20 20 20 20 20 20 20 61 64  Tab);.        ad
10450 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
10460 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50  AddOp1(v, OP_IfP
10470 6f 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70  os, 1);  /* Stop
10480 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72   if out of error
10490 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62  s */.        Vdb
104a0 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
104b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
104c0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61  eAddOp2(v, OP_Ha
104d0 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  lt, 0, 0);.     
104e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
104f0 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
10500 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
10510 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 70  ExprCacheClear(p
10520 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20  Parse);.        
10530 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65  sqlite3OpenTable
10540 41 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72 73  AndIndices(pPars
10550 65 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e  e, pTab, OP_Open
10560 52 65 61 64 2c 0a 20 20 20 20 20 20 20 20 20 20  Read,.          
10570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10580 20 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20 26           1, 0, &
10590 69 44 61 74 61 43 75 72 2c 20 26 69 49 64 78 43  iDataCur, &iIdxC
105a0 75 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  ur);.        sql
105b0 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
105c0 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c  , OP_Integer, 0,
105d0 20 37 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72   7);.        for
105e0 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d  (j=0, pIdx=pTab-
105f0 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
10600 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
10610 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
10620 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10630 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
10640 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e  , 0, 8+j); /* in
10650 64 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75 6e  dex entries coun
10660 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  ter */.        }
10670 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
10680 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 70 50 61 72  >nMem = MAX(pPar
10690 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a  se->nMem, 8+j);.
106a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
106b0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
106c0 52 65 77 69 6e 64 2c 20 69 44 61 74 61 43 75 72  Rewind, iDataCur
106d0 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 0); VdbeCovera
106e0 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 6c  ge(v);.        l
106f0 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33  oopTop = sqlite3
10700 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
10710 5f 41 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a  _AddImm, 7, 1);.
10720 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66          /* Verif
10730 79 20 74 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e  y that all NOT N
10740 55 4c 4c 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c  ULL columns real
10750 6c 79 20 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20  ly are NOT NULL 
10760 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  */.        for(j
10770 3d 30 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c  =0; j<pTab->nCol
10780 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
10790 20 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20    char *zErr;.  
107a0 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32          int jmp2
107b0 2c 20 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20 20  , jmp3;.        
107c0 20 20 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69    if( j==pTab->i
107d0 50 4b 65 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b  PKey ) continue;
107e0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
107f0 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74  Tab->aCol[j].not
10800 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  Null==0 ) contin
10810 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  ue;.          sq
10820 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
10830 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c  ColumnOfTable(v,
10840 20 70 54 61 62 2c 20 69 44 61 74 61 43 75 72 2c   pTab, iDataCur,
10850 20 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   j, 3);.        
10860 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
10870 6e 67 65 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f  ngeP5(v, OPFLAG_
10880 54 59 50 45 4f 46 41 52 47 29 3b 0a 20 20 20 20  TYPEOFARG);.    
10890 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c        jmp2 = sql
108a0 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
108b0 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29  , OP_NotNull, 3)
108c0 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
108d0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
108e0 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
108f0 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
10900 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e  -1); /* Decremen
10910 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f  t error limit */
10920 0a 20 20 20 20 20 20 20 20 20 20 7a 45 72 72 20  .          zErr 
10930 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66  = sqlite3MPrintf
10940 28 64 62 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65  (db, "NULL value
10950 20 69 6e 20 25 73 2e 25 73 22 2c 20 70 54 61 62   in %s.%s", pTab
10960 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10980 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f         pTab->aCo
10990 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20  l[j].zName);.   
109a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
109b0 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
109c0 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
109d0 20 7a 45 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49   zErr, P4_DYNAMI
109e0 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  C);.          sq
109f0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10a00 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
10a10 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   3, 1);.        
10a20 20 20 6a 6d 70 33 20 3d 20 73 71 6c 69 74 65 33    jmp3 = sqlite3
10a30 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
10a40 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65  _IfPos, 1); Vdbe
10a50 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
10a60 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10a70 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48  beAddOp0(v, OP_H
10a80 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  alt);.          
10a90 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
10aa0 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20  ere(v, jmp2);.  
10ab0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10ac0 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
10ad0 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  mp3);.        }.
10ae0 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69 64          /* Valid
10af0 61 74 65 20 69 6e 64 65 78 20 65 6e 74 72 69 65  ate index entrie
10b00 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  s for the curren
10b10 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20  t row */.       
10b20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70   for(j=0, pIdx=p
10b30 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
10b40 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
10b50 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ext, j++){.     
10b60 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a       int jmp2, j
10b70 6d 70 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b  mp3, jmp4, jmp5;
10b80 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63  .          int c
10b90 6b 55 6e 69 71 20 3d 20 73 71 6c 69 74 65 33 56  kUniq = sqlite3V
10ba0 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b  dbeMakeLabel(v);
10bb0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
10bc0 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69  Pk==pIdx ) conti
10bd0 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72  nue;.          r
10be0 31 20 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72  1 = sqlite3Gener
10bf0 61 74 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72  ateIndexKey(pPar
10c00 73 65 2c 20 70 49 64 78 2c 20 69 44 61 74 61 43  se, pIdx, iDataC
10c10 75 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c  ur, 0, 0, &jmp3,
10c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c40 20 20 20 20 20 20 20 20 70 50 72 69 6f 72 2c 20          pPrior, 
10c50 72 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  r1);.          p
10c60 50 72 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20  Prior = pIdx;.  
10c70 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10c80 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10c90 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b  AddImm, 8+j, 1);
10ca0 20 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65    /* increment e
10cb0 6e 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  ntry count */.  
10cc0 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66          /* Verif
10cd0 79 20 74 68 61 74 20 61 6e 20 69 6e 64 65 78 20  y that an index 
10ce0 65 6e 74 72 79 20 65 78 69 73 74 73 20 66 6f 72  entry exists for
10cf0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62   the current tab
10d00 6c 65 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20  le row */.      
10d10 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74      jmp2 = sqlit
10d20 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28  e3VdbeAddOp4Int(
10d30 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64  v, OP_Found, iId
10d40 78 43 75 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20  xCur+j, ckUniq, 
10d50 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r1,.            
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d70 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e            pIdx->
10d80 6e 43 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f  nColumn); VdbeCo
10d90 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
10da0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10db0 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
10dc0 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20  Imm, 1, -1); /* 
10dd0 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20  Decrement error 
10de0 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20  limit */.       
10df0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10e00 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
10e10 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 22 72 6f  g8, 0, 3, 0, "ro
10e20 77 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b  w ", P4_STATIC);
10e30 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10e40 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
10e50 4f 50 5f 43 6f 6e 63 61 74 2c 20 37 2c 20 33 2c  OP_Concat, 7, 3,
10e60 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
10e70 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
10e80 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
10e90 30 2c 20 34 2c 20 30 2c 20 0a 20 20 20 20 20 20  0, 4, 0, .      
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10eb0 20 20 20 20 20 20 22 20 6d 69 73 73 69 6e 67 20        " missing 
10ec0 66 72 6f 6d 20 69 6e 64 65 78 20 22 2c 20 50 34  from index ", P4
10ed0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
10ee0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10ef0 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
10f00 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20  at, 4, 3, 3);.  
10f10 20 20 20 20 20 20 20 20 6a 6d 70 35 20 3d 20 73          jmp5 = s
10f20 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
10f30 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
10f40 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 4, 0,.       
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f60 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78              pIdx
10f70 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e  ->zName, P4_TRAN
10f80 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20  SIENT);.        
10f90 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10fa0 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
10fb0 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20  , 4, 3, 3);.    
10fc0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10fd0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
10fe0 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a  sultRow, 3, 1);.
10ff0 20 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d            jmp4 =
11000 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11010 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p1(v, OP_IfPos, 
11020 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  1); VdbeCoverage
11030 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
11040 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30  qlite3VdbeAddOp0
11050 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20  (v, OP_Halt);.  
11060 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11070 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
11080 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp2);.          
11090 2f 2a 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e  /* For UNIQUE in
110a0 64 65 78 65 73 2c 20 76 65 72 69 66 79 20 74 68  dexes, verify th
110b0 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72  at only one entr
110c0 79 20 65 78 69 73 74 73 20 77 69 74 68 20 74 68  y exists with th
110d0 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63  e.          ** c
110e0 75 72 72 65 6e 74 20 6b 65 79 2e 20 20 54 68 65  urrent key.  The
110f0 20 65 6e 74 72 79 20 69 73 20 75 6e 69 71 75 65   entry is unique
11100 20 69 66 20 28 31 29 20 61 6e 79 20 63 6f 6c 75   if (1) any colu
11110 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20  mn is NULL.     
11120 20 20 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74       ** or (2) t
11130 68 65 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61  he next entry ha
11140 73 20 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65  s a different ke
11150 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69  y */.          i
11160 66 28 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  f( IsUniqueIndex
11170 28 70 49 64 78 29 20 29 7b 0a 20 20 20 20 20 20  (pIdx) ){.      
11180 20 20 20 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b        int uniqOk
11190 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61   = sqlite3VdbeMa
111a0 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20  keLabel(v);.    
111b0 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 36          int jmp6
111c0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e  ;.            in
111d0 74 20 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  t kk;.          
111e0 20 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70    for(kk=0; kk<p
111f0 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b  Idx->nKeyCol; kk
11200 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
11210 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49     int iCol = pI
11220 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d  dx->aiColumn[kk]
11230 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
11240 61 73 73 65 72 74 28 20 69 43 6f 6c 3e 3d 30 20  assert( iCol>=0 
11250 26 26 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43  && iCol<pTab->nC
11260 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ol );.          
11270 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43      if( pTab->aC
11280 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c  ol[iCol].notNull
11290 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
112a0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
112b0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
112c0 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b  OP_IsNull, r1+kk
112d0 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20  , uniqOk);.     
112e0 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76           VdbeCov
112f0 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
11300 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
11310 20 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74      jmp6 = sqlit
11320 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
11330 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78 43 75 72  OP_Next, iIdxCur
11340 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  +j); VdbeCoverag
11350 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
11360 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11370 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20  Op2(v, OP_Goto, 
11380 30 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20  0, uniqOk);.    
11390 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
113a0 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
113b0 6d 70 36 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp6);.          
113c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
113d0 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64 78  Op4Int(v, OP_Idx
113e0 47 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 75  GT, iIdxCur+j, u
113f0 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20 20  niqOk, r1,.     
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11410 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78              pIdx
11420 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56 64 62 65  ->nKeyCol); Vdbe
11430 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
11440 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
11450 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
11460 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
11470 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72   /* Decrement er
11480 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20  ror limit */.   
11490 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
114a0 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
114b0 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
114c0 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114e0 20 22 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74   "non-unique ent
114f0 72 79 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50  ry in index ", P
11500 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
11510 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11520 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47  beAddOp2(v, OP_G
11530 6f 74 6f 2c 20 30 2c 20 6a 6d 70 35 29 3b 0a 20  oto, 0, jmp5);. 
11540 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
11550 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62  e3VdbeResolveLab
11560 65 6c 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20  el(v, uniqOk);. 
11570 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
11580 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11590 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34  JumpHere(v, jmp4
115a0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
115b0 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49  ite3ResolvePartI
115c0 64 78 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20  dxLabel(pParse, 
115d0 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d  jmp3);.        }
115e0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
115f0 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
11600 5f 4e 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c  _Next, iDataCur,
11610 20 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43   loopTop); VdbeC
11620 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
11630 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
11640 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54  umpHere(v, loopT
11650 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53  op-1);.#ifndef S
11660 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
11670 43 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71  COUNT.        sq
11680 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
11690 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
116a0 2c 20 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20  , 2, 0, .       
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 77                "w
116c0 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65  rong # of entrie
116d0 73 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34  s in index ", P4
116e0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
116f0 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
11700 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
11710 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
11720 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
11730 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70        if( pPk==p
11740 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  Idx ) continue;.
11750 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d            addr =
11760 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
11770 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20  entAddr(v);.    
11780 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11790 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66  eAddOp2(v, OP_If
117a0 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b  Pos, 1, addr+2);
117b0 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
117c0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
117d0 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
117e0 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b   OP_Halt, 0, 0);
117f0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11800 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
11810 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75  OP_Count, iIdxCu
11820 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  r+j, 3);.       
11830 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
11840 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38  dOp3(v, OP_Eq, 8
11850 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20  +j, addr+8, 3); 
11860 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
11870 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11880 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76  e3VdbeChangeP5(v
11890 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c  , SQLITE_NOTNULL
118a0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
118b0 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
118c0 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
118d0 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  -1);.          s
118e0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
118f0 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
11900 30 2c 20 33 2c 20 30 2c 20 70 49 64 78 2d 3e 7a  0, 3, 0, pIdx->z
11910 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45  Name, P4_TRANSIE
11920 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  NT);.          s
11930 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
11940 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33  (v, OP_Concat, 3
11950 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20 20  , 2, 7);.       
11960 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
11970 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
11980 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20  tRow, 7, 1);.   
11990 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a       }.#endif /*
119a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
119b0 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20  EECOUNT */.     
119c0 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61 64   } .    }.    ad
119d0 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
119e0 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
119f0 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c  aySize(endCode),
11a00 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a   endCode, iLn);.
11a10 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
11a20 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2c  hangeP3(v, addr,
11a30 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73 71   -mxErr);.    sq
11a40 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
11a50 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20  e(v, addr);.    
11a60 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
11a70 65 50 34 28 76 2c 20 61 64 64 72 2b 31 2c 20 22  eP4(v, addr+1, "
11a80 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b  ok", P4_STATIC);
11a90 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
11aa0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
11ab0 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
11ac0 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  ECK */..#ifndef 
11ad0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
11ae0 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  6.  /*.  **   PR
11af0 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20  AGMA encoding.  
11b00 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f  **   PRAGMA enco
11b10 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c 22  ding = "utf-8"|"
11b20 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c  utf-16"|"utf-16l
11b30 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20 20  e"|"utf-16be".  
11b40 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20 66  **.  ** In its f
11b50 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20  irst form, this 
11b60 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74  pragma returns t
11b70 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74  he encoding of t
11b80 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74  he main.  ** dat
11b90 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 64 61  abase. If the da
11ba0 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e  tabase is not in
11bb0 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73  itialized, it is
11bc0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77   initialized now
11bd0 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
11be0 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74  second form of t
11bf0 68 69 73 20 70 72 61 67 6d 61 20 69 73 20 61 20  his pragma is a 
11c00 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69  no-op if the mai
11c10 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  n database file.
11c20 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72    ** has not alr
11c30 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61  eady been initia
11c40 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63  lized. In this c
11c50 61 73 65 20 69 74 20 73 65 74 73 20 74 68 65 20  ase it sets the 
11c60 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63  default.  ** enc
11c70 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20  oding that will 
11c80 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
11c90 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
11ca0 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65  le if a new file
11cb0 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64  .  ** is created
11cc0 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67  . If an existing
11cd0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
11ce0 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74  ile is opened, t
11cf0 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  hen the.  ** def
11d00 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69  ault text encodi
11d10 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69 73 74  ng for the exist
11d20 69 6e 67 20 64 61 74 61 62 61 73 65 20 69 73 20  ing database is 
11d30 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  used..  ** .  **
11d40 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65   In all cases ne
11d50 77 20 64 61 74 61 62 61 73 65 73 20 63 72 65 61  w databases crea
11d60 74 65 64 20 75 73 69 6e 67 20 74 68 65 20 41 54  ted using the AT
11d70 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65  TACH command are
11d80 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f  .  ** created to
11d90 20 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 65   use the same de
11da0 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64  fault text encod
11db0 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20  ing as the main 
11dc0 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a  database. If.  *
11dd0 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  * the main datab
11de0 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e  ase has not been
11df0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64   initialized and
11e00 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68 65 6e  /or created when
11e10 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20   ATTACH.  ** is 
11e20 65 78 65 63 75 74 65 64 2c 20 74 68 69 73 20 69  executed, this i
11e30 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68  s done before th
11e40 65 20 41 54 54 41 43 48 20 6f 70 65 72 61 74 69  e ATTACH operati
11e50 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e  on..  **.  ** In
11e60 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   the second form
11e70 20 74 68 69 73 20 70 72 61 67 6d 61 20 73 65 74   this pragma set
11e80 73 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64  s the text encod
11e90 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 69  ing to be used i
11ea0 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62  n.  ** new datab
11eb0 61 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65  ase files create
11ec0 64 20 75 73 69 6e 67 20 74 68 69 73 20 64 61 74  d using this dat
11ed0 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74  abase handle. It
11ee0 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73   is only.  ** us
11ef0 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20  eful if invoked 
11f00 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65  immediately afte
11f10 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  r the main datab
11f20 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73  ase i.  */.  cas
11f30 65 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44 49  e PragTyp_ENCODI
11f40 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  NG: {.    static
11f50 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e   const struct En
11f60 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68  cName {.      ch
11f70 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20  ar *zName;.     
11f80 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65   u8 enc;.    } e
11f90 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20  ncnames[] = {.  
11fa0 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20 20      { "UTF8",   
11fb0 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20    SQLITE_UTF8   
11fc0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
11fd0 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c 49  "UTF-8",    SQLI
11fe0 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d  TE_UTF8        }
11ff0 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c  ,  /* Must be el
12000 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20  ement [1] */.   
12010 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c     { "UTF-16le",
12020 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20   SQLITE_UTF16LE 
12030 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20      },  /* Must 
12040 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a  be element [2] *
12050 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31  /.      { "UTF-1
12060 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  6be", SQLITE_UTF
12070 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20  16BE     },  /* 
12080 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20  Must be element 
12090 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  [3] */.      { "
120a0 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49 54  UTF16le",  SQLIT
120b0 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c  E_UTF16LE     },
120c0 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62  .      { "UTF16b
120d0 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31  e",  SQLITE_UTF1
120e0 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  6BE     },.     
120f0 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30   { "UTF-16",   0
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12110 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55    }, /* SQLITE_U
12120 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20  TF16NATIVE */.  
12130 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20      { "UTF16",  
12140 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
12150 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54       }, /* SQLIT
12160 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f  E_UTF16NATIVE */
12170 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a  .      { 0, 0 }.
12180 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74      };.    const
12190 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20   struct EncName 
121a0 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21  *pEnc;.    if( !
121b0 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20  zRight ){    /* 
121c0 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  "PRAGMA encoding
121d0 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73  " */.      if( s
121e0 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
121f0 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
12200 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
12210 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
12220 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
12230 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12240 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
12250 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
12260 65 6e 63 6f 64 69 6e 67 22 2c 20 53 51 4c 49 54  encoding", SQLIT
12270 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
12280 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
12290 70 32 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p2(v, OP_String8
122a0 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 20 20 61  , 0, 1);.      a
122b0 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b  ssert( encnames[
122c0 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63  SQLITE_UTF8].enc
122d0 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b  ==SQLITE_UTF8 );
122e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
122f0 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55  ncnames[SQLITE_U
12300 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c  TF16LE].enc==SQL
12310 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20  ITE_UTF16LE );. 
12320 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63       assert( enc
12330 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46  names[SQLITE_UTF
12340 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54  16BE].enc==SQLIT
12350 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 20  E_UTF16BE );.   
12360 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
12370 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20 65 6e  angeP4(v, -1, en
12380 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61 72 73  cnames[ENC(pPars
12390 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20 50  e->db)].zName, P
123a0 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
123b0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
123c0 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
123d0 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d  ow, 1, 1);.    }
123e0 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20 20  else{           
123f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12400 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  "PRAGMA encoding
12410 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20   = XXX" */.     
12420 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20   /* Only change 
12430 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c  the value of sql
12440 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64  ite.enc if the d
12450 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69  atabase handle i
12460 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69  s not.      ** i
12470 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74  nitialized. If t
12480 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
12490 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77   exists, the new
124a0 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75   sqlite.enc valu
124b0 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20  e.      ** will 
124c0 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  be overwritten w
124d0 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69  hen the schema i
124e0 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49  s next loaded. I
124f0 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20  f it does not.  
12500 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65      ** already e
12510 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62  xists, it will b
12520 65 20 63 72 65 61 74 65 64 20 74 6f 20 75 73 65  e created to use
12530 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e   the new encodin
12540 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a  g value..      *
12550 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20 20  /.      if( .   
12560 20 20 20 20 20 21 28 44 62 48 61 73 50 72 6f 70       !(DbHasProp
12570 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 53  erty(db, 0, DB_S
12580 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c  chemaLoaded)) ||
12590 20 0a 20 20 20 20 20 20 20 20 44 62 48 61 73 50   .        DbHasP
125a0 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44  roperty(db, 0, D
125b0 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20 20  B_Empty) .      
125c0 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
125d0 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d  Enc=&encnames[0]
125e0 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70  ; pEnc->zName; p
125f0 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  Enc++){.        
12600 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
12610 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  StrICmp(zRight, 
12620 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a  pEnc->zName) ){.
12630 20 20 20 20 20 20 20 20 20 20 20 20 53 43 48 45              SCHE
12640 4d 41 5f 45 4e 43 28 64 62 29 20 3d 20 45 4e 43  MA_ENC(db) = ENC
12650 28 64 62 29 20 3d 0a 20 20 20 20 20 20 20 20 20  (db) =.         
12660 20 20 20 20 20 20 20 70 45 6e 63 2d 3e 65 6e 63         pEnc->enc
12670 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53   ? pEnc->enc : S
12680 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
12690 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  E;.            b
126a0 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
126b0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
126c0 20 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a      if( !pEnc->z
126d0 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Name ){.        
126e0 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
126f0 67 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75 70  g(pParse, "unsup
12700 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a  ported encoding:
12710 20 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20   %s", zRight);. 
12720 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
12730 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
12740 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
12750 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
12760 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
12770 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
12780 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20  ERSION_PRAGMAS. 
12790 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
127a0 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68  A [database.]sch
127b0 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ema_version.  **
127c0 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
127d0 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73  ase.]schema_vers
127e0 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  ion = <integer>.
127f0 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    **.  **   PRAG
12800 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73  MA [database.]us
12810 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20  er_version.  ** 
12820 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
12830 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e  se.]user_version
12840 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
12850 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
12860 5b 64 61 74 61 62 61 73 65 2e 5d 66 72 65 65 6c  [database.]freel
12870 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74  ist_count = <int
12880 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
12890 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
128a0 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f  se.]application_
128b0 69 64 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  id.  **   PRAGMA
128c0 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c   [database.]appl
128d0 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e  ication_id = <in
128e0 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
128f0 20 54 68 65 20 70 72 61 67 6d 61 27 73 20 73 63   The pragma's sc
12900 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64  hema_version and
12910 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72   user_version ar
12920 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72  e used to set or
12930 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61   get.  ** the va
12940 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  lue of the schem
12950 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73  a-version and us
12960 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70  er-version, resp
12970 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20  ectively. Both. 
12980 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76   ** the schema-v
12990 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75  ersion and the u
129a0 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20  ser-version are 
129b0 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  32-bit signed in
129c0 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72  tegers.  ** stor
129d0 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ed in the databa
129e0 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a  se header..  **.
129f0 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d    ** The schema-
12a00 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c  cookie is usuall
12a10 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74  y only manipulat
12a20 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
12a30 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a   SQLite. It.  **
12a40 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
12a50 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76  by SQLite whenev
12a60 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
12a70 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69  schema is modifi
12a80 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61  ed (by.  ** crea
12a90 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67  ting or dropping
12aa0 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65   a table or inde
12ab0 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76  x). The schema v
12ac0 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62  ersion is used b
12ad0 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61  y.  ** SQLite ea
12ae0 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20  ch time a query 
12af0 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65  is executed to e
12b00 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69  nsure that the i
12b10 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20  nternal cache.  
12b20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ** of the schema
12b30 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69   used when compi
12b40 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65  ling the SQL que
12b50 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73  ry matches the s
12b60 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68  chema of.  ** th
12b70 65 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e  e database again
12b80 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  st which the com
12b90 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61  piled query is a
12ba0 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64  ctually executed
12bb0 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e  ..  ** Subvertin
12bc0 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d  g this mechanism
12bd0 20 62 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d   by using "PRAGM
12be0 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
12bf0 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a  " to modify.  **
12c00 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
12c10 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c  ion is potential
12c20 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64  ly dangerous and
12c30 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f   may lead to pro
12c40 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65  gram.  ** crashe
12c50 73 20 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f  s or database co
12c60 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69  rruption. Use wi
12c70 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a  th caution!.  **
12c80 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76  .  ** The user-v
12c90 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73  ersion is not us
12ca0 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
12cb0 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20   SQLite. It may 
12cc0 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  be used by.  ** 
12cd0 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72  applications for
12ce0 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20   any purpose..  
12cf0 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
12d00 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a 20  p_HEADER_VALUE: 
12d10 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69  {.    int iCooki
12d20 65 20 3d 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  e = aPragmaNames
12d30 5b 6d 69 64 5d 2e 69 41 72 67 3b 20 20 2f 2a 20  [mid].iArg;  /* 
12d40 57 68 69 63 68 20 63 6f 6f 6b 69 65 20 74 6f 20  Which cookie to 
12d50 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f  read or write */
12d60 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
12d70 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
12d80 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
12d90 74 20 26 26 20 28 61 50 72 61 67 6d 61 4e 61 6d  t && (aPragmaNam
12da0 65 73 5b 6d 69 64 5d 2e 6d 50 72 61 67 46 6c 61  es[mid].mPragFla
12db0 67 20 26 20 50 72 61 67 46 6c 61 67 5f 52 65 61  g & PragFlag_Rea
12dc0 64 4f 6e 6c 79 29 3d 3d 30 20 29 7b 0a 20 20 20  dOnly)==0 ){.   
12dd0 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20     /* Write the 
12de0 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65  specified cookie
12df0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20   value */.      
12e00 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
12e10 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69  eOpList setCooki
12e20 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  e[] = {.        
12e30 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  { OP_Transaction
12e40 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c  ,    0,  1,  0},
12e50 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
12e60 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
12e70 2c 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c 20  ,        0,  1, 
12e80 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
12e90 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74          { OP_Set
12ea0 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20  Cookie,      0, 
12eb0 20 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32   0,  1},    /* 2
12ec0 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20   */.      };.   
12ed0 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71     int addr = sq
12ee0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
12ef0 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
12f00 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43  setCookie), setC
12f10 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20  ookie, 0);.     
12f20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
12f30 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44  geP1(v, addr, iD
12f40 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
12f50 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
12f60 20 61 64 64 72 2b 31 2c 20 73 71 6c 69 74 65 33   addr+1, sqlite3
12f70 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
12f80 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12f90 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
12fa0 2b 32 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  +2, iDb);.      
12fb0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
12fc0 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 69  eP2(v, addr+2, i
12fd0 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c  Cookie);.    }el
12fe0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61  se{.      /* Rea
12ff0 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  d the specified 
13000 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a  cookie value */.
13010 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
13020 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65  st VdbeOpList re
13030 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20  adCookie[] = {. 
13040 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e         { OP_Tran
13050 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20  saction,     0, 
13060 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30   0,  0},    /* 0
13070 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50   */.        { OP
13080 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20  _ReadCookie,    
13090 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20    0,  1,  0},   
130a0 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20   /* 1 */.       
130b0 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
130c0 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20 30         1,  1,  0
130d0 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  }.      };.     
130e0 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69   int addr = sqli
130f0 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
13100 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65  (v, ArraySize(re
13110 61 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43  adCookie), readC
13120 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20  ookie, 0);.     
13130 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
13140 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44  geP1(v, addr, iD
13150 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
13160 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
13170 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20   addr+1, iDb);. 
13180 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13190 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72  ChangeP3(v, addr
131a0 2b 31 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20  +1, iCookie);.  
131b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
131c0 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
131d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
131e0 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
131f0 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
13200 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
13210 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d  RANSIENT);.    }
13220 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
13230 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
13240 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  MIT_SCHEMA_VERSI
13250 4f 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  ON_PRAGMAS */..#
13260 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
13270 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
13280 5f 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a  _DIAGS.  /*.  **
13290 20 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c     PRAGMA compil
132a0 65 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20  e_options.  **. 
132b0 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
132c0 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70  ames of all comp
132d0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
132e0 20 75 73 65 64 20 69 6e 20 74 68 69 73 20 62 75   used in this bu
132f0 69 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70  ild,.  ** one op
13300 74 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20  tion per row..  
13310 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
13320 70 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  p_COMPILE_OPTION
13330 53 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d  S: {.    int i =
13340 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   0;.    const ch
13350 61 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 73 71  ar *zOpt;.    sq
13360 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
13370 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 70  ols(v, 1);.    p
13380 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b  Parse->nMem = 1;
13390 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
133a0 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
133b0 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
133c0 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22 2c  compile_option",
133d0 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
133e0 0a 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f 70  .    while( (zOp
133f0 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  t = sqlite3_comp
13400 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 2b  ileoption_get(i+
13410 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  +))!=0 ){.      
13420 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
13430 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
13440 20 30 2c 20 31 2c 20 30 2c 20 7a 4f 70 74 2c 20   0, 1, 0, zOpt, 
13450 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
13460 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
13470 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
13480 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1);.    }.  }.  
13490 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
134a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
134b0 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
134c0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
134d0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f  ITE_OMIT_WAL.  /
134e0 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
134f0 5b 64 61 74 61 62 61 73 65 2e 5d 77 61 6c 5f 63  [database.]wal_c
13500 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73 73  heckpoint = pass
13510 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72 74  ive|full|restart
13520 7c 74 72 75 6e 63 61 74 65 0a 20 20 2a 2a 0a 20  |truncate.  **. 
13530 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 74   ** Checkpoint t
13540 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a  he database..  *
13550 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
13560 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a  _WAL_CHECKPOINT:
13570 20 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20 3d   {.    int iBt =
13580 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51   (pId2->z?iDb:SQ
13590 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
135a0 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  D);.    int eMod
135b0 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b  e = SQLITE_CHECK
135c0 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20  POINT_PASSIVE;. 
135d0 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
135e0 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
135f0 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
13600 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  , "full")==0 ){.
13610 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
13620 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
13630 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65  T_FULL;.      }e
13640 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
13650 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
13660 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a  restart")==0 ){.
13670 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
13680 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
13690 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20 20  T_RESTART;.     
136a0 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
136b0 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
136c0 2c 20 22 74 72 75 6e 63 61 74 65 22 29 3d 3d 30  , "truncate")==0
136d0 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64   ){.        eMod
136e0 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b  e = SQLITE_CHECK
136f0 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 3b 0a  POINT_TRUNCATE;.
13700 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
13710 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
13720 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20  NumCols(v, 3);. 
13730 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
13740 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 3;.    sqlite3
13750 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
13760 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
13770 45 2c 20 22 62 75 73 79 22 2c 20 53 51 4c 49 54  E, "busy", SQLIT
13780 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
13790 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
137a0 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
137b0 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 67 22 2c 20  ME_NAME, "log", 
137c0 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
137d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
137e0 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
137f0 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
13800 68 65 63 6b 70 6f 69 6e 74 65 64 22 2c 20 53 51  heckpointed", SQ
13810 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20  LITE_STATIC);.. 
13820 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
13830 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b  dOp3(v, OP_Check
13840 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64  point, iBt, eMod
13850 65 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  e, 1);.    sqlit
13860 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
13870 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
13880 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   3);.  }.  break
13890 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  ;..  /*.  **   P
138a0 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68  RAGMA wal_autoch
138b0 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20  eckpoint.  **   
138c0 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63  PRAGMA wal_autoc
138d0 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20  heckpoint = N.  
138e0 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72  **.  ** Configur
138f0 65 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e a database con
13900 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d  nection to autom
13910 61 74 69 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f  atically checkpo
13920 69 6e 74 20 61 20 64 61 74 61 62 61 73 65 0a 20  int a database. 
13930 20 2a 2a 20 61 66 74 65 72 20 61 63 63 75 6d 75   ** after accumu
13940 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d 65 73 20  lating N frames 
13950 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71  in the log. Or q
13960 75 65 72 79 20 66 6f 72 20 74 68 65 20 63 75 72  uery for the cur
13970 72 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20  rent value.  ** 
13980 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  of N..  */.  cas
13990 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55  e PragTyp_WAL_AU
139a0 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a  TOCHECKPOINT: {.
139b0 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
139c0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
139d0 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
139e0 6e 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74  nt(db, sqlite3At
139f0 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
13a00 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
13a10 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
13a20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
13a30 6e 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d  nt", .       db-
13a40 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73  >xWalCallback==s
13a50 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
13a60 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20  Hook ? .        
13a70 20 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f     SQLITE_PTR_TO
13a80 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67  _INT(db->pWalArg
13a90 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  ) : 0);.  }.  br
13aa0 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  eak;.#endif..  /
13ab0 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73  *.  **  PRAGMA s
13ac0 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a  hrink_memory.  *
13ad0 2a 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 61 67  *.  ** This prag
13ae0 6d 61 20 61 74 74 65 6d 70 74 73 20 74 6f 20 66  ma attempts to f
13af0 72 65 65 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f  ree as much memo
13b00 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20 66  ry as possible f
13b10 72 6f 6d 20 74 68 65 0a 20 20 2a 2a 20 63 75 72  rom the.  ** cur
13b20 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f  rent database co
13b30 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20  nnection..  */. 
13b40 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 48   case PragTyp_SH
13b50 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20  RINK_MEMORY: {. 
13b60 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65     sqlite3_db_re
13b70 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29  lease_memory(db)
13b80 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
13b90 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
13ba0 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75  AGMA busy_timeou
13bb0 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  t.  **   PRAGMA 
13bc0 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e  busy_timeout = N
13bd0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20  .  **.  ** Call 
13be0 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
13bf0 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20 20 52 65  eout(db, N).  Re
13c00 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
13c10 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20   timeout value. 
13c20 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73 20 73 65   ** if one is se
13c30 74 2e 20 20 49 66 20 6e 6f 20 62 75 73 79 20 68  t.  If no busy h
13c40 61 6e 64 6c 65 72 20 6f 72 20 61 20 64 69 66 66  andler or a diff
13c50 65 72 65 6e 74 20 62 75 73 79 20 68 61 6e 64 6c  erent busy handl
13c60 65 72 20 69 73 20 73 65 74 0a 20 20 2a 2a 20 74  er is set.  ** t
13c70 68 65 6e 20 30 20 69 73 20 72 65 74 75 72 6e 65  hen 0 is returne
13c80 64 2e 20 20 53 65 74 74 69 6e 67 20 74 68 65 20  d.  Setting the 
13c90 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20  busy_timeout to 
13ca0 30 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20  0 or negative.  
13cb0 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  ** disables the 
13cc0 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20  timeout..  */.  
13cd0 2f 2a 63 61 73 65 20 50 72 61 67 54 79 70 5f 42  /*case PragTyp_B
13ce0 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65  USY_TIMEOUT*/ de
13cf0 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73  fault: {.    ass
13d00 65 72 74 28 20 61 50 72 61 67 6d 61 4e 61 6d 65  ert( aPragmaName
13d10 73 5b 6d 69 64 5d 2e 65 50 72 61 67 54 79 70 3d  s[mid].ePragTyp=
13d20 3d 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49  =PragTyp_BUSY_TI
13d30 4d 45 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28  MEOUT );.    if(
13d40 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
13d50 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
13d60 6d 65 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65  meout(db, sqlite
13d70 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
13d80 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
13d90 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
13da0 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20 20 64 62  , "timeout",  db
13db0 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a  ->busyTimeout);.
13dc0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
13dd0 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
13de0 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  MA soft_heap_lim
13df0 69 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  it.  **   PRAGMA
13e00 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74   soft_heap_limit
13e10 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43   = N.  **.  ** C
13e20 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 6f 66 74  all sqlite3_soft
13e30 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29  _heap_limit64(N)
13e40 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  .  Return the re
13e50 73 75 6c 74 2e 20 20 49 66 20 4e 20 69 73 20 6f  sult.  If N is o
13e60 6d 69 74 74 65 64 2c 0a 20 20 2a 2a 20 75 73 65  mitted,.  ** use
13e70 20 2d 31 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65   -1..  */.  case
13e80 20 50 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45   PragTyp_SOFT_HE
13e90 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20  AP_LIMIT: {.    
13ea0 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b  sqlite3_int64 N;
13eb0 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
13ec0 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  && sqlite3DecOrH
13ed0 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
13ee0 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  &N)==SQLITE_OK )
13ef0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
13f00 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36  soft_heap_limit6
13f10 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4(N);.    }.    
13f20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
13f30 70 50 61 72 73 65 2c 20 22 73 6f 66 74 5f 68 65  pParse, "soft_he
13f40 61 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69  ap_limit",  sqli
13f50 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
13f60 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20 20 20 20  mit64(-1));.    
13f70 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
13f80 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
13f90 68 72 65 61 64 73 0a 20 20 2a 2a 20 20 20 50 52  hreads.  **   PR
13fa0 41 47 4d 41 20 74 68 72 65 61 64 73 20 3d 20 4e  AGMA threads = N
13fb0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69  .  **.  ** Confi
13fc0 67 75 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  gure the maximum
13fd0 20 6e 75 6d 62 65 72 20 6f 66 20 77 6f 72 6b 65   number of worke
13fe0 72 20 74 68 72 65 61 64 73 2e 20 20 52 65 74 75  r threads.  Retu
13ff0 72 6e 20 74 68 65 20 6e 65 77 0a 20 20 2a 2a 20  rn the new.  ** 
14000 6d 61 78 69 6d 75 6d 2c 20 77 68 69 63 68 20 6d  maximum, which m
14010 69 67 68 74 20 62 65 20 6c 65 73 73 20 74 68 61  ight be less tha
14020 6e 20 72 65 71 75 65 73 74 65 64 2e 0a 20 20 2a  n requested..  *
14030 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
14040 5f 54 48 52 45 41 44 53 3a 20 7b 0a 20 20 20 20  _THREADS: {.    
14050 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b  sqlite3_int64 N;
14060 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 0a  .    if( zRight.
14070 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 44       && sqlite3D
14080 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69  ecOrHexToI64(zRi
14090 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45  ght, &N)==SQLITE
140a0 5f 4f 4b 0a 20 20 20 20 20 26 26 20 4e 3e 3d 30  _OK.     && N>=0
140b0 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 73 71  .    ){.      sq
140c0 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20  lite3_limit(db, 
140d0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
140e0 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 28 69 6e  KER_THREADS, (in
140f0 74 29 28 4e 26 30 78 37 66 66 66 66 66 66 66 29  t)(N&0x7fffffff)
14100 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
14110 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
14120 72 73 65 2c 20 22 74 68 72 65 61 64 73 22 2c 0a  rse, "threads",.
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14140 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69      sqlite3_limi
14150 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d  t(db, SQLITE_LIM
14160 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
14170 53 2c 20 2d 31 29 29 3b 0a 20 20 20 20 62 72 65  S, -1));.    bre
14180 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66  ak;.  }..#if def
14190 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
141a0 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
141b0 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a  LITE_TEST).  /*.
141c0 20 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20    ** Report the 
141d0 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66  current state of
141e0 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61   file logs for a
141f0 6c 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a  ll databases.  *
14200 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
14210 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a  _LOCK_STATUS: {.
14220 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
14230 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c   char *const azL
14240 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20  ockName[] = {.  
14250 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20      "unlocked", 
14260 22 73 68 61 72 65 64 22 2c 20 22 72 65 73 65 72  "shared", "reser
14270 76 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c  ved", "pending",
14280 20 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20   "exclusive".   
14290 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   };.    int i;. 
142a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
142b0 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a  tNumCols(v, 2);.
142c0 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
142d0 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
142e0 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
142f0 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
14300 4d 45 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20  ME, "database", 
14310 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
14320 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
14330 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
14340 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
14350 74 61 74 75 73 22 2c 20 53 51 4c 49 54 45 5f 53  tatus", SQLITE_S
14360 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
14370 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
14380 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65  i++){.      Btre
14390 65 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f  e *pBt;.      co
143a0 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65  nst char *zState
143b0 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20   = "unknown";.  
143c0 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20      int j;.     
143d0 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
143e0 7a 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69  zName==0 ) conti
143f0 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
14400 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
14410 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
14420 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  , 0, db->aDb[i].
14430 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43  zName, P4_STATIC
14440 29 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64  );.      pBt = d
14450 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20  b->aDb[i].pBt;. 
14460 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20       if( pBt==0 
14470 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  || sqlite3BtreeP
14480 61 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a  ager(pBt)==0 ){.
14490 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d          zState =
144a0 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20   "closed";.     
144b0 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
144c0 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
144d0 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b  db, i ? db->aDb[
144e0 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20  i].zName : 0, . 
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14510 20 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c      SQLITE_FCNTL
14520 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d  _LOCKSTATE, &j)=
14530 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
14540 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
14550 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20  azLockName[j];. 
14560 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
14570 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
14580 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
14590 20 32 2c 20 30 2c 20 7a 53 74 61 74 65 2c 20 50   2, 0, zState, P
145a0 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
145b0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
145c0 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
145d0 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d  ow, 1, 2);.    }
145e0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
145f0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
14600 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
14610 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b    case PragTyp_K
14620 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
14630 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b  ight ) sqlite3_k
14640 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a  ey_v2(db, zDb, z
14650 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74  Right, sqlite3St
14660 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b  rlen30(zRight));
14670 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
14680 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 52    case PragTyp_R
14690 45 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20  EKEY: {.    if( 
146a0 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33  zRight ) sqlite3
146b0 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44  _rekey_v2(db, zD
146c0 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74  b, zRight, sqlit
146d0 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68  e3Strlen30(zRigh
146e0 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  t));.    break;.
146f0 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54    }.  case PragT
14700 79 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20  yp_HEXKEY: {.   
14710 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
14720 20 20 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20       u8 iByte;. 
14730 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
14740 20 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b    char zKey[40];
14750 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20  .      for(i=0, 
14760 69 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f  iByte=0; i<sizeo
14770 66 28 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c  f(zKey)*2 && sql
14780 69 74 65 33 49 73 78 64 69 67 69 74 28 7a 52 69  ite3Isxdigit(zRi
14790 67 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20  ght[i]); i++){. 
147a0 20 20 20 20 20 20 20 69 42 79 74 65 20 3d 20 28         iByte = (
147b0 69 42 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69  iByte<<4) + sqli
147c0 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67  te3HexToInt(zRig
147d0 68 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  ht[i]);.        
147e0 69 66 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a  if( (i&1)!=0 ) z
147f0 4b 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65  Key[i/2] = iByte
14800 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
14810 69 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20  if( (zLeft[3] & 
14820 30 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20  0xf)==0xb ){.   
14830 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79       sqlite3_key
14840 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65  _v2(db, zDb, zKe
14850 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d  y, i/2);.      }
14860 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
14870 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64  lite3_rekey_v2(d
14880 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f  b, zDb, zKey, i/
14890 32 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  2);.      }.    
148a0 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
148b0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
148c0 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43  ned(SQLITE_HAS_C
148d0 4f 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64  ODEC) || defined
148e0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43  (SQLITE_ENABLE_C
148f0 45 52 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61  EROD).  case Pra
14900 67 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58  gTyp_ACTIVATE_EX
14910 54 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52  TENSIONS: if( zR
14920 69 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53  ight ){.#ifdef S
14930 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
14940 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
14950 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  trNICmp(zRight, 
14960 22 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b  "see-", 4)==0 ){
14970 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61  .      sqlite3_a
14980 63 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69  ctivate_see(&zRi
14990 67 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23  ght[4]);.    }.#
149a0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
149b0 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44  ITE_ENABLE_CEROD
149c0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
149d0 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c  StrNICmp(zRight,
149e0 20 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30   "cerod-", 6)==0
149f0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
14a00 33 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64  3_activate_cerod
14a10 28 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20  (&zRight[6]);.  
14a20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
14a30 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a   break;.#endif..
14a40 20 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68    } /* End of th
14a50 65 20 50 52 41 47 4d 41 20 73 77 69 74 63 68 20  e PRAGMA switch 
14a60 2a 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a  */..pragma_out:.
14a70 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
14a80 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71  db, zLeft);.  sq
14a90 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
14aa0 7a 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64  zRight);.}..#end
14ab0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
14ac0 54 5f 50 52 41 47 4d 41 20 2a 2f 0a              T_PRAGMA */.