/ Hex Artifact Content
Login

Artifact 4865f1a42ce4eee35a4f6de290387f2fd9bd8e50:


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 73 74 61 74 69        0x01.stati
0c30: 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73  c const struct s
0c40: 50 72 61 67 6d 61 4e 61 6d 65 73 20 7b 0a 20 20  PragmaNames {.  
0c50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
0c60: 74 20 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d  t zName;  /* Nam
0c70: 65 20 6f 66 20 70 72 61 67 6d 61 20 2a 2f 0a 20  e of pragma */. 
0c80: 20 75 38 20 65 50 72 61 67 54 79 70 3b 20 20 20   u8 ePragTyp;   
0c90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
0ca0: 61 67 54 79 70 5f 58 58 58 20 76 61 6c 75 65 20  agTyp_XXX value 
0cb0: 2a 2f 0a 20 20 75 38 20 6d 50 72 61 67 46 6c 61  */.  u8 mPragFla
0cc0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
0cd0: 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 50  * Zero or more P
0ce0: 72 61 67 46 6c 61 67 5f 58 58 58 20 76 61 6c 75  ragFlag_XXX valu
0cf0: 65 73 20 2a 2f 0a 20 20 75 33 32 20 69 41 72 67  es */.  u32 iArg
0d00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
0d10: 20 20 2f 2a 20 45 78 74 72 61 20 61 72 67 75 6d    /* Extra argum
0d20: 65 6e 74 20 2a 2f 0a 7d 20 61 50 72 61 67 6d 61  ent */.} aPragma
0d30: 4e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 23 69 66 20  Names[] = {.#if 
0d40: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
0d50: 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66  AS_CODEC) || def
0d60: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
0d70: 4c 45 5f 43 45 52 4f 44 29 0a 20 20 7b 20 2f 2a  LE_CEROD).  { /*
0d80: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
0d90: 61 63 74 69 76 61 74 65 5f 65 78 74 65 6e 73 69  activate_extensi
0da0: 6f 6e 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ons",.    /* ePr
0db0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
0dc0: 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45  yp_ACTIVATE_EXTE
0dd0: 4e 53 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20 65  NSIONS,.    /* e
0de0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
0df0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
0e00: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
0e10: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
0e20: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
0e30: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
0e40: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
0e50: 20 20 20 20 2a 2f 20 22 61 70 70 6c 69 63 61 74      */ "applicat
0e60: 69 6f 6e 5f 69 64 22 2c 0a 20 20 20 20 2f 2a 20  ion_id",.    /* 
0e70: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
0e80: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
0e90: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
0ea0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
0eb0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
0ec0: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
0ed0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
0ee0: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
0ef0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
0f00: 20 20 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63      */ "auto_vac
0f10: 75 75 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  uum",.    /* ePr
0f20: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
0f30: 79 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a  yp_AUTO_VACUUM,.
0f40: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
0f50: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
0f60: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
0f70: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
0f80: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
0f90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0fa0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
0fb0: 29 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ).#if !defined(S
0fc0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d  QLITE_OMIT_AUTOM
0fd0: 41 54 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b 20  ATIC_INDEX).  { 
0fe0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
0ff0: 20 22 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65   "automatic_inde
1000: 78 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  x",.    /* ePrag
1010: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1020: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
1030: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
1040: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1050: 20 2a 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f 49   */ SQLITE_AutoI
1060: 6e 64 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  ndex },.#endif.#
1070: 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61  endif.  { /* zNa
1080: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79  me:     */ "busy
1090: 5f 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f  _timeout",.    /
10a0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
10b0: 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d  PragTyp_BUSY_TIM
10c0: 45 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  EOUT,.    /* ePr
10d0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
10e0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
10f0: 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66  */ 0 },.#if !def
1100: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1110: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a  _PAGER_PRAGMAS).
1120: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1130: 20 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65    */ "cache_size
1140: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1150: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
1160: 43 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20  CACHE_SIZE,.    
1170: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1180: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
1190: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
11a0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
11b0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
11c0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
11d0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20  FLAG_PRAGMAS).  
11e0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
11f0: 2a 2f 20 22 63 61 63 68 65 5f 73 70 69 6c 6c 22  */ "cache_spill"
1200: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1210: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
1220: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
1230: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
1240: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1250: 2f 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  / SQLITE_CacheSp
1260: 69 6c 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20  ill },.#endif.  
1270: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1280: 2a 2f 20 22 63 61 73 65 5f 73 65 6e 73 69 74 69  */ "case_sensiti
1290: 76 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f 2a  ve_like",.    /*
12a0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
12b0: 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53  ragTyp_CASE_SENS
12c0: 49 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20 20  ITIVE_LIKE,.    
12d0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
12e0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
12f0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69        */ 0 },.#i
1300: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1310: 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
1320: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
1330: 65 3a 20 20 20 20 20 2a 2f 20 22 63 68 65 63 6b  e:     */ "check
1340: 70 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63 22  point_fullfsync"
1350: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1360: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
1370: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
1380: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
1390: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
13a0: 2f 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  / SQLITE_CkptFul
13b0: 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66  lFSync },.#endif
13c0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13d0: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
13e0: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
13f0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1400: 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22 2c  collation_list",
1410: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1420: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f  :  */ PragTyp_CO
1430: 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20 20  LLATION_LIST,.  
1440: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
1450: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
1460: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
1470: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
1480: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1490: 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
14a0: 41 47 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  AGS).  { /* zNam
14b0: 65 3a 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70 69  e:     */ "compi
14c0: 6c 65 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20 20  le_options",.   
14d0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
14e0: 2f 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c  / PragTyp_COMPIL
14f0: 45 5f 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20 2f  E_OPTIONS,.    /
1500: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1510: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1520: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
1530: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1540: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41  (SQLITE_OMIT_FLA
1550: 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  G_PRAGMAS).  { /
1560: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
1570: 22 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c  "count_changes",
1580: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1590: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
15a0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
15b0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
15c0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
15d0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
15e0: 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  s },.#endif.#if 
15f0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1600: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
1610: 41 53 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53  AS) && SQLITE_OS
1620: 5f 57 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  _WIN.  { /* zNam
1630: 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61 5f  e:     */ "data_
1640: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22  store_directory"
1650: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1660: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44  p:  */ PragTyp_D
1670: 41 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54  ATA_STORE_DIRECT
1680: 4f 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ORY,.    /* ePra
1690: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
16a0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
16b0: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
16c0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
16d0: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
16e0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
16f0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74  ame:     */ "dat
1700: 61 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20  abase_list",.   
1710: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1720: 2f 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41  / PragTyp_DATABA
1730: 53 45 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a 20  SE_LIST,.    /* 
1740: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
1750: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
1760: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
1770: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
1780: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1790: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
17a0: 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21  ER_PRAGMAS) && !
17b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
17c0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a  MIT_DEPRECATED).
17d0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
17e0: 20 20 2a 2f 20 22 64 65 66 61 75 6c 74 5f 63 61    */ "default_ca
17f0: 63 68 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f  che_size",.    /
1800: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1810: 50 72 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f  PragTyp_DEFAULT_
1820: 43 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20  CACHE_SIZE,.    
1830: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1840: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
1850: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
1860: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
1870: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
1880: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1890: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69  FLAG_PRAGMAS).#i
18a0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
18b0: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
18c0: 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
18d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
18e0: 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  GER).  { /* zNam
18f0: 65 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65 72  e:     */ "defer
1900: 5f 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a  _foreign_keys",.
1910: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1920: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1930: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1940: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1950: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1960: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
1970: 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  },.#endif.#endif
1980: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1990: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
19a0: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
19b0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65 6d  Name:     */ "em
19c0: 70 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62  pty_result_callb
19d0: 61 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50  acks",.    /* eP
19e0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
19f0: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
1a00: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1a10: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1a20: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e 75      */ SQLITE_Nu
1a30: 6c 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23 65  llCallback },.#e
1a40: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1a50: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  d(SQLITE_OMIT_UT
1a60: 46 31 36 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  F16).  { /* zNam
1a70: 65 3a 20 20 20 20 20 2a 2f 20 22 65 6e 63 6f 64  e:     */ "encod
1a80: 69 6e 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ing",.    /* ePr
1a90: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1aa0: 79 70 5f 45 4e 43 4f 44 49 4e 47 2c 0a 20 20 20  yp_ENCODING,.   
1ab0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1ac0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
1ad0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1ae0: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1af0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
1b00: 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
1b10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1b20: 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 7b  MIT_TRIGGER).  {
1b30: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1b40: 2f 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  / "foreign_key_c
1b50: 68 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65 50  heck",.    /* eP
1b60: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1b70: 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f  Typ_FOREIGN_KEY_
1b80: 43 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50  CHECK,.    /* eP
1b90: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67  ragFlag: */ Prag
1ba0: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c  Flag_NeedSchema,
1bb0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
1bc0: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
1bd0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
1be0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
1bf0: 47 4e 5f 4b 45 59 29 0a 20 20 7b 20 2f 2a 20 7a  GN_KEY).  { /* z
1c00: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f  Name:     */ "fo
1c10: 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 2c  reign_key_list",
1c20: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1c30: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f  :  */ PragTyp_FO
1c40: 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 2c 0a  REIGN_KEY_LIST,.
1c50: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1c60: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
1c70: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
1c80: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
1c90: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
1ca0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1cb0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
1cc0: 29 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ).#if !defined(S
1cd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
1ce0: 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
1cf0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1d00: 54 52 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20  TRIGGER).  { /* 
1d10: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66  zName:     */ "f
1d20: 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20 20  oreign_keys",.  
1d30: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1d40: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
1d50: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1d60: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
1d70: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
1d80: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
1d90: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69   },.#endif.#endi
1da0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
1db0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
1dc0: 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
1dd0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
1de0: 20 20 20 20 20 2a 2f 20 22 66 72 65 65 6c 69 73       */ "freelis
1df0: 74 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a  t_count",.    /*
1e00: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1e10: 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41  ragTyp_HEADER_VA
1e20: 4c 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LUE,.    /* ePra
1e30: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
1e40: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1e50: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
1e60: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1e70: 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
1e80: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
1e90: 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 5f  e:     */ "full_
1ea0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20  column_names",. 
1eb0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1ec0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
1ed0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1ee0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1ef0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1f00: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
1f10: 65 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61  es },.  { /* zNa
1f20: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c  me:     */ "full
1f30: 66 73 79 6e 63 22 2c 0a 20 20 20 20 2f 2a 20 65  fsync",.    /* e
1f40: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1f50: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
1f60: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1f70: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1f80: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46       */ SQLITE_F
1f90: 75 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64  ullFSync },.#end
1fa0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
1fb0: 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29  QLITE_HAS_CODEC)
1fc0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1fd0: 20 20 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a     */ "hexkey",.
1fe0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1ff0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 58    */ PragTyp_HEX
2000: 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  KEY,.    /* ePra
2010: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
2020: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2030: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2040: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 68 65 78  ame:     */ "hex
2050: 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65  rekey",.    /* e
2060: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2070: 67 54 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20  gTyp_HEXKEY,.   
2080: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2090: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
20a0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
20b0: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
20c0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
20d0: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66  LAG_PRAGMAS).#if
20e0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
20f0: 5f 4f 4d 49 54 5f 43 48 45 43 4b 29 0a 20 20 7b  _OMIT_CHECK).  {
2100: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2110: 2f 20 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f  / "ignore_check_
2120: 63 6f 6e 73 74 72 61 69 6e 74 73 22 2c 0a 20 20  constraints",.  
2130: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2140: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
2150: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2160: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2170: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
2180: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
2190: 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64  s },.#endif.#end
21a0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
21b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
21c0: 56 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20 7a  VACUUM).  { /* z
21d0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
21e0: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
21f0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2200: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2210: 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55  INCREMENTAL_VACU
2220: 55 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UM,.    /* ePrag
2230: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
2240: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
2250: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2260: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2270: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2280: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
2290: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
22a0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
22b0: 64 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f  dex_info",.    /
22c0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
22d0: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e  PragTyp_INDEX_IN
22e0: 46 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  FO,.    /* ePrag
22f0: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
2300: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
2310: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2320: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
2330: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
2340: 64 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f  dex_list",.    /
2350: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2360: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49  PragTyp_INDEX_LI
2370: 53 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  ST,.    /* ePrag
2380: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
2390: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
23a0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
23b0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
23c0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
23d0: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
23e0: 59 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20  Y_CHECK).  { /* 
23f0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
2400: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c  ntegrity_check",
2410: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2420: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e  :  */ PragTyp_IN
2430: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20  TEGRITY_CHECK,. 
2440: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2450: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
2460: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
2470: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2480: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
2490: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
24a0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
24b0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
24c0: 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f      */ "journal_
24d0: 6d 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  mode",.    /* eP
24e0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
24f0: 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45  Typ_JOURNAL_MODE
2500: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2510: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
2520: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
2530: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2540: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
2550: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72  me:     */ "jour
2560: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c  nal_size_limit",
2570: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2580: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f  :  */ PragTyp_JO
2590: 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54  URNAL_SIZE_LIMIT
25a0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
25b0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
25c0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
25d0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64   },.#endif.#if d
25e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
25f0: 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20  S_CODEC).  { /* 
2600: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6b  zName:     */ "k
2610: 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ey",.    /* ePra
2620: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2630: 70 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50  p_KEY,.    /* eP
2640: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2650: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2660: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
2670: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2680: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
2690: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
26a0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 65 67  ame:     */ "leg
26b0: 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 22  acy_file_format"
26c0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
26d0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
26e0: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
26f0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
2700: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2710: 2f 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  / SQLITE_LegacyF
2720: 69 6c 65 46 6d 74 20 7d 2c 0a 23 65 6e 64 69 66  ileFmt },.#endif
2730: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2740: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
2750: 50 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c 49  PRAGMAS) && SQLI
2760: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
2770: 47 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a 20 7a  G_STYLE.  { /* z
2780: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f  Name:     */ "lo
2790: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 0a  ck_proxy_file",.
27a0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
27b0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43    */ PragTyp_LOC
27c0: 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a 20 20  K_PROXY_FILE,.  
27d0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
27e0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
27f0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
2800: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
2810: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2820: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2830: 54 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f 2a 20  TE_TEST).  { /* 
2840: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c  zName:     */ "l
2850: 6f 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20 20 20  ock_status",.   
2860: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2870: 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53  / PragTyp_LOCK_S
2880: 54 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20 65 50  TATUS,.    /* eP
2890: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
28a0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
28b0: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
28c0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
28d0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
28e0: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
28f0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f  Name:     */ "lo
2900: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20 20  cking_mode",.   
2910: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2920: 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e  / PragTyp_LOCKIN
2930: 47 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a 20 65  G_MODE,.    /* e
2940: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
2950: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2960: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
2970: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2980: 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 22 2c  max_page_count",
2990: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
29a0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41  :  */ PragTyp_PA
29b0: 47 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a  GE_COUNT,.    /*
29c0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
29d0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
29e0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
29f0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20        */ 0 },.  
2a00: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2a10: 2a 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 0a  */ "mmap_size",.
2a20: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2a30: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d 4d 41    */ PragTyp_MMA
2a40: 50 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65  P_SIZE,.    /* e
2a50: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
2a60: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2a70: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
2a80: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2a90: 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20 20 20  page_count",.   
2aa0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2ab0: 2f 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43  / PragTyp_PAGE_C
2ac0: 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  OUNT,.    /* ePr
2ad0: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
2ae0: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
2af0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2b00: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
2b10: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2b20: 70 61 67 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20  page_size",.    
2b30: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2b40: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49   PragTyp_PAGE_SI
2b50: 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  ZE,.    /* ePrag
2b60: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2b70: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2b80: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
2b90: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2ba0: 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e  DEBUG).  { /* zN
2bb0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 72  ame:     */ "par
2bc0: 73 65 72 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  ser_trace",.    
2bd0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2be0: 20 50 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f   PragTyp_PARSER_
2bf0: 54 52 41 43 45 2c 0a 20 20 20 20 2f 2a 20 65 50  TRACE,.    /* eP
2c00: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2c10: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2c20: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
2c30: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2c40: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
2c50: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
2c60: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 71 75 65  ame:     */ "que
2c70: 72 79 5f 6f 6e 6c 79 22 2c 0a 20 20 20 20 2f 2a  ry_only",.    /*
2c80: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2c90: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
2ca0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2cb0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
2cc0: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
2cd0: 5f 51 75 65 72 79 4f 6e 6c 79 20 7d 2c 0a 23 65  _QueryOnly },.#e
2ce0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
2cf0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  d(SQLITE_OMIT_IN
2d00: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 29 0a 20  TEGRITY_CHECK). 
2d10: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
2d20: 20 2a 2f 20 22 71 75 69 63 6b 5f 63 68 65 63 6b   */ "quick_check
2d30: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2d40: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2d50: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c  INTEGRITY_CHECK,
2d60: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2d70: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
2d80: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2d90: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2da0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2db0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2dc0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
2dd0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
2de0: 20 20 20 20 20 2a 2f 20 22 72 65 61 64 5f 75 6e       */ "read_un
2df0: 63 6f 6d 6d 69 74 74 65 64 22 2c 0a 20 20 20 20  committed",.    
2e00: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2e10: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
2e20: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2e30: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2e40: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
2e50: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
2e60: 65 64 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61  ed },.  { /* zNa
2e70: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 63 75  me:     */ "recu
2e80: 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 2c  rsive_triggers",
2e90: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2ea0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
2eb0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
2ec0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2ed0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2ee0: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
2ef0: 65 72 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  ers },.#endif.#i
2f00: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2f10: 5f 48 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20  _HAS_CODEC).  { 
2f20: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2f30: 20 22 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a   "rekey",.    /*
2f40: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2f50: 72 61 67 54 79 70 5f 52 45 4b 45 59 2c 0a 20 20  ragTyp_REKEY,.  
2f60: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2f70: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
2f80: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
2f90: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
2fa0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2fb0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20  FLAG_PRAGMAS).  
2fc0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2fd0: 2a 2f 20 22 72 65 76 65 72 73 65 5f 75 6e 6f 72  */ "reverse_unor
2fe0: 64 65 72 65 64 5f 73 65 6c 65 63 74 73 22 2c 0a  dered_selects",.
2ff0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3000: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
3010: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
3020: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3030: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3040: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
3050: 64 65 72 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  der },.#endif.#i
3060: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3070: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45  E_OMIT_SCHEMA_VE
3080: 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20  RSION_PRAGMAS). 
3090: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
30a0: 20 2a 2f 20 22 73 63 68 65 6d 61 5f 76 65 72 73   */ "schema_vers
30b0: 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ion",.    /* ePr
30c0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
30d0: 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c  yp_HEADER_VALUE,
30e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
30f0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3100: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
3110: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
3120: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3130: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3140: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
3150: 20 20 20 20 2a 2f 20 22 73 65 63 75 72 65 5f 64      */ "secure_d
3160: 65 6c 65 74 65 22 2c 0a 20 20 20 20 2f 2a 20 65  elete",.    /* e
3170: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3180: 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45  gTyp_SECURE_DELE
3190: 54 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  TE,.    /* ePrag
31a0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
31b0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
31c0: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
31d0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
31e0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
31f0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
3200: 3a 20 20 20 20 20 2a 2f 20 22 73 68 6f 72 74 5f  :     */ "short_
3210: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20  column_names",. 
3220: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3230: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
3240: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3250: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3260: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
3270: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
3280: 6d 65 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20  mes },.#endif.  
3290: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
32a0: 2a 2f 20 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72  */ "shrink_memor
32b0: 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  y",.    /* ePrag
32c0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
32d0: 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 2c 0a  _SHRINK_MEMORY,.
32e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
32f0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3300: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
3310: 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ,.  { /* zName: 
3320: 20 20 20 20 2a 2f 20 22 73 6f 66 74 5f 68 65 61      */ "soft_hea
3330: 70 5f 6c 69 6d 69 74 22 2c 0a 20 20 20 20 2f 2a  p_limit",.    /*
3340: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3350: 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50  ragTyp_SOFT_HEAP
3360: 5f 4c 49 4d 49 54 2c 0a 20 20 20 20 2f 2a 20 65  _LIMIT,.    /* e
3370: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3380: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3390: 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64    */ 0 },.#if !d
33a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
33b0: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
33c0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
33d0: 49 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f  ITE_DEBUG).  { /
33e0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
33f0: 22 73 71 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20  "sql_trace",.   
3400: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3410: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
3420: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3430: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3440: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
3450: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 7d 2c 0a  ITE_SqlTrace },.
3460: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69  #endif.#endif.#i
3470: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3480: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
3490: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
34a0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 74 61  ame:     */ "sta
34b0: 74 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ts",.    /* ePra
34c0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
34d0: 70 5f 53 54 41 54 53 2c 0a 20 20 20 20 2f 2a 20  p_STATS,.    /* 
34e0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
34f0: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3500: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
3510: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3520: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
3530: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
3540: 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  ER_PRAGMAS).  { 
3550: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3560: 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a   "synchronous",.
3570: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3580: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 59 4e    */ PragTyp_SYN
3590: 43 48 52 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a  CHRONOUS,.    /*
35a0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
35b0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
35c0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
35d0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
35e0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
35f0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  d(SQLITE_OMIT_SC
3600: 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20  HEMA_PRAGMAS).  
3610: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3620: 2a 2f 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c  */ "table_info",
3630: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3640: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 41  :  */ PragTyp_TA
3650: 42 4c 45 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a  BLE_INFO,.    /*
3660: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
3670: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
3680: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
3690: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
36a0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
36b0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
36c0: 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  GER_PRAGMAS).  {
36d0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
36e0: 2f 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a  / "temp_store",.
36f0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3700: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d    */ PragTyp_TEM
3710: 50 5f 53 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20  P_STORE,.    /* 
3720: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3730: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3740: 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f     */ 0 },.  { /
3750: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3760: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
3770: 63 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65  ctory",.    /* e
3780: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3790: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  gTyp_TEMP_STORE_
37a0: 44 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f  DIRECTORY,.    /
37b0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
37c0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
37d0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
37e0: 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  dif.  { /* zName
37f0: 3a 20 20 20 20 20 2a 2f 20 22 74 68 72 65 61 64  :     */ "thread
3800: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
3810: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3820: 5f 54 48 52 45 41 44 53 2c 0a 20 20 20 20 2f 2a  _THREADS,.    /*
3830: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3840: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3850: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20      */ 0 },.#if 
3860: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3870: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
3880: 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  ION_PRAGMAS).  {
3890: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
38a0: 2f 20 22 75 73 65 72 5f 76 65 72 73 69 6f 6e 22  / "user_version"
38b0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
38c0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48  p:  */ PragTyp_H
38d0: 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20 20  EADER_VALUE,.   
38e0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
38f0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3900: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
3910: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
3920: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
3930: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66  LAG_PRAGMAS).#if
3940: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3950: 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e  DEBUG).  { /* zN
3960: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62  ame:     */ "vdb
3970: 65 5f 61 64 64 6f 70 74 72 61 63 65 22 2c 0a 20  e_addoptrace",. 
3980: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3990: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
39a0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
39b0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
39c0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
39d0: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
39e0: 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  race },.  { /* z
39f0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64  Name:     */ "vd
3a00: 62 65 5f 64 65 62 75 67 22 2c 0a 20 20 20 20 2f  be_debug",.    /
3a10: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
3a20: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
3a30: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
3a40: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
3a50: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
3a60: 45 5f 53 71 6c 54 72 61 63 65 7c 53 51 4c 49 54  E_SqlTrace|SQLIT
3a70: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
3a80: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 7d  LITE_VdbeTrace }
3a90: 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ,.  { /* zName: 
3aa0: 20 20 20 20 2a 2f 20 22 76 64 62 65 5f 65 71 70      */ "vdbe_eqp
3ab0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3ac0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3ad0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
3ae0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3af0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3b00: 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  */ SQLITE_VdbeEQ
3b10: 50 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  P },.  { /* zNam
3b20: 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65 5f  e:     */ "vdbe_
3b30: 6c 69 73 74 69 6e 67 22 2c 0a 20 20 20 20 2f 2a  listing",.    /*
3b40: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3b50: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3b60: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3b70: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3b80: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3b90: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 7d 2c 0a  _VdbeListing },.
3ba0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3bb0: 20 20 2a 2f 20 22 76 64 62 65 5f 74 72 61 63 65    */ "vdbe_trace
3bc0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3bd0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3be0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
3bf0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3c00: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3c10: 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  */ SQLITE_VdbeTr
3c20: 61 63 65 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65  ace },.#endif.#e
3c30: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
3c40: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  d(SQLITE_OMIT_WA
3c50: 4c 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  L).  { /* zName:
3c60: 20 20 20 20 20 2a 2f 20 22 77 61 6c 5f 61 75 74       */ "wal_aut
3c70: 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20 20  ocheckpoint",.  
3c80: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3c90: 2a 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41  */ PragTyp_WAL_A
3ca0: 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 2c 0a 20  UTOCHECKPOINT,. 
3cb0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3cc0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3cd0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
3ce0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3cf0: 20 20 20 2a 2f 20 22 77 61 6c 5f 63 68 65 63 6b     */ "wal_check
3d00: 70 6f 69 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65  point",.    /* e
3d10: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3d20: 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f  gTyp_WAL_CHECKPO
3d30: 49 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  INT,.    /* ePra
3d40: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
3d50: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
3d60: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3d70: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
3d80: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3d90: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
3da0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
3db0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 72 69  ame:     */ "wri
3dc0: 74 61 62 6c 65 5f 73 63 68 65 6d 61 22 2c 0a 20  table_schema",. 
3dd0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3de0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
3df0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3e00: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3e10: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
3e20: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
3e30: 61 7c 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  a|SQLITE_Recover
3e40: 79 4d 6f 64 65 20 7d 2c 0a 23 65 6e 64 69 66 0a  yMode },.#endif.
3e50: 7d 3b 0a 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  };./* Number of 
3e60: 70 72 61 67 6d 61 73 3a 20 35 37 20 6f 6e 20 62  pragmas: 57 on b
3e70: 79 20 64 65 66 61 75 6c 74 2c 20 37 30 20 74 6f  y default, 70 to
3e80: 74 61 6c 2e 20 2a 2f 0a 2f 2a 20 45 6e 64 20 6f  tal. */./* End o
3e90: 66 20 74 68 65 20 61 75 74 6f 6d 61 74 69 63 61  f the automatica
3ea0: 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70 72  lly generated pr
3eb0: 61 67 6d 61 20 74 61 62 6c 65 2e 0a 2a 2a 2a 2a  agma table..****
3ec0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3ed0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3ee0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3ef0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3f00: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  *******/../*.** 
3f10: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
3f20: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
3f30: 73 61 66 65 74 79 20 6c 65 76 65 6c 2e 20 20 52  safety level.  R
3f40: 65 74 75 72 6e 20 30 20 66 6f 72 20 4f 46 46 2c  eturn 0 for OFF,
3f50: 0a 2a 2a 20 31 20 66 6f 72 20 4f 4e 20 6f 72 20  .** 1 for ON or 
3f60: 4e 4f 52 4d 41 4c 20 61 6e 64 20 32 20 66 6f 72  NORMAL and 2 for
3f70: 20 46 55 4c 4c 2e 20 20 52 65 74 75 72 6e 20 31   FULL.  Return 1
3f80: 20 66 6f 72 20 61 6e 20 65 6d 70 74 79 20 6f 72   for an empty or
3f90: 20 0a 2a 2a 20 75 6e 72 65 63 6f 67 6e 69 7a 65   .** unrecognize
3fa0: 64 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e  d string argumen
3fb0: 74 2e 20 20 54 68 65 20 46 55 4c 4c 20 6f 70 74  t.  The FULL opt
3fc0: 69 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77 65  ion is disallowe
3fd0: 64 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69 74  d.** if the omit
3fe0: 46 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20 69  Full parameter i
3ff0: 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  t 1..**.** Note 
4000: 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20  that the values 
4010: 72 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e 65  returned are one
4020: 20 6c 65 73 73 20 74 68 61 74 20 74 68 65 20 76   less that the v
4030: 61 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73 68  alues that.** sh
4040: 6f 75 6c 64 20 62 65 20 70 61 73 73 65 64 20 69  ould be passed i
4050: 6e 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65 65  nto sqlite3Btree
4060: 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 29  SetSafetyLevel()
4070: 2e 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a 2a  .  The is done.*
4080: 2a 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65 67  * to support leg
4090: 61 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20 54  acy SQL code.  T
40a0: 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c 20  he safety level 
40b0: 75 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c 65  used to be boole
40c0: 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72 20  an.** and older 
40d0: 73 63 72 69 70 74 73 20 6d 61 79 20 68 61 76 65  scripts may have
40e0: 20 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30 20   used numbers 0 
40f0: 66 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66 6f  for OFF and 1 fo
4100: 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  r ON..*/.static 
4110: 75 38 20 67 65 74 53 61 66 65 74 79 4c 65 76 65  u8 getSafetyLeve
4120: 6c 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  l(const char *z,
4130: 20 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20 75   int omitFull, u
4140: 38 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20 20  8 dflt){.       
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4160: 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36 37        /* 1234567
4170: 38 39 20 31 32 33 34 35 36 37 38 39 20 2a 2f 0a  89 123456789 */.
4180: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
4190: 68 61 72 20 7a 54 65 78 74 5b 5d 20 3d 20 22 6f  har zText[] = "o
41a0: 6e 6f 66 66 61 6c 73 65 79 65 73 74 72 75 65 66  noffalseyestruef
41b0: 75 6c 6c 22 3b 0a 20 20 73 74 61 74 69 63 20 63  ull";.  static c
41c0: 6f 6e 73 74 20 75 38 20 69 4f 66 66 73 65 74 5b  onst u8 iOffset[
41d0: 5d 20 3d 20 7b 30 2c 20 31 2c 20 32 2c 20 34 2c  ] = {0, 1, 2, 4,
41e0: 20 39 2c 20 31 32 2c 20 31 36 7d 3b 0a 20 20 73   9, 12, 16};.  s
41f0: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69  tatic const u8 i
4200: 4c 65 6e 67 74 68 5b 5d 20 3d 20 7b 32 2c 20 32  Length[] = {2, 2
4210: 2c 20 33 2c 20 35 2c 20 33 2c 20 34 2c 20 34 7d  , 3, 5, 3, 4, 4}
4220: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
4230: 20 75 38 20 69 56 61 6c 75 65 5b 5d 20 3d 20 20   u8 iValue[] =  
4240: 7b 31 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20  {1, 0, 0, 0, 1, 
4250: 31 2c 20 32 7d 3b 0a 20 20 69 6e 74 20 69 2c 20  1, 2};.  int i, 
4260: 6e 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  n;.  if( sqlite3
4270: 49 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20  Isdigit(*z) ){. 
4280: 20 20 20 72 65 74 75 72 6e 20 28 75 38 29 73 71     return (u8)sq
4290: 6c 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a 20 20  lite3Atoi(z);.  
42a0: 7d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 53  }.  n = sqlite3S
42b0: 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20 20 66 6f  trlen30(z);.  fo
42c0: 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
42d0: 7a 65 28 69 4c 65 6e 67 74 68 29 2d 6f 6d 69 74  ze(iLength)-omit
42e0: 46 75 6c 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  Full; i++){.    
42f0: 69 66 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d 3d  if( iLength[i]==
4300: 6e 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 4e  n && sqlite3StrN
4310: 49 43 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66 66  ICmp(&zText[iOff
4320: 73 65 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30 20  set[i]],z,n)==0 
4330: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ){.      return 
4340: 69 56 61 6c 75 65 5b 69 5d 3b 0a 20 20 20 20 7d  iValue[i];.    }
4350: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 64 66  .  }.  return df
4360: 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  lt;.}../*.** Int
4370: 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e  erpret the given
4380: 20 73 74 72 69 6e 67 20 61 73 20 61 20 62 6f 6f   string as a boo
4390: 6c 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a 75  lean value..*/.u
43a0: 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
43b0: 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
43c0: 7a 2c 20 75 38 20 64 66 6c 74 29 7b 0a 20 20 72  z, u8 dflt){.  r
43d0: 65 74 75 72 6e 20 67 65 74 53 61 66 65 74 79 4c  eturn getSafetyL
43e0: 65 76 65 6c 28 7a 2c 31 2c 64 66 6c 74 29 21 3d  evel(z,1,dflt)!=
43f0: 30 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 73 71 6c  0;.}../* The sql
4400: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 29  ite3GetBoolean()
4410: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
4420: 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c  d by other modul
4430: 65 73 20 62 75 74 20 74 68 65 0a 2a 2a 20 72 65  es but the.** re
4440: 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 69 73 20  mainder of this 
4450: 66 69 6c 65 20 69 73 20 73 70 65 63 69 66 69 63  file is specific
4460: 20 74 6f 20 50 52 41 47 4d 41 20 70 72 6f 63 65   to PRAGMA proce
4470: 73 73 69 6e 67 2e 20 20 53 6f 20 6f 6d 69 74 0a  ssing.  So omit.
4480: 2a 2a 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  ** the rest of t
4490: 68 65 20 66 69 6c 65 20 69 66 20 50 52 41 47 4d  he file if PRAGM
44a0: 41 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 66  As are omitted f
44b0: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
44c0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
44d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
44e0: 41 29 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70  A)../*.** Interp
44f0: 72 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74  ret the given st
4500: 72 69 6e 67 20 61 73 20 61 20 6c 6f 63 6b 69 6e  ring as a lockin
4510: 67 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2f  g mode value..*/
4520: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 4c  .static int getL
4530: 6f 63 6b 69 6e 67 4d 6f 64 65 28 63 6f 6e 73 74  ockingMode(const
4540: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28   char *z){.  if(
4550: 20 7a 20 29 7b 0a 20 20 20 20 69 66 28 20 30 3d   z ){.    if( 0=
4560: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
4570: 7a 2c 20 22 65 78 63 6c 75 73 69 76 65 22 29 20  z, "exclusive") 
4580: 29 20 72 65 74 75 72 6e 20 50 41 47 45 52 5f 4c  ) return PAGER_L
4590: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55  OCKINGMODE_EXCLU
45a0: 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 30 3d  SIVE;.    if( 0=
45b0: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
45c0: 7a 2c 20 22 6e 6f 72 6d 61 6c 22 29 20 29 20 72  z, "normal") ) r
45d0: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
45e0: 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 3b 0a  INGMODE_NORMAL;.
45f0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 50 41 47    }.  return PAG
4600: 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51  ER_LOCKINGMODE_Q
4610: 55 45 52 59 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  UERY;.}..#ifndef
4620: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
4630: 4f 56 41 43 55 55 4d 0a 2f 2a 0a 2a 2a 20 49 6e  OVACUUM./*.** In
4640: 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65  terpret the give
4650: 6e 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61  n string as an a
4660: 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 20  uto-vacuum mode 
4670: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  value..**.** The
4680: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 69 6e   following strin
4690: 67 73 2c 20 22 6e 6f 6e 65 22 2c 20 22 66 75 6c  gs, "none", "ful
46a0: 6c 22 20 61 6e 64 20 22 69 6e 63 72 65 6d 65 6e  l" and "incremen
46b0: 74 61 6c 22 20 61 72 65 20 0a 2a 2a 20 61 63 63  tal" are .** acc
46c0: 65 70 74 61 62 6c 65 2c 20 61 73 20 61 72 65 20  eptable, as are 
46d0: 74 68 65 69 72 20 6e 75 6d 65 72 69 63 20 65 71  their numeric eq
46e0: 75 69 76 61 6c 65 6e 74 73 3a 20 30 2c 20 31 20  uivalents: 0, 1 
46f0: 61 6e 64 20 32 20 72 65 73 70 65 63 74 69 76 65  and 2 respective
4700: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ly..*/.static in
4710: 74 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d 28  t getAutoVacuum(
4720: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
4730: 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 30    int i;.  if( 0
4740: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
4750: 28 7a 2c 20 22 6e 6f 6e 65 22 29 20 29 20 72 65  (z, "none") ) re
4760: 74 75 72 6e 20 42 54 52 45 45 5f 41 55 54 4f 56  turn BTREE_AUTOV
4770: 41 43 55 55 4d 5f 4e 4f 4e 45 3b 0a 20 20 69 66  ACUUM_NONE;.  if
4780: 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49  ( 0==sqlite3StrI
4790: 43 6d 70 28 7a 2c 20 22 66 75 6c 6c 22 29 20 29  Cmp(z, "full") )
47a0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
47b0: 54 4f 56 41 43 55 55 4d 5f 46 55 4c 4c 3b 0a 20  TOVACUUM_FULL;. 
47c0: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
47d0: 74 72 49 43 6d 70 28 7a 2c 20 22 69 6e 63 72 65  trICmp(z, "incre
47e0: 6d 65 6e 74 61 6c 22 29 20 29 20 72 65 74 75 72  mental") ) retur
47f0: 6e 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55  n BTREE_AUTOVACU
4800: 55 4d 5f 49 4e 43 52 3b 0a 20 20 69 20 3d 20 73  UM_INCR;.  i = s
4810: 71 6c 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a 20  qlite3Atoi(z);. 
4820: 20 72 65 74 75 72 6e 20 28 75 38 29 28 28 69 3e   return (u8)((i>
4830: 3d 30 26 26 69 3c 3d 32 29 3f 69 3a 30 29 3b 0a  =0&&i<=2)?i:0);.
4840: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64  }.#endif /* ifnd
4850: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
4860: 55 54 4f 56 41 43 55 55 4d 20 2a 2f 0a 0a 23 69  UTOVACUUM */..#i
4870: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4880: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
4890: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
48a0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
48b0: 20 61 73 20 61 20 74 65 6d 70 20 64 62 20 6c 6f   as a temp db lo
48c0: 63 61 74 69 6f 6e 2e 20 52 65 74 75 72 6e 20 31  cation. Return 1
48d0: 20 66 6f 72 20 66 69 6c 65 0a 2a 2a 20 62 61 63   for file.** bac
48e0: 6b 65 64 20 74 65 6d 70 6f 72 61 72 79 20 64 61  ked temporary da
48f0: 74 61 62 61 73 65 73 2c 20 32 20 66 6f 72 20 74  tabases, 2 for t
4900: 68 65 20 52 65 64 2d 42 6c 61 63 6b 20 74 72 65  he Red-Black tre
4910: 65 20 69 6e 20 6d 65 6d 6f 72 79 20 64 61 74 61  e in memory data
4920: 62 61 73 65 0a 2a 2a 20 61 6e 64 20 30 20 74 6f  base.** and 0 to
4930: 20 75 73 65 20 74 68 65 20 63 6f 6d 70 69 6c 65   use the compile
4940: 2d 74 69 6d 65 20 64 65 66 61 75 6c 74 2e 0a 2a  -time default..*
4950: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
4960: 54 65 6d 70 53 74 6f 72 65 28 63 6f 6e 73 74 20  TempStore(const 
4970: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28 20  char *z){.  if( 
4980: 7a 5b 30 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 30  z[0]>='0' && z[0
4990: 5d 3c 3d 27 32 27 20 29 7b 0a 20 20 20 20 72 65  ]<='2' ){.    re
49a0: 74 75 72 6e 20 7a 5b 30 5d 20 2d 20 27 30 27 3b  turn z[0] - '0';
49b0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
49c0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
49d0: 66 69 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  file")==0 ){.   
49e0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c   return 1;.  }el
49f0: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
4a00: 72 49 43 6d 70 28 7a 2c 20 22 6d 65 6d 6f 72 79  rICmp(z, "memory
4a10: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  ")==0 ){.    ret
4a20: 75 72 6e 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  urn 2;.  }else{.
4a30: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
4a40: 7d 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  }.}.#endif /* SQ
4a50: 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d  LITE_PAGER_PRAGM
4a60: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
4a70: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
4a80: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
4a90: 6e 76 61 6c 69 64 61 74 65 20 74 65 6d 70 20 73  nvalidate temp s
4aa0: 74 6f 72 61 67 65 2c 20 65 69 74 68 65 72 20 77  torage, either w
4ab0: 68 65 6e 20 74 68 65 20 74 65 6d 70 20 73 74 6f  hen the temp sto
4ac0: 72 61 67 65 20 69 73 20 63 68 61 6e 67 65 64 0a  rage is changed.
4ad0: 2a 2a 20 66 72 6f 6d 20 64 65 66 61 75 6c 74 2c  ** from default,
4ae0: 20 6f 72 20 77 68 65 6e 20 27 66 69 6c 65 27 20   or when 'file' 
4af0: 61 6e 64 20 74 68 65 20 74 65 6d 70 5f 73 74 6f  and the temp_sto
4b00: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 68 61 73  re_directory has
4b10: 20 63 68 61 6e 67 65 64 0a 2a 2f 0a 73 74 61 74   changed.*/.stat
4b20: 69 63 20 69 6e 74 20 69 6e 76 61 6c 69 64 61 74  ic int invalidat
4b30: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 50 61 72  eTempStorage(Par
4b40: 73 65 20 2a 70 50 61 72 73 65 29 7b 0a 20 20 73  se *pParse){.  s
4b50: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61  qlite3 *db = pPa
4b60: 72 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64  rse->db;.  if( d
4b70: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 21 3d 30  b->aDb[1].pBt!=0
4b80: 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d   ){.    if( !db-
4b90: 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 73  >autoCommit || s
4ba0: 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 52  qlite3BtreeIsInR
4bb0: 65 61 64 54 72 61 6e 73 28 64 62 2d 3e 61 44 62  eadTrans(db->aDb
4bc0: 5b 31 5d 2e 70 42 74 29 20 29 7b 0a 20 20 20 20  [1].pBt) ){.    
4bd0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
4be0: 67 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70 6f  g(pParse, "tempo
4bf0: 72 61 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e  rary storage can
4c00: 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 22  not be changed "
4c10: 0a 20 20 20 20 20 20 20 20 22 66 72 6f 6d 20 77  .        "from w
4c20: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
4c30: 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  ion");.      ret
4c40: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4c50: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
4c60: 74 65 33 42 74 72 65 65 43 6c 6f 73 65 28 64 62  te3BtreeClose(db
4c70: 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 3b 0a 20  ->aDb[1].pBt);. 
4c80: 20 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42     db->aDb[1].pB
4c90: 74 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  t = 0;.    sqlit
4ca0: 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
4cb0: 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
4cc0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
4cd0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e  SQLITE_OK;.}.#en
4ce0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
4cf0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
4d00: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4d10: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
4d20: 53 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 54  S./*.** If the T
4d30: 45 4d 50 20 64 61 74 61 62 61 73 65 20 69 73 20  EMP database is 
4d40: 6f 70 65 6e 2c 20 63 6c 6f 73 65 20 69 74 20 61  open, close it a
4d50: 6e 64 20 6d 61 72 6b 20 74 68 65 20 64 61 74 61  nd mark the data
4d60: 62 61 73 65 20 73 63 68 65 6d 61 0a 2a 2a 20 61  base schema.** a
4d70: 73 20 6e 65 65 64 69 6e 67 20 72 65 6c 6f 61 64  s needing reload
4d80: 69 6e 67 2e 20 20 54 68 69 73 20 6d 75 73 74 20  ing.  This must 
4d90: 62 65 20 64 6f 6e 65 20 77 68 65 6e 20 75 73 69  be done when usi
4da0: 6e 67 20 74 68 65 20 53 51 4c 49 54 45 5f 54 45  ng the SQLITE_TE
4db0: 4d 50 5f 53 54 4f 52 45 0a 2a 2a 20 6f 72 20 44  MP_STORE.** or D
4dc0: 45 46 41 55 4c 54 5f 54 45 4d 50 5f 53 54 4f 52  EFAULT_TEMP_STOR
4dd0: 45 20 70 72 61 67 6d 61 73 2e 0a 2a 2f 0a 73 74  E pragmas..*/.st
4de0: 61 74 69 63 20 69 6e 74 20 63 68 61 6e 67 65 54  atic int changeT
4df0: 65 6d 70 53 74 6f 72 61 67 65 28 50 61 72 73 65  empStorage(Parse
4e00: 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
4e10: 63 68 61 72 20 2a 7a 53 74 6f 72 61 67 65 54 79  char *zStorageTy
4e20: 70 65 29 7b 0a 20 20 69 6e 74 20 74 73 20 3d 20  pe){.  int ts = 
4e30: 67 65 74 54 65 6d 70 53 74 6f 72 65 28 7a 53 74  getTempStore(zSt
4e40: 6f 72 61 67 65 54 79 70 65 29 3b 0a 20 20 73 71  orageType);.  sq
4e50: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72  lite3 *db = pPar
4e60: 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64 62  se->db;.  if( db
4e70: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 74 73  ->temp_store==ts
4e80: 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45   ) return SQLITE
4e90: 5f 4f 4b 3b 0a 20 20 69 66 28 20 69 6e 76 61 6c  _OK;.  if( inval
4ea0: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
4eb0: 28 20 70 50 61 72 73 65 20 29 20 21 3d 20 53 51  ( pParse ) != SQ
4ec0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
4ed0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
4ee0: 4f 52 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 74 65  OR;.  }.  db->te
4ef0: 6d 70 5f 73 74 6f 72 65 20 3d 20 28 75 38 29 74  mp_store = (u8)t
4f00: 73 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  s;.  return SQLI
4f10: 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20  TE_OK;.}.#endif 
4f20: 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52 5f  /* SQLITE_PAGER_
4f30: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 2f 2a 0a 2a  PRAGMAS */../*.*
4f40: 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65 20  * Generate code 
4f50: 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67  to return a sing
4f60: 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  le integer value
4f70: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
4f80: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
4f90: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
4fa0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62  const char *zLab
4fb0: 65 6c 2c 20 69 36 34 20 76 61 6c 75 65 29 7b 0a  el, i64 value){.
4fc0: 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c 69    Vdbe *v = sqli
4fd0: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
4fe0: 65 29 3b 0a 20 20 69 6e 74 20 6d 65 6d 20 3d 20  e);.  int mem = 
4ff0: 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a  ++pParse->nMem;.
5000: 20 20 69 36 34 20 2a 70 49 36 34 20 3d 20 73 71    i64 *pI64 = sq
5010: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
5020: 28 70 50 61 72 73 65 2d 3e 64 62 2c 20 73 69 7a  (pParse->db, siz
5030: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 69  eof(value));.  i
5040: 66 28 20 70 49 36 34 20 29 7b 0a 20 20 20 20 6d  f( pI64 ){.    m
5050: 65 6d 63 70 79 28 70 49 36 34 2c 20 26 76 61 6c  emcpy(pI64, &val
5060: 75 65 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75 65  ue, sizeof(value
5070: 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
5080: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
5090: 50 5f 49 6e 74 36 34 2c 20 30 2c 20 6d 65 6d 2c  P_Int64, 0, mem,
50a0: 20 30 2c 20 28 63 68 61 72 2a 29 70 49 36 34 2c   0, (char*)pI64,
50b0: 20 50 34 5f 49 4e 54 36 34 29 3b 0a 20 20 73 71   P4_INT64);.  sq
50c0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
50d0: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 73 71 6c  ols(v, 1);.  sql
50e0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
50f0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
5100: 5f 4e 41 4d 45 2c 20 7a 4c 61 62 65 6c 2c 20 53  _NAME, zLabel, S
5110: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
5120: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5130: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
5140: 6f 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 7d 0a 0a  ow, mem, 1);.}..
5150: 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 73  ./*.** Set the s
5160: 61 66 65 74 79 5f 6c 65 76 65 6c 20 61 6e 64 20  afety_level and 
5170: 70 61 67 65 72 20 66 6c 61 67 73 20 66 6f 72 20  pager flags for 
5180: 70 61 67 65 72 20 69 44 62 2e 20 20 4f 72 20 69  pager iDb.  Or i
5190: 66 20 69 44 62 3c 30 0a 2a 2a 20 73 65 74 20 74  f iDb<0.** set t
51a0: 68 65 73 65 20 76 61 6c 75 65 73 20 66 6f 72 20  hese values for 
51b0: 61 6c 6c 20 70 61 67 65 72 73 2e 0a 2a 2f 0a 23  all pagers..*/.#
51c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
51d0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
51e0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74  .static void set
51f0: 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 73 71  AllPagerFlags(sq
5200: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66  lite3 *db){.  if
5210: 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
5220: 20 29 7b 0a 20 20 20 20 44 62 20 2a 70 44 62 20   ){.    Db *pDb 
5230: 3d 20 64 62 2d 3e 61 44 62 3b 0a 20 20 20 20 69  = db->aDb;.    i
5240: 6e 74 20 6e 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a  nt n = db->nDb;.
5250: 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49      assert( SQLI
5260: 54 45 5f 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41  TE_FullFSync==PA
5270: 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b  GER_FULLFSYNC );
5280: 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c  .    assert( SQL
5290: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
52a0: 63 3d 3d 50 41 47 45 52 5f 43 4b 50 54 5f 46 55  c==PAGER_CKPT_FU
52b0: 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61  LLFSYNC );.    a
52c0: 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 61  ssert( SQLITE_Ca
52d0: 63 68 65 53 70 69 6c 6c 3d 3d 50 41 47 45 52 5f  cheSpill==PAGER_
52e0: 43 41 43 48 45 53 50 49 4c 4c 20 29 3b 0a 20 20  CACHESPILL );.  
52f0: 20 20 61 73 73 65 72 74 28 20 28 50 41 47 45 52    assert( (PAGER
5300: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
5310: 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e  ER_CKPT_FULLFSYN
5320: 43 20 7c 20 50 41 47 45 52 5f 43 41 43 48 45 53  C | PAGER_CACHES
5330: 50 49 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20  PILL).          
5340: 20 20 20 3d 3d 20 20 50 41 47 45 52 5f 46 4c 41     ==  PAGER_FLA
5350: 47 53 5f 4d 41 53 4b 20 29 3b 0a 20 20 20 20 77  GS_MASK );.    w
5360: 68 69 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30 20  hile( (n--) > 0 
5370: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 44 62  ){.      if( pDb
5380: 2d 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 20  ->pBt ){.       
5390: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
53a0: 50 61 67 65 72 46 6c 61 67 73 28 70 44 62 2d 3e  PagerFlags(pDb->
53b0: 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20  pBt,.           
53c0: 20 20 20 20 20 20 28 70 44 62 2d 3e 73 61 66 65        (pDb->safe
53d0: 74 79 5f 6c 65 76 65 6c 20 26 20 50 41 47 45 52  ty_level & PAGER
53e0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53  _SYNCHRONOUS_MAS
53f0: 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  K).             
5400: 20 20 20 20 20 20 7c 20 28 64 62 2d 3e 66 6c 61        | (db->fla
5410: 67 73 20 26 20 50 41 47 45 52 5f 46 4c 41 47 53  gs & PAGER_FLAGS
5420: 5f 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20 20 20  _MASK) );.      
5430: 7d 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20  }.      pDb++;. 
5440: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65     }.  }.}.#else
5450: 0a 23 20 64 65 66 69 6e 65 20 73 65 74 41 6c 6c  .# define setAll
5460: 50 61 67 65 72 46 6c 61 67 73 28 58 29 20 20 2f  PagerFlags(X)  /
5470: 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69  * no-op */.#endi
5480: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  f.../*.** Return
5490: 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
54a0: 65 20 6e 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e  e name for a con
54b0: 73 74 72 61 69 6e 74 20 72 65 73 6f 6c 75 74 69  straint resoluti
54c0: 6f 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  on action..*/.#i
54d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
54e0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74  T_FOREIGN_KEY.st
54f0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
5500: 2a 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61  *actionName(u8 a
5510: 63 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20  ction){.  const 
5520: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73  char *zName;.  s
5530: 77 69 74 63 68 28 20 61 63 74 69 6f 6e 20 29 7b  witch( action ){
5540: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74  .    case OE_Set
5550: 4e 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  Null:  zName = "
5560: 53 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20  SET NULL";      
5570: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
5580: 65 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a  e OE_SetDflt:  z
5590: 4e 61 6d 65 20 3d 20 22 53 45 54 20 44 45 46 41  Name = "SET DEFA
55a0: 55 4c 54 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  ULT";     break;
55b0: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 43 61 73  .    case OE_Cas
55c0: 63 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  cade:  zName = "
55d0: 43 41 53 43 41 44 45 22 3b 20 20 20 20 20 20 20  CASCADE";       
55e0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
55f0: 65 20 4f 45 5f 52 65 73 74 72 69 63 74 3a 20 7a  e OE_Restrict: z
5600: 4e 61 6d 65 20 3d 20 22 52 45 53 54 52 49 43 54  Name = "RESTRICT
5610: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
5620: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
5630: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
5640: 4e 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20  NO ACTION";  .  
5650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5660: 20 20 20 20 61 73 73 65 72 74 28 20 61 63 74 69      assert( acti
5670: 6f 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62  on==OE_None ); b
5680: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75  reak;.  }.  retu
5690: 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64  rn zName;.}.#end
56a0: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d  if.../*.** Param
56b0: 65 74 65 72 20 65 4d 6f 64 65 20 6d 75 73 74 20  eter eMode must 
56c0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 50 41  be one of the PA
56d0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
56e0: 58 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  XXX constants.**
56f0: 20 64 65 66 69 6e 65 64 20 69 6e 20 70 61 67 65   defined in page
5700: 72 2e 68 2e 20 54 68 69 73 20 66 75 6e 63 74 69  r.h. This functi
5710: 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
5720: 73 73 6f 63 69 61 74 65 64 20 6c 6f 77 65 72 63  ssociated lowerc
5730: 61 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d  ase.** journal-m
5740: 6f 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e  ode name..*/.con
5750: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
5760: 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
5770: 69 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74  int eMode){.  st
5780: 61 74 69 63 20 63 68 61 72 20 2a 20 63 6f 6e 73  atic char * cons
5790: 74 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d  t azModeName[] =
57a0: 20 7b 0a 20 20 20 20 22 64 65 6c 65 74 65 22 2c   {.    "delete",
57b0: 20 22 70 65 72 73 69 73 74 22 2c 20 22 6f 66 66   "persist", "off
57c0: 22 2c 20 22 74 72 75 6e 63 61 74 65 22 2c 20 22  ", "truncate", "
57d0: 6d 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65 66 20  memory".#ifndef 
57e0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
57f0: 20 20 20 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e       , "wal".#en
5800: 64 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72  dif.  };.  asser
5810: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
5820: 4d 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29  MODE_DELETE==0 )
5830: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
5840: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
5850: 52 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73  RSIST==1 );.  as
5860: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
5870: 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29  NALMODE_OFF==2 )
5880: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
5890: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
58a0: 55 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61  UNCATE==3 );.  a
58b0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
58c0: 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d  RNALMODE_MEMORY=
58d0: 3d 34 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =4 );.  assert( 
58e0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
58f0: 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73  E_WAL==5 );.  as
5900: 73 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26  sert( eMode>=0 &
5910: 26 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69  & eMode<=ArraySi
5920: 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29  ze(azModeName) )
5930: 3b 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d  ;..  if( eMode==
5940: 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65  ArraySize(azMode
5950: 4e 61 6d 65 29 20 29 20 72 65 74 75 72 6e 20 30  Name) ) return 0
5960: 3b 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64  ;.  return azMod
5970: 65 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a  eName[eMode];.}.
5980: 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61  ./*.** Process a
5990: 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e   pragma statemen
59a0: 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d  t.  .**.** Pragm
59b0: 61 73 20 61 72 65 20 6f 66 20 74 68 69 73 20 66  as are of this f
59c0: 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  orm:.**.**      
59d0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
59e0: 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a  .]id [= value].*
59f0: 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74 69 66  *.** The identif
5a00: 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ier might also b
5a10: 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54 68 65  e a string.  The
5a20: 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69   value is a stri
5a30: 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74  ng, and.** ident
5a40: 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62  ifier, or a numb
5a50: 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c 61  er.  If minusFla
5a60: 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  g is true, then 
5a70: 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  the value is.** 
5a80: 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20 77 61  a number that wa
5a90: 73 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  s preceded by a 
5aa0: 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a  minus sign..**.*
5ab0: 2a 20 49 66 20 74 68 65 20 6c 65 66 74 20 73 69  * If the left si
5ac0: 64 65 20 69 73 20 22 64 61 74 61 62 61 73 65 2e  de is "database.
5ad0: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
5ae0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 61   the database na
5af0: 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20 69  me.** and pId2 i
5b00: 73 20 74 68 65 20 69 64 2e 20 20 49 66 20 74 68  s the id.  If th
5b10: 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 6a  e left side is j
5b20: 75 73 74 20 22 69 64 22 20 74 68 65 6e 20 70 49  ust "id" then pI
5b30: 64 31 20 69 73 20 74 68 65 0a 2a 2a 20 69 64 20  d1 is the.** id 
5b40: 61 6e 64 20 70 49 64 32 20 69 73 20 61 6e 79 20  and pId2 is any 
5b50: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f  empty string..*/
5b60: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
5b70: 67 6d 61 28 0a 20 20 50 61 72 73 65 20 2a 70 50  gma(.  Parse *pP
5b80: 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a  arse, .  Token *
5b90: 70 49 64 31 2c 20 20 20 20 20 20 20 20 2f 2a 20  pId1,        /* 
5ba0: 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 5b 64  First part of [d
5bb0: 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c  atabase.]id fiel
5bc0: 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49  d */.  Token *pI
5bd0: 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20 53 65  d2,        /* Se
5be0: 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b 64 61  cond part of [da
5bf0: 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c 64  tabase.]id field
5c00: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 54  , or NULL */.  T
5c10: 6f 6b 65 6e 20 2a 70 56 61 6c 75 65 2c 20 20 20  oken *pValue,   
5c20: 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72 20     /* Token for 
5c30: 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c  <value>, or NULL
5c40: 20 2a 2f 0a 20 20 69 6e 74 20 6d 69 6e 75 73 46   */.  int minusF
5c50: 6c 61 67 20 20 20 20 20 20 20 2f 2a 20 54 72 75  lag       /* Tru
5c60: 65 20 69 66 20 61 20 27 2d 27 20 73 69 67 6e 20  e if a '-' sign 
5c70: 70 72 65 63 65 64 65 64 20 3c 76 61 6c 75 65 3e  preceded <value>
5c80: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a   */.){.  char *z
5c90: 4c 65 66 74 20 3d 20 30 3b 20 20 20 20 20 20 20  Left = 0;       
5ca0: 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  /* Nul-terminate
5cb0: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c  d UTF-8 string <
5cc0: 69 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  id> */.  char *z
5cd0: 52 69 67 68 74 20 3d 20 30 3b 20 20 20 20 20 20  Right = 0;      
5ce0: 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  /* Nul-terminate
5cf0: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c  d UTF-8 string <
5d00: 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20  value>, or NULL 
5d10: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
5d20: 2a 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 54  *zDb = 0;   /* T
5d30: 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
5d40: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64   */.  Token *pId
5d50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
5d60: 50 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64 3e 20  Pointer to <id> 
5d70: 74 6f 6b 65 6e 20 2a 2f 0a 20 20 63 68 61 72 20  token */.  char 
5d80: 2a 61 46 63 6e 74 6c 5b 34 5d 3b 20 20 20 20 20  *aFcntl[4];     
5d90: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
5da0: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
5db0: 41 47 4d 41 20 2a 2f 0a 20 20 69 6e 74 20 69 44  AGMA */.  int iD
5dc0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
5dd0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 6e 64   /* Database ind
5de0: 65 78 20 66 6f 72 20 3c 64 61 74 61 62 61 73 65  ex for <database
5df0: 3e 20 2a 2f 0a 20 20 69 6e 74 20 6c 77 72 2c 20  > */.  int lwr, 
5e00: 75 70 72 2c 20 6d 69 64 3b 20 20 20 20 20 20 20  upr, mid;       
5e10: 20 20 20 20 2f 2a 20 42 69 6e 61 72 79 20 73 65      /* Binary se
5e20: 61 72 63 68 20 62 6f 75 6e 64 73 20 2a 2f 0a 20  arch bounds */. 
5e30: 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5e50: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 66 6f   return value fo
5e60: 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  rm SQLITE_FCNTL_
5e70: 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71 6c 69  PRAGMA */.  sqli
5e80: 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65  te3 *db = pParse
5e90: 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68 65 20  ->db;    /* The 
5ea0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
5eb0: 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62  ion */.  Db *pDb
5ec0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
5ed0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70 65        /* The spe
5ee0: 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20 62  cific database b
5ef0: 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20 2a 2f  eing pragmaed */
5f00: 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c  .  Vdbe *v = sql
5f10: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
5f20: 73 65 29 3b 20 20 2f 2a 20 50 72 65 70 61 72 65  se);  /* Prepare
5f30: 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 0a  d statement */..
5f40: 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65 74    if( v==0 ) ret
5f50: 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  urn;.  sqlite3Vd
5f60: 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76 29  beRunOnlyOnce(v)
5f70: 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  ;.  pParse->nMem
5f80: 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74 65   = 2;..  /* Inte
5f90: 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61 62  rpret the [datab
5fa0: 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74 68  ase.] part of th
5fb0: 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  e pragma stateme
5fc0: 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a 20  nt. iDb is the. 
5fd0: 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68 65   ** index of the
5fe0: 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20 70   database this p
5ff0: 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20 61  ragma is being a
6000: 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62 2e  pplied to in db.
6010: 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62 20  aDb[]. */.  iDb 
6020: 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  = sqlite3TwoPart
6030: 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49 64  Name(pParse, pId
6040: 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b 0a  1, pId2, &pId);.
6050: 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72 65    if( iDb<0 ) re
6060: 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26 64  turn;.  pDb = &d
6070: 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20 20  b->aDb[iDb];..  
6080: 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20 64  /* If the temp d
6090: 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65 6e  atabase has been
60a0: 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d 65   explicitly name
60b0: 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65  d as part of the
60c0: 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20 6d   .  ** pragma, m
60d0: 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20 6f  ake sure it is o
60e0: 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66 28  pen. .  */.  if(
60f0: 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69 74   iDb==1 && sqlit
6100: 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61  e3OpenTempDataba
6110: 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20 20  se(pParse) ){.  
6120: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a 20    return;.  }.. 
6130: 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65 33   zLeft = sqlite3
6140: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62  NameFromToken(db
6150: 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21 7a  , pId);.  if( !z
6160: 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a 20  Left ) return;. 
6170: 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20 29   if( minusFlag )
6180: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73  {.    zRight = s
6190: 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
61a0: 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65 29  , "-%T", pValue)
61b0: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 7a  ;.  }else{.    z
61c0: 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4e  Right = sqlite3N
61d0: 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62 2c  ameFromToken(db,
61e0: 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a 20   pValue);.  }.. 
61f0: 20 61 73 73 65 72 74 28 20 70 49 64 32 20 29 3b   assert( pId2 );
6200: 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e 6e  .  zDb = pId2->n
6210: 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65 20  >0 ? pDb->zName 
6220: 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  : 0;.  if( sqlit
6230: 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61 72  e3AuthCheck(pPar
6240: 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47 4d  se, SQLITE_PRAGM
6250: 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68 74  A, zLeft, zRight
6260: 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67 6f  , zDb) ){.    go
6270: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
6280: 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61 6e   }..  /* Send an
6290: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
62a0: 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72 6f  AGMA file-contro
62b0: 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c 79  l to the underly
62c0: 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f 6e  ing VFS.  ** con
62d0: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74 20  nection.  If it 
62e0: 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f 4f  returns SQLITE_O
62f0: 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20 74  K, then assume t
6300: 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a 2a  hat the VFS.  **
6310: 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72 61   handled the pra
6320: 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74 65  gma and generate
6330: 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72 65   a no-op prepare
6340: 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20 2a  d statement..  *
6350: 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d 20  /.  aFcntl[0] = 
6360: 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20 3d  0;.  aFcntl[1] =
6370: 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74 6c   zLeft;.  aFcntl
6380: 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20 20  [2] = zRight;.  
6390: 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a 20  aFcntl[3] = 0;. 
63a0: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
63b0: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72 63  .nBusy = 0;.  rc
63c0: 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f   = sqlite3_file_
63d0: 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62 2c  control(db, zDb,
63e0: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
63f0: 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46 63  AGMA, (void*)aFc
6400: 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d  ntl);.  if( rc==
6410: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
6420: 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29   if( aFcntl[0] )
6430: 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 65 6d 20  {.      int mem 
6440: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
6450: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6460: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
6470: 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d 65 6d 2c  String8, 0, mem,
6480: 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c 20 30   0, aFcntl[0], 0
6490: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
64a0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
64b0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
64c0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
64d0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
64e0: 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74 22 2c 20  NAME, "result", 
64f0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
6500: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6510: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
6520: 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31 29  sultRow, mem, 1)
6530: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
6540: 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b  free(aFcntl[0]);
6550: 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20  .    }.    goto 
6560: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
6570: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
6580: 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20  _NOTFOUND ){.   
6590: 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20 29   if( aFcntl[0] )
65a0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
65b0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
65c0: 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30 5d 29  "%s", aFcntl[0])
65d0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
65e0: 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29 3b  free(aFcntl[0]);
65f0: 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61 72 73  .    }.    pPars
6600: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 70  e->nErr++;.    p
6610: 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a  Parse->rc = rc;.
6620: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
6630: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c  out;.  }..  /* L
6640: 6f 63 61 74 65 20 74 68 65 20 70 72 61 67 6d 61  ocate the pragma
6650: 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70 20 74   in the lookup t
6660: 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20 3d 20  able */.  lwr = 
6670: 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61 79  0;.  upr = Array
6680: 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d 65  Size(aPragmaName
6690: 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20 6c  s)-1;.  while( l
66a0: 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20 6d  wr<=upr ){.    m
66b0: 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f 32  id = (lwr+upr)/2
66c0: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
66d0: 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65 66 74  e3_stricmp(zLeft
66e0: 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  , aPragmaNames[m
66f0: 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  id].zName);.    
6700: 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72 65 61  if( rc==0 ) brea
6710: 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c 30 20  k;.    if( rc<0 
6720: 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d 20 6d  ){.      upr = m
6730: 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  id - 1;.    }els
6740: 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d 20 6d  e{.      lwr = m
6750: 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20 20  id + 1;.    }.  
6760: 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70 72 20  }.  if( lwr>upr 
6770: 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
6780: 74 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75  t;..  /* Make su
6790: 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  re the database 
67a0: 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65 64  schema is loaded
67b0: 20 69 66 20 74 68 65 20 70 72 61 67 6d 61 20 72   if the pragma r
67c0: 65 71 75 69 72 65 73 20 74 68 61 74 20 2a 2f 0a  equires that */.
67d0: 20 20 69 66 28 20 28 61 50 72 61 67 6d 61 4e 61    if( (aPragmaNa
67e0: 6d 65 73 5b 6d 69 64 5d 2e 6d 50 72 61 67 46 6c  mes[mid].mPragFl
67f0: 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 4e 65  ag & PragFlag_Ne
6800: 65 64 53 63 68 65 6d 61 29 21 3d 30 20 29 7b 0a  edSchema)!=0 ){.
6810: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
6820: 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
6830: 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
6840: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4a  out;.  }..  /* J
6850: 75 6d 70 20 74 6f 20 74 68 65 20 61 70 70 72 6f  ump to the appro
6860: 70 72 69 61 74 65 20 70 72 61 67 6d 61 20 68 61  priate pragma ha
6870: 6e 64 6c 65 72 20 2a 2f 0a 20 20 73 77 69 74 63  ndler */.  switc
6880: 68 28 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  h( aPragmaNames[
6890: 6d 69 64 5d 2e 65 50 72 61 67 54 79 70 20 29 7b  mid].ePragTyp ){
68a0: 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .  .#if !defined
68b0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
68c0: 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21  ER_PRAGMAS) && !
68d0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
68e0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a  MIT_DEPRECATED).
68f0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
6900: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65 66  A [database.]def
6910: 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a  ault_cache_size.
6920: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
6930: 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f  tabase.]default_
6940: 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a  cache_size=N.  *
6950: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
6960: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
6970: 65 20 63 75 72 72 65 6e 74 20 70 65 72 73 69 73  e current persis
6980: 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72  tent setting for
6990: 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63   the.  ** page c
69a0: 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65 20  ache size.  The 
69b0: 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 69  value returned i
69c0: 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  s the maximum nu
69d0: 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61 67  mber of.  ** pag
69e0: 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20 63  es in the page c
69f0: 61 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f 6e  ache.  The secon
6a00: 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74 68  d form sets both
6a10: 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20 2a   the current.  *
6a20: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
6a30: 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  e value and the 
6a40: 70 65 72 73 69 73 74 65 6e 74 20 70 61 67 65 20  persistent page 
6a50: 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65  cache size value
6a60: 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  .  ** stored in 
6a70: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
6a80: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c 64  e..  **.  ** Old
6a90: 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 53  er versions of S
6aa0: 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74 20  QLite would set 
6ab0: 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68  the default cach
6ac0: 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a 2a  e size to a.  **
6ad0: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
6ae0: 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79 6e   to indicate syn
6af0: 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20 54  chronous=OFF.  T
6b00: 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63 68  hese days, synch
6b10: 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20 61  ronous.  ** is a
6b20: 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66 61  lways on by defa
6b30: 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ult regardless o
6b40: 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74 68  f the sign of th
6b50: 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a  e default cache.
6b60: 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74 20    ** size.  But 
6b70: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b 65  continue to take
6b80: 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   the absolute va
6b90: 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66 61 75  lue of the defau
6ba0: 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69  lt cache.  ** si
6bb0: 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61 6c  ze of historical
6bc0: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 0a   compatibility..
6bd0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
6be0: 54 79 70 5f 44 45 46 41 55 4c 54 5f 43 41 43 48  Typ_DEFAULT_CACH
6bf0: 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 74  E_SIZE: {.    st
6c00: 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69  atic const int i
6c10: 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54  Ln = VDBE_OFFSET
6c20: 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20  _LINENO(2);.    
6c30: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
6c40: 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68 65  eOpList getCache
6c50: 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Size[] = {.     
6c60: 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
6c70: 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20  n, 0, 0,        
6c80: 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  0},             
6c90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
6ca0: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52   */.      { OP_R
6cb0: 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20 31  eadCookie,  0, 1
6cc0: 2c 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 44  ,        BTREE_D
6cd0: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
6ce0: 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  E},  /* 1 */.   
6cf0: 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20     { OP_IfPos,  
6d00: 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20 20       1, 8,      
6d10: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
6d20: 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c  _Integer,     0,
6d30: 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   2,        0},. 
6d40: 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72 61       { OP_Subtra
6d50: 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20 20  ct,    1, 2,    
6d60: 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b 20      1},.      { 
6d70: 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20  OP_IfPos,       
6d80: 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 8,        0},
6d90: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65  .      { OP_Inte
6da0: 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20 20  ger,     0, 1,  
6db0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20        0},       
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6dd0: 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20 20    /* 6 */.      
6de0: 7b 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20 20  { OP_Noop,      
6df0: 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20 30    0, 0,        0
6e00: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  },.      { OP_Re
6e10: 73 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31 2c  sultRow,   1, 1,
6e20: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
6e30: 7d 3b 0a 20 20 20 20 69 6e 74 20 61 64 64 72 3b  };.    int addr;
6e40: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
6e50: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
6e60: 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  );.    if( !zRig
6e70: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
6e80: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
6e90: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  s(v, 1);.      s
6ea0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
6eb0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
6ec0: 4d 45 5f 4e 41 4d 45 2c 20 22 63 61 63 68 65 5f  ME_NAME, "cache_
6ed0: 73 69 7a 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  size", SQLITE_ST
6ee0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70 50 61  ATIC);.      pPa
6ef0: 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b 0a  rse->nMem += 2;.
6f00: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
6f10: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
6f20: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 67  t(v, ArraySize(g
6f30: 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67 65  etCacheSize), ge
6f40: 74 43 61 63 68 65 53 69 7a 65 2c 69 4c 6e 29 3b  tCacheSize,iLn);
6f50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
6f60: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
6f70: 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  dr, iDb);.      
6f80: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
6f90: 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69  eP1(v, addr+1, i
6fa0: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
6fb0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
6fc0: 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49 54 45  , addr+6, SQLITE
6fd0: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
6fe0: 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  IZE);.    }else{
6ff0: 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20  .      int size 
7000: 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33  = sqlite3AbsInt3
7010: 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52  2(sqlite3Atoi(zR
7020: 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71  ight));.      sq
7030: 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
7040: 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c  peration(pParse,
7050: 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20   0, iDb);.      
7060: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
7070: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
7080: 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20 20 20   size, 1);.     
7090: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
70a0: 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f 6b  p3(v, OP_SetCook
70b0: 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f 44  ie, iDb, BTREE_D
70c0: 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a  EFAULT_CACHE_SIZ
70d0: 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73 73  E, 1);.      ass
70e0: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
70f0: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
7100: 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 20  iDb, 0) );.     
7110: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
7120: 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65  ache_size = size
7130: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
7140: 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65  treeSetCacheSize
7150: 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e  (pDb->pBt, pDb->
7160: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
7170: 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ize);.    }.    
7180: 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
7190: 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d 49  f /* !SQLITE_OMI
71a0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  T_PAGER_PRAGMAS 
71b0: 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  && !SQLITE_OMIT_
71c0: 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a 23  DEPRECATED */..#
71d0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
71e0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
71f0: 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a 2a  AGMAS).  /*.  **
7200: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
7210: 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20 20  se.]page_size.  
7220: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
7230: 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 3d  base.]page_size=
7240: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
7250: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
7260: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
7270: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
7280: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67   ** database pag
7290: 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e  e size in bytes.
72a0: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
72b0: 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a 20  m sets the.  ** 
72c0: 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
72d0: 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20 76  ze value.  The v
72e0: 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  alue can only be
72f0: 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68 65   set if.  ** the
7300: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
7310: 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61 74  t yet been creat
7320: 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ed..  */.  case 
7330: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
7340: 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  E: {.    Btree *
7350: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
7360: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
7370: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  =0 );.    if( !z
7380: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
7390: 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59 53  nt size = ALWAYS
73a0: 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33 42  (pBt) ? sqlite3B
73b0: 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65 28  treeGetPageSize(
73c0: 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20 20  pBt) : 0;.      
73d0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
73e0: 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f 73 69  pParse, "page_si
73f0: 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20  ze", size);.    
7400: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
7410: 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c 20  Malloc may fail 
7420: 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65  when setting the
7430: 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20 74   page-size, as t
7440: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 72  here is an inter
7450: 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75 66  nal.      ** buf
7460: 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61 67  fer that the pag
7470: 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a 65  er module resize
7480: 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  s using sqlite3_
7490: 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20 20  realloc()..     
74a0: 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65   */.      db->ne
74b0: 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71 6c  xtPagesize = sql
74c0: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
74d0: 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49  ;.      if( SQLI
74e0: 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65  TE_NOMEM==sqlite
74f0: 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69 7a  3BtreeSetPageSiz
7500: 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74 50  e(pBt, db->nextP
7510: 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29 7b  agesize,-1,0) ){
7520: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c  .        db->mal
7530: 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
7540: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
7550: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
7560: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
7570: 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65  database.]secure
7580: 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50 52  _delete.  **  PR
7590: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
75a0: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f 4e  secure_delete=ON
75b0: 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  /OFF.  **.  ** T
75c0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
75d0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
75e0: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
75f0: 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f 64 65  e.  ** secure_de
7600: 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68 65 20  lete flag.  The 
7610: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61 6e  second form chan
7620: 67 65 73 20 74 68 65 20 73 65 63 75 72 65 5f 64  ges the secure_d
7630: 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67 20  elete.  ** flag 
7640: 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65 70 6f  setting and repo
7650: 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c 75 65  rts thenew value
7660: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
7670: 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c  agTyp_SECURE_DEL
7680: 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65  ETE: {.    Btree
7690: 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74   *pBt = pDb->pBt
76a0: 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20 2d 31  ;.    int b = -1
76b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42  ;.    assert( pB
76c0: 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  t!=0 );.    if( 
76d0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
76e0: 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74 42 6f  b = sqlite3GetBo
76f0: 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29  olean(zRight, 0)
7700: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
7710: 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62 3e  pId2->n==0 && b>
7720: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
7730: 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69  ii;.      for(ii
7740: 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
7750: 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73  ii++){.        s
7760: 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75 72  qlite3BtreeSecur
7770: 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62 5b  eDelete(db->aDb[
7780: 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20 20  ii].pBt, b);.   
7790: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
77a0: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
77b0: 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74 2c  ecureDelete(pBt,
77c0: 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53   b);.    returnS
77d0: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
77e0: 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22   "secure_delete"
77f0: 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  , b);.    break;
7800: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
7810: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
7820: 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e  e.]max_page_coun
7830: 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  t.  **  PRAGMA [
7840: 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70 61  database.]max_pa
7850: 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a  ge_count=N.  **.
7860: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
7870: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
7880: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20  current setting 
7890: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78  for the.  ** max
78a0: 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70  imum number of p
78b0: 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  ages in the data
78c0: 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
78d0: 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72  .  ** second for
78e0: 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63 68  m attempts to ch
78f0: 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69 6e  ange this settin
7900: 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f  g.  Both.  ** fo
7910: 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20 63  rms return the c
7920: 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a  urrent setting..
7930: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62    **.  ** The ab
7940: 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
7950: 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69 73  N is used.  This
7960: 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   is undocumented
7970: 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20   and might.  ** 
7980: 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c  change.  The onl
7990: 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f 20  y purpose is to 
79a0: 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79 20  provide an easy 
79b0: 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a  way to test.  **
79c0: 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73 49   the sqlite3AbsI
79d0: 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e  nt32() function.
79e0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  **.  **  PRAG
79f0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61  MA [database.]pa
7a00: 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20  ge_count.  **.  
7a10: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
7a20: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
7a30: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64   the specified d
7a40: 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20  atabase..  */.  
7a50: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 47  case PragTyp_PAG
7a60: 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20 69  E_COUNT: {.    i
7a70: 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71 6c  nt iReg;.    sql
7a80: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
7a90: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
7aa0: 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b 2b  );.    iReg = ++
7ab0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20  pParse->nMem;.  
7ac0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f 6c    if( sqlite3Tol
7ad0: 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d  ower(zLeft[0])==
7ae0: 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  'p' ){.      sql
7af0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
7b00: 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20  , OP_Pagecount, 
7b10: 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20 20  iDb, iReg);.    
7b20: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
7b30: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
7b40: 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69  , OP_MaxPgcnt, i
7b50: 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20 20  Db, iReg, .     
7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b70: 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74     sqlite3AbsInt
7b80: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
7b90: 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a  Right)));.    }.
7ba0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
7bb0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
7bc0: 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b  ltRow, iReg, 1);
7bd0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7be0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
7bf0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7c00: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
7c10: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
7c20: 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52  zLeft, SQLITE_TR
7c30: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62 72  ANSIENT);.    br
7c40: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
7c50: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
7c60: 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d  abase.]locking_m
7c70: 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ode.  **  PRAGMA
7c80: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b   [database.]lock
7c90: 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72 6d  ing_mode = (norm
7ca0: 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a 20 20  al|exclusive).  
7cb0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
7cc0: 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a 20  p_LOCKING_MODE: 
7cd0: 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
7ce0: 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61 6c   *zRet = "normal
7cf0: 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65  ";.    int eMode
7d00: 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64   = getLockingMod
7d10: 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20 20  e(zRight);..    
7d20: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26  if( pId2->n==0 &
7d30: 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  & eMode==PAGER_L
7d40: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59  OCKINGMODE_QUERY
7d50: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69 6d   ){.      /* Sim
7d60: 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b  ple "PRAGMA lock
7d70: 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74 65  ing_mode;" state
7d80: 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20 61 20  ment. This is a 
7d90: 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20 20 20  query for.      
7da0: 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  ** the current d
7db0: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20 6d  efault locking m
7dc0: 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79 20 62  ode (which may b
7dd0: 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f 0a 20  e different to. 
7de0: 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63 6b       ** the lock
7df0: 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65 20  ing-mode of the 
7e00: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29 2e 0a  main database)..
7e10: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 65        */.      e
7e20: 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74 4c  Mode = db->dfltL
7e30: 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65 6c  ockMode;.    }el
7e40: 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20  se{.      Pager 
7e50: 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20 20 69  *pPager;.      i
7e60: 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b  f( pId2->n==0 ){
7e70: 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73  .        /* This
7e80: 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20   indicates that 
7e90: 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  no database name
7ea0: 20 77 61 73 20 73 70 65 63 69 66 69 65 64 20 61   was specified a
7eb0: 73 20 70 61 72 74 0a 20 20 20 20 20 20 20 20 2a  s part.        *
7ec0: 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20  * of the PRAGMA 
7ed0: 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69 73  command. In this
7ee0: 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b 69 6e   case the lockin
7ef0: 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a 20  g-mode must be. 
7f00: 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20 6f 6e         ** set on
7f10: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
7f20: 74 61 62 61 73 65 73 2c 20 61 73 20 77 65 6c 6c  tabases, as well
7f30: 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 62 20   as the main db 
7f40: 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a 2a  file..        **
7f50: 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73 6f  .        ** Also
7f60: 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 66  , the sqlite3.df
7f70: 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69 61  ltLockMode varia
7f80: 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20 74 68  ble is set so th
7f90: 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 6e  at.        ** an
7fa0: 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 61  y subsequently a
7fb0: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
7fc0: 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65 20 73  s also use the s
7fd0: 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 20  pecified.       
7fe0: 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65   ** locking mode
7ff0: 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
8000: 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20       int ii;.   
8010: 20 20 20 20 20 61 73 73 65 72 74 28 70 44 62 3d       assert(pDb=
8020: 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a 20  =&db->aDb[0]);. 
8030: 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 32 3b         for(ii=2;
8040: 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
8050: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 50  +){.          pP
8060: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
8070: 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44 62  reePager(db->aDb
8080: 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20 20  [ii].pBt);.     
8090: 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
80a0: 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61  rLockingMode(pPa
80b0: 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  ger, eMode);.   
80c0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
80d0: 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20  b->dfltLockMode 
80e0: 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20 20  = (u8)eMode;.   
80f0: 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61 67 65     }.      pPage
8100: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
8110: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
8120: 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 73  .      eMode = s
8130: 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69  qlite3PagerLocki
8140: 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  ngMode(pPager, e
8150: 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  Mode);.    }..  
8160: 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64 65 3d    assert( eMode=
8170: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
8180: 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20 20 20  DE_NORMAL.      
8190: 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65 3d 3d        || eMode==
81a0: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
81b0: 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b 0a 20  E_EXCLUSIVE );. 
81c0: 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41     if( eMode==PA
81d0: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
81e0: 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20 20 20  EXCLUSIVE ){.   
81f0: 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63 6c 75     zRet = "exclu
8200: 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20 20  sive";.    }.   
8210: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
8220: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
8230: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8240: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
8250: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 63  LNAME_NAME, "loc
8260: 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c 49  king_mode", SQLI
8270: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8280: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8290: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
82a0: 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c 20   0, 1, 0, zRet, 
82b0: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0);.    sqlite3V
82c0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
82d0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
82e0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
82f0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
8300: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a  GMA [database.]j
8310: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a  ournal_mode.  **
8320: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
8330: 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  se.]journal_mode
8340: 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20   =.  **         
8350: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 65               (de
8360: 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66  lete|persist|off
8370: 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79  |truncate|memory
8380: 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20  |wal|off).  */. 
8390: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f   case PragTyp_JO
83a0: 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20  URNAL_MODE: {.  
83b0: 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20    int eMode;    
83c0: 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68      /* One of th
83d0: 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  e PAGER_JOURNALM
83e0: 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20  ODE_XXX symbols 
83f0: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20  */.    int ii;  
8400: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
8410: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20   counter */..   
8420: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
8430: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
8440: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8450: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
8460: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f 75  LNAME_NAME, "jou
8470: 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c 49  rnal_mode", SQLI
8480: 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20  TE_STATIC);..   
8490: 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29   if( zRight==0 )
84a0: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  {.      /* If th
84b0: 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44 45  ere is no "=MODE
84c0: 22 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  " part of the pr
84d0: 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65 72 79  agma, do a query
84e0: 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20 2a   for the.      *
84f0: 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 20 2a  * current mode *
8500: 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  /.      eMode = 
8510: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
8520: 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d 65 6c  E_QUERY;.    }el
8530: 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  se{.      const 
8540: 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20  char *zMode;.   
8550: 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74     int n = sqlit
8560: 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68  e3Strlen30(zRigh
8570: 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 65 4d  t);.      for(eM
8580: 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d 20  ode=0; (zMode = 
8590: 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
85a0: 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21 3d  dename(eMode))!=
85b0: 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20  0; eMode++){.   
85c0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
85d0: 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c  StrNICmp(zRight,
85e0: 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29 20   zMode, n)==0 ) 
85f0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
8600: 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64 65 20       if( !zMode 
8610: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  ){.        /* If
8620: 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70 61 72   the "=MODE" par
8630: 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  t does not match
8640: 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e   any known journ
8650: 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20 20  al mode,.       
8660: 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20 71 75   ** then do a qu
8670: 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 65  ery */.        e
8680: 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55  Mode = PAGER_JOU
8690: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a  RNALMODE_QUERY;.
86a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
86b0: 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47    if( eMode==PAG
86c0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
86d0: 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e 6e 3d  UERY && pId2->n=
86e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43  =0 ){.      /* C
86f0: 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41 20 6a  onvert "PRAGMA j
8700: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e 74  ournal_mode" int
8710: 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a  o "PRAGMA main.j
8720: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a  ournal_mode" */.
8730: 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b 0a 20        iDb = 0;. 
8740: 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20 31       pId2->n = 1
8750: 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20 53  ;.    }.#ifdef S
8760: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
8770: 4c 5f 53 41 46 45 54 59 4c 45 56 45 4c 0a 20 20  L_SAFETYLEVEL.  
8780: 20 20 69 66 28 20 21 20 53 51 4c 49 54 45 5f 44    if( ! SQLITE_D
8790: 62 53 61 66 65 74 79 4c 65 76 65 6c 49 73 46 69  bSafetyLevelIsFi
87a0: 78 65 64 28 70 44 62 2d 3e 73 61 66 65 74 79 5f  xed(pDb->safety_
87b0: 6c 65 76 65 6c 29 20 29 7b 0a 20 20 20 20 20 20  level) ){.      
87c0: 69 66 28 20 65 4d 6f 64 65 20 3d 3d 20 50 41 47  if( eMode == PAG
87d0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
87e0: 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  AL ){.        /*
87f0: 20 77 68 65 6e 20 65 6e 74 65 72 69 6e 67 20 77   when entering w
8800: 61 6c 20 6d 6f 64 65 2c 20 69 6d 6d 65 64 69 61  al mode, immedia
8810: 74 65 6c 79 20 73 77 69 74 63 68 20 74 68 65 20  tely switch the 
8820: 73 61 66 65 74 79 5f 6c 65 76 65 6c 0a 20 20 20  safety_level.   
8830: 20 20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74 20       ** so that 
8840: 61 20 71 75 65 72 79 20 74 6f 20 70 72 61 67 6d  a query to pragm
8850: 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 72 65  a synchronous re
8860: 74 75 72 6e 73 20 74 68 65 20 63 6f 72 72 65 63  turns the correc
8870: 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20  t value */.     
8880: 20 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e 73   .        pDb->s
8890: 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 53 51  afety_level = SQ
88a0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c  LITE_DEFAULT_WAL
88b0: 5f 53 41 46 45 54 59 4c 45 56 45 4c 3b 0a 20 20  _SAFETYLEVEL;.  
88c0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
88d0: 20 20 20 2f 2a 20 49 66 20 74 68 65 20 75 73 65     /* If the use
88e0: 72 20 68 61 73 6e 27 74 20 6f 76 65 72 72 69 64  r hasn't overrid
88f0: 64 65 6e 20 74 68 65 20 73 79 6e 63 68 72 6f 6e  den the synchron
8900: 6f 75 73 20 73 65 74 74 69 6e 67 2c 20 75 73 65  ous setting, use
8910: 20 74 68 65 20 0a 20 20 20 20 20 20 20 20 2a 2a   the .        **
8920: 20 64 65 66 61 75 6c 74 20 66 6f 72 20 6e 6f 6e   default for non
8930: 2d 77 61 6c 20 64 61 74 61 62 61 73 65 73 20 2a  -wal databases *
8940: 2f 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e 73  /.        pDb->s
8950: 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 33 3b  afety_level = 3;
8960: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
8970: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
8980: 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 41 46 45  DEFAULT_WAL_SAFE
8990: 54 59 4c 45 56 45 4c 20 2a 2f 0a 20 20 20 20 66  TYLEVEL */.    f
89a0: 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b  or(ii=db->nDb-1;
89b0: 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20   ii>=0; ii--){. 
89c0: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
89d0: 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d  [ii].pBt && (ii=
89e0: 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d  =iDb || pId2->n=
89f0: 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73  =0) ){.        s
8a00: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
8a10: 72 65 65 28 76 2c 20 69 69 29 3b 0a 20 20 20 20  ree(v, ii);.    
8a20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
8a30: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75 72  ddOp3(v, OP_Jour
8a40: 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c 20  nalMode, ii, 1, 
8a50: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d 0a  eMode);.      }.
8a60: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
8a70: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8a80: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
8a90: 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  1);.    break;. 
8aa0: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
8ab0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
8ac0: 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  ]journal_size_li
8ad0: 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  mit.  **  PRAGMA
8ae0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72   [database.]jour
8af0: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e  nal_size_limit=N
8b00: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f  .  **.  ** Get o
8b10: 72 20 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c  r set the size l
8b20: 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b  imit on rollback
8b30: 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a   journal files..
8b40: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
8b50: 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45  Typ_JOURNAL_SIZE
8b60: 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61  _LIMIT: {.    Pa
8b70: 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71  ger *pPager = sq
8b80: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
8b90: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69  pDb->pBt);.    i
8ba0: 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a  64 iLimit = -2;.
8bb0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
8bc0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44  {.      sqlite3D
8bd0: 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69  ecOrHexToI64(zRi
8be0: 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20  ght, &iLimit);. 
8bf0: 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c       if( iLimit<
8c00: 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31  -1 ) iLimit = -1
8c10: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d  ;.    }.    iLim
8c20: 69 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  it = sqlite3Page
8c30: 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69  rJournalSizeLimi
8c40: 74 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74  t(pPager, iLimit
8c50: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e  );.    returnSin
8c60: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
8c70: 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d  journal_size_lim
8c80: 69 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20  it", iLimit);.  
8c90: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65    break;.  }..#e
8ca0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
8cb0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
8cc0: 53 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  S */..  /*.  ** 
8cd0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
8ce0: 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20  e.]auto_vacuum. 
8cf0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
8d00: 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75  abase.]auto_vacu
8d10: 75 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47  um=N.  **.  ** G
8d20: 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  et or set the va
8d30: 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
8d40: 61 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75 6d  ase 'auto-vacuum
8d50: 27 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a  ' parameter..  *
8d60: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 6f  * The value is o
8d70: 6e 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31  ne of:  0 NONE 1
8d80: 20 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e   FULL 2 INCREMEN
8d90: 54 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66  TAL.  */.#ifndef
8da0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
8db0: 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50  OVACUUM.  case P
8dc0: 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55  ragTyp_AUTO_VACU
8dd0: 55 4d 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  UM: {.    Btree 
8de0: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
8df0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
8e00: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
8e10: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
8e20: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
8e30: 70 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76 61  pParse, "auto_va
8e40: 63 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42 74  cuum", sqlite3Bt
8e50: 72 65 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d  reeGetAutoVacuum
8e60: 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73  (pBt));.    }els
8e70: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75  e{.      int eAu
8e80: 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75  to = getAutoVacu
8e90: 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  um(zRight);.    
8ea0: 20 20 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e    assert( eAuto>
8eb0: 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29  =0 && eAuto<=2 )
8ec0: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74  ;.      db->next
8ed0: 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41  Autovac = (u8)eA
8ee0: 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61  uto;.      /* Ca
8ef0: 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d  ll SetAutoVacuum
8f00: 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61  () to set initia
8f10: 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61  lize the interna
8f20: 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20  l auto and.     
8f30: 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20   ** incr-vacuum 
8f40: 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20 72  flags. This is r
8f50: 65 71 75 69 72 65 64 20 69 6e 20 63 61 73 65 20  equired in case 
8f60: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a  this connection.
8f70: 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73        ** creates
8f80: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
8f90: 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74  le. It is import
8fa0: 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20 63  ant that it is c
8fb0: 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20  reated.      ** 
8fc0: 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  as an auto-vacuu
8fd0: 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20 20  m capable db..  
8fe0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63 20      */.      rc 
8ff0: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
9000: 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c  tAutoVacuum(pBt,
9010: 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 69   eAuto);.      i
9020: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
9030: 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c   && (eAuto==1 ||
9040: 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20   eAuto==2) ){.  
9050: 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73 65        /* When se
9060: 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f 76  tting the auto_v
9070: 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69  acuum mode to ei
9080: 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a  ther "full" or .
9090: 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72          ** "incr
90a0: 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20  emental", write 
90b0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74  the value of met
90c0: 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61  a[6] in the data
90d0: 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  base.        ** 
90e0: 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69  file. Before wri
90f0: 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c  ting to meta[6],
9100: 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61   check that meta
9110: 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20  [3] indicates.  
9120: 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
9130: 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20  is really is an 
9140: 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61  auto-vacuum capa
9150: 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  ble database..  
9160: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
9170: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e   static const in
9180: 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46  t iLn = VDBE_OFF
9190: 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20  SET_LINENO(2);. 
91a0: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
91b0: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73  nst VdbeOpList s
91c0: 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20  etMeta6[] = {.  
91d0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61          { OP_Tra
91e0: 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20  nsaction,    0, 
91f0: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
9200: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
9210: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
9220: 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
9230: 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20 20 20  kie,     0,     
9240: 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 42      1,         B
9250: 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f 4f  TREE_LARGEST_ROO
9260: 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20 20 20  T_PAGE},.       
9270: 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20     { OP_If,     
9280: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
9290: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20     0,           
92a0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
92b0: 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b  2 */.          {
92c0: 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20   OP_Halt,       
92d0: 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 4f      SQLITE_OK, O
92e0: 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20 20  E_Abort,        
92f0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f    0},    /* 3 */
9300: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
9310: 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20 20  Integer,        
9320: 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20  0,         1,   
9330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d                0}
9340: 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20  ,    /* 4 */.   
9350: 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43         { OP_SetC
9360: 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20  ookie,      0,  
9370: 20 20 20 20 20 20 20 42 54 52 45 45 5f 49 4e 43         BTREE_INC
9380: 52 5f 56 41 43 55 55 4d 2c 20 31 7d 2c 20 20 20  R_VACUUM, 1},   
9390: 20 2f 2a 20 35 20 2a 2f 0a 20 20 20 20 20 20 20   /* 5 */.       
93a0: 20 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   };.        int 
93b0: 69 41 64 64 72 3b 0a 20 20 20 20 20 20 20 20 69  iAddr;.        i
93c0: 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  Addr = sqlite3Vd
93d0: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
93e0: 72 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61  rraySize(setMeta
93f0: 36 29 2c 20 73 65 74 4d 65 74 61 36 2c 20 69 4c  6), setMeta6, iL
9400: 6e 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  n);.        sqli
9410: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
9420: 76 2c 20 69 41 64 64 72 2c 20 69 44 62 29 3b 0a  v, iAddr, iDb);.
9430: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9440: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69  dbeChangeP1(v, i
9450: 41 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20  Addr+1, iDb);.  
9460: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9470: 65 43 68 61 6e 67 65 50 32 28 76 2c 20 69 41 64  eChangeP2(v, iAd
9480: 64 72 2b 32 2c 20 69 41 64 64 72 2b 34 29 3b 0a  dr+2, iAddr+4);.
9490: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
94a0: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69  dbeChangeP1(v, i
94b0: 41 64 64 72 2b 34 2c 20 65 41 75 74 6f 2d 31 29  Addr+4, eAuto-1)
94c0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
94d0: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
94e0: 20 69 41 64 64 72 2b 35 2c 20 69 44 62 29 3b 0a   iAddr+5, iDb);.
94f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
9500: 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20  dbeUsesBtree(v, 
9510: 69 44 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  iDb);.      }.  
9520: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
9530: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a   }.#endif..  /*.
9540: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
9550: 74 61 62 61 73 65 2e 5d 69 6e 63 72 65 6d 65 6e  tabase.]incremen
9560: 74 61 6c 5f 76 61 63 75 75 6d 28 4e 29 0a 20 20  tal_vacuum(N).  
9570: 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20 73 74 65  **.  ** Do N ste
9580: 70 73 20 6f 66 20 69 6e 63 72 65 6d 65 6e 74 61  ps of incrementa
9590: 6c 20 76 61 63 75 75 6d 69 6e 67 20 6f 6e 20 61  l vacuuming on a
95a0: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a   database..  */.
95b0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
95c0: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20  MIT_AUTOVACUUM. 
95d0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e   case PragTyp_IN
95e0: 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d  CREMENTAL_VACUUM
95f0: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69 6d  : {.    int iLim
9600: 69 74 2c 20 61 64 64 72 3b 0a 20 20 20 20 69 66  it, addr;.    if
9610: 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21  ( zRight==0 || !
9620: 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
9630: 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29  zRight, &iLimit)
9640: 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b   || iLimit<=0 ){
9650: 0a 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20  .      iLimit = 
9660: 30 78 37 66 66 66 66 66 66 66 3b 0a 20 20 20 20  0x7fffffff;.    
9670: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42 65 67  }.    sqlite3Beg
9680: 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
9690: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29  (pParse, 0, iDb)
96a0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
96b0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
96c0: 74 65 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20 31  teger, iLimit, 1
96d0: 29 3b 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71  );.    addr = sq
96e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
96f0: 76 2c 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  v, OP_IncrVacuum
9700: 2c 20 69 44 62 29 3b 20 56 64 62 65 43 6f 76 65  , iDb); VdbeCove
9710: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71 6c  rage(v);.    sql
9720: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
9730: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
9740: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
9750: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
9760: 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a  AddImm, 1, -1);.
9770: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9780: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp2(v, OP_IfPo
9790: 73 2c 20 31 2c 20 61 64 64 72 29 3b 20 56 64 62  s, 1, addr); Vdb
97a0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
97b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
97c0: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
97d0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
97e0: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
97f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
9800: 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
9810: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
9820: 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65  base.]cache_size
9830: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
9840: 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73  atabase.]cache_s
9850: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
9860: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
9870: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
9880: 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67  nt local setting
9890: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61   for the.  ** pa
98a0: 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54  ge cache size. T
98b0: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73  he second form s
98c0: 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20  ets the local.  
98d0: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
98e0: 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20  ze value.  If N 
98f0: 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e  is positive then
9900: 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a   that is the.  *
9910: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
9920: 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20  s in the cache. 
9930: 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76   If N is negativ
9940: 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  e, then the.  **
9950: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
9960: 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20   is adjusted so 
9970: 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75  that the cache u
9980: 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73  ses -N kibibytes
9990: 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e  .  ** of memory.
99a0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
99b0: 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a  gTyp_CACHE_SIZE:
99c0: 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73   {.    assert( s
99d0: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
99e0: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
99f0: 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  ) );.    if( !zR
9a00: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
9a10: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
9a20: 61 72 73 65 2c 20 22 63 61 63 68 65 5f 73 69 7a  arse, "cache_siz
9a30: 65 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  e", pDb->pSchema
9a40: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
9a50: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
9a60: 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74  int size = sqlit
9a70: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
9a80: 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65        pDb->pSche
9a90: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d  ma->cache_size =
9aa0: 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c   size;.      sql
9ab0: 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
9ac0: 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20  eSize(pDb->pBt, 
9ad0: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
9ae0: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
9af0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
9b00: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
9b10: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 6d  MA [database.]mm
9b20: 61 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a  ap_size(N).  **.
9b30: 20 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74    ** Used to set
9b40: 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69   mapping size li
9b50: 6d 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67  mit. The mapping
9b60: 20 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20   size limit is. 
9b70: 20 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69   ** used to limi
9b80: 74 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  t the aggregate 
9b90: 73 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f  size of all memo
9ba0: 72 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e  ry mapped region
9bb0: 73 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61  s of the.  ** da
9bc0: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20  tabase file. If 
9bd0: 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 69  this parameter i
9be0: 73 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74  s set to zero, t
9bf0: 68 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69  hen memory mappi
9c00: 6e 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75  ng.  ** is not u
9c10: 73 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20  sed at all.  If 
9c20: 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74  N is negative, t
9c30: 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20  hen the default 
9c40: 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20  memory map.  ** 
9c50: 6c 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64  limit determined
9c60: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66   by sqlite3_conf
9c70: 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
9c80: 5f 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73  _MMAP_SIZE) is s
9c90: 65 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72  et..  ** The par
9ca0: 61 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73  ameter N is meas
9cb0: 75 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20  ured in bytes.. 
9cc0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61   **.  ** This va
9cd0: 6c 75 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e  lue is advisory.
9ce0: 20 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67    The underlying
9cf0: 20 56 46 53 20 69 73 20 66 72 65 65 20 74 6f 20   VFS is free to 
9d00: 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20  memory map.  ** 
9d10: 61 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20  as little or as 
9d20: 6d 75 63 68 20 61 73 20 69 74 20 77 61 6e 74 73  much as it wants
9d30: 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20  .  Except, if N 
9d40: 69 73 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e  is set to 0 then
9d50: 20 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20   the.  ** upper 
9d60: 6c 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65  layers will neve
9d70: 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65  r invoke the xFe
9d80: 74 63 68 20 69 6e 74 65 72 66 61 63 65 73 20 74  tch interfaces t
9d90: 6f 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a  o the VFS..  */.
9da0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d    case PragTyp_M
9db0: 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20  MAP_SIZE: {.    
9dc0: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
9dd0: 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ;.#if SQLITE_MAX
9de0: 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20  _MMAP_SIZE>0.   
9df0: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
9e00: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
9e10: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
9e20: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
9e30: 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20  .      int ii;. 
9e40: 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f       sqlite3DecO
9e50: 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74  rHexToI64(zRight
9e60: 2c 20 26 73 7a 29 3b 0a 20 20 20 20 20 20 69 66  , &sz);.      if
9e70: 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71  ( sz<0 ) sz = sq
9e80: 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69  lite3GlobalConfi
9e90: 67 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20  g.szMmap;.      
9ea0: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29  if( pId2->n==0 )
9eb0: 20 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a   db->szMmap = sz
9ec0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64  ;.      for(ii=d
9ed0: 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b  b->nDb-1; ii>=0;
9ee0: 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20   ii--){.        
9ef0: 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  if( db->aDb[ii].
9f00: 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20  pBt && (ii==iDb 
9f10: 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29  || pId2->n==0) )
9f20: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
9f30: 74 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c  te3BtreeSetMmapL
9f40: 69 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d  imit(db->aDb[ii]
9f50: 2e 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20  .pBt, sz);.     
9f60: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
9f70: 20 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a   }.    sz = -1;.
9f80: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
9f90: 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
9fa0: 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43  , zDb, SQLITE_FC
9fb0: 4e 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26  NTL_MMAP_SIZE, &
9fc0: 73 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73  sz);.#else.    s
9fd0: 7a 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20  z = 0;.    rc = 
9fe0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69  SQLITE_OK;.#endi
9ff0: 66 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  f.    if( rc==SQ
a000: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
a010: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
a020: 28 70 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f 73  (pParse, "mmap_s
a030: 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20 7d  ize", sz);.    }
a040: 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c  else if( rc!=SQL
a050: 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a  ITE_NOTFOUND ){.
a060: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45        pParse->nE
a070: 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61 72  rr++;.      pPar
a080: 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20  se->rc = rc;.   
a090: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
a0a0: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  }..  /*.  **   P
a0b0: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
a0c0: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
a0d0: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65 66  emp_store = "def
a0e0: 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22  ault"|"memory"|"
a0f0: 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  file".  **.  ** 
a100: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
a110: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
a120: 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 20   the temp_store 
a130: 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a  flag.  Changing.
a140: 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76    ** the local v
a150: 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61  alue does not ma
a160: 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ke changes to th
a170: 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20  e disk file and 
a180: 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a  the default.  **
a190: 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72   value will be r
a1a0: 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74  estored the next
a1b0: 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61   time the databa
a1c0: 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20  se is opened..  
a1d0: 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61  **.  ** Note tha
a1e0: 74 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65  t it is possible
a1f0: 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72 79   for the library
a200: 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
a210: 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76  tions to.  ** ov
a220: 65 72 72 69 64 65 20 74 68 69 73 20 73 65 74 74  erride this sett
a230: 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ing.  */.  case 
a240: 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f  PragTyp_TEMP_STO
a250: 52 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a  RE: {.    if( !z
a260: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
a270: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
a280: 50 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74 6f  Parse, "temp_sto
a290: 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74  re", db->temp_st
a2a0: 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ore);.    }else{
a2b0: 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d  .      changeTem
a2c0: 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c  pStorage(pParse,
a2d0: 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a   zRight);.    }.
a2e0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
a2f0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
a300: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
a310: 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50  rectory.  **   P
a320: 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
a330: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c  _directory = ""|
a340: 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22  "directory_name"
a350: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
a360: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63  n or set the loc
a370: 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
a380: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
a390: 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e  tory flag.  Chan
a3a0: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61  ging.  ** the va
a3b0: 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69  lue sets a speci
a3c0: 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f  fic directory to
a3d0: 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d   be used for tem
a3e0: 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20  porary files..  
a3f0: 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20  ** Setting to a 
a400: 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65  null string reve
a410: 72 74 73 20 74 6f 20 74 68 65 20 64 65 66 61 75  rts to the defau
a420: 6c 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  lt temporary dir
a430: 65 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20  ectory search.. 
a440: 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79   ** If temporary
a450: 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68   directory is ch
a460: 61 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61  anged, then inva
a470: 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67  lidateTempStorag
a480: 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63  e..  **.  */.  c
a490: 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50  ase PragTyp_TEMP
a4a0: 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59  _STORE_DIRECTORY
a4b0: 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  : {.    if( !zRi
a4c0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ght ){.      if(
a4d0: 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69   sqlite3_temp_di
a4e0: 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20  rectory ){.     
a4f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
a500: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
a510: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a520: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
a530: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
a540: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
a550: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
a560: 74 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53 54  tory", SQLITE_ST
a570: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
a580: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
a590: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
a5a0: 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65 33  0, 1, 0, sqlite3
a5b0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c  _temp_directory,
a5c0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
a5d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
a5e0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
a5f0: 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 1);.      }. 
a600: 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65     }else{.#ifnde
a610: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  f SQLITE_OMIT_WS
a620: 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  D.      if( zRig
a630: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
a640: 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20   int res;.      
a650: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73    rc = sqlite3Os
a660: 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c  Access(db->pVfs,
a670: 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f   zRight, SQLITE_
a680: 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45  ACCESS_READWRITE
a690: 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20  , &res);.       
a6a0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
a6b0: 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a  OK || res==0 ){.
a6c0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
a6d0: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
a6e0: 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c  , "not a writabl
a6f0: 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20  e directory");. 
a700: 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72           goto pr
a710: 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20  agma_out;.      
a720: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
a730: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45 4d    if( SQLITE_TEM
a740: 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20  P_STORE==0.     
a750: 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d    || (SQLITE_TEM
a760: 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64 62  P_STORE==1 && db
a770: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29  ->temp_store<=1)
a780: 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49  .       || (SQLI
a790: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32  TE_TEMP_STORE==2
a7a0: 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f   && db->temp_sto
a7b0: 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a  re==1).      ){.
a7c0: 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 61          invalida
a7d0: 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50  teTempStorage(pP
a7e0: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  arse);.      }. 
a7f0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
a800: 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64  e(sqlite3_temp_d
a810: 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20  irectory);.     
a820: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
a830: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
a840: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
a850: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
a860: 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29  tf("%s", zRight)
a870: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
a880: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74         sqlite3_t
a890: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  emp_directory = 
a8a0: 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  0;.      }.#endi
a8b0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
a8c0: 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  _WSD */.    }.  
a8d0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69    break;.  }..#i
a8e0: 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a  f SQLITE_OS_WIN.
a8f0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
a900: 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  MA data_store_di
a910: 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50  rectory.  **   P
a920: 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65  RAGMA data_store
a930: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c  _directory = ""|
a940: 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22  "directory_name"
a950: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
a960: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63  n or set the loc
a970: 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
a980: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
a990: 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e  tory flag.  Chan
a9a0: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61  ging.  ** the va
a9b0: 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69  lue sets a speci
a9c0: 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f  fic directory to
a9d0: 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74   be used for dat
a9e0: 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61 74  abase files that
a9f0: 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63 69  .  ** were speci
aa00: 66 69 65 64 20 77 69 74 68 20 61 20 72 65 6c 61  fied with a rela
aa10: 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20 20  tive pathname.  
aa20: 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c  Setting to a nul
aa30: 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73  l string reverts
aa40: 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65 66  .  ** to the def
aa50: 61 75 6c 74 20 64 61 74 61 62 61 73 65 20 64 69  ault database di
aa60: 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20 66  rectory, which f
aa70: 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  or database file
aa80: 73 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68  s specified with
aa90: 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76 65  .  ** a relative
aaa0: 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62 61   path will proba
aab0: 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e 20  bly be based on 
aac0: 74 68 65 20 63 75 72 72 65 6e 74 20 64 69 72 65  the current dire
aad0: 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20 20  ctory for the.  
aae0: 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61 74  ** process.  Dat
aaf0: 61 62 61 73 65 20 66 69 6c 65 20 73 70 65 63 69  abase file speci
ab00: 66 69 65 64 20 77 69 74 68 20 61 6e 20 61 62 73  fied with an abs
ab10: 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65 20 6e  olute path are n
ab20: 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a  ot impacted.  **
ab30: 20 62 79 20 74 68 69 73 20 73 65 74 74 69 6e 67   by this setting
ab40: 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
ab50: 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a  its value..  **.
ab60: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
ab70: 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44  Typ_DATA_STORE_D
ab80: 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20  IRECTORY: {.    
ab90: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
aba0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
abb0: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20  _data_directory 
abc0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
abd0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
abe0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20  (v, 1);.        
abf0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
ac00: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
ac10: 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20  AME_NAME, .     
ac20: 20 20 20 20 20 20 20 22 64 61 74 61 5f 73 74 6f         "data_sto
ac30: 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 53  re_directory", S
ac40: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
ac50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ac60: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
ac70: 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c  tring8, 0, 1, 0,
ac80: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
ac90: 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20  rectory, 0);.   
aca0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
acb0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
acc0: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
acd0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
ace0: 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  {.#ifndef SQLITE
acf0: 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20  _OMIT_WSD.      
ad00: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
ad10: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73  .        int res
ad20: 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  ;.        rc = s
ad30: 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64  qlite3OsAccess(d
ad40: 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c  b->pVfs, zRight,
ad50: 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52   SQLITE_ACCESS_R
ad60: 45 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b  EADWRITE, &res);
ad70: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
ad80: 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65  =SQLITE_OK || re
ad90: 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  s==0 ){.        
ada0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
adb0: 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61  g(pParse, "not a
adc0: 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74   writable direct
add0: 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20  ory");.         
ade0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
adf0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
ae00: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
ae10: 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64  3_free(sqlite3_d
ae20: 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  ata_directory);.
ae30: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
ae40: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  [0] ){.        s
ae50: 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65  qlite3_data_dire
ae60: 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  ctory = sqlite3_
ae70: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52  mprintf("%s", zR
ae80: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ight);.      }el
ae90: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
aea0: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
aeb0: 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ry = 0;.      }.
aec0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
aed0: 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20  _OMIT_WSD */.   
aee0: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
aef0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51  }.#endif..#if SQ
af00: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b  LITE_ENABLE_LOCK
af10: 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20  ING_STYLE.  /*. 
af20: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
af30: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f  tabase.]lock_pro
af40: 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50  xy_file.  **   P
af50: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
af60: 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65  ]lock_proxy_file
af70: 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63   = ":auto:"|"loc
af80: 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a  k_file_path".  *
af90: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72  *.  ** Return or
afa0: 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   set the value o
afb0: 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79  f the lock_proxy
afc0: 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61  _file flag.  Cha
afd0: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
afe0: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
aff0: 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20  ific file to be 
b000: 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61 73  used for databas
b010: 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a  e access locks..
b020: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
b030: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52   PragTyp_LOCK_PR
b040: 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20  OXY_FILE: {.    
b050: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
b060: 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67       Pager *pPag
b070: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
b080: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
b090: 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72  ;.      char *pr
b0a0: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20  oxy_file_path = 
b0b0: 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69  NULL;.      sqli
b0c0: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
b0d0: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
b0e0: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
b0f0: 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43    sqlite3OsFileC
b100: 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65  ontrolHint(pFile
b110: 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43  , SQLITE_GET_LOC
b120: 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20  KPROXYFILE, .   
b130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b140: 20 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66          &proxy_f
b150: 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20  ile_path);.     
b160: 20 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f 78   .      if( prox
b170: 79 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a 20  y_file_path ){. 
b180: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b190: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
b1a0: 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  1);.        sqli
b1b0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
b1c0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
b1d0: 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20  NAME, .         
b1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1f0: 20 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78 79       "lock_proxy
b200: 5f 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53  _file", SQLITE_S
b210: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
b220: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b230: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
b240: 20 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79 5f   0, 1, 0, proxy_
b250: 66 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a 20  file_path, 0);. 
b260: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b270: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
b280: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
b290: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
b2a0: 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20  se{.      Pager 
b2b0: 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65  *pPager = sqlite
b2c0: 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d  3BtreePager(pDb-
b2d0: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71 6c  >pBt);.      sql
b2e0: 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65  ite3_file *pFile
b2f0: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
b300: 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20  ile(pPager);.   
b310: 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20     int res;.    
b320: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
b330: 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73  ){.        res=s
b340: 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74  qlite3OsFileCont
b350: 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54  rol(pFile, SQLIT
b360: 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46  E_SET_LOCKPROXYF
b370: 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ILE, .          
b380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b390: 20 20 20 20 20 20 20 20 20 20 20 7a 52 69 67 68             zRigh
b3a0: 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  t);.      } else
b3b0: 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73   {.        res=s
b3c0: 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74  qlite3OsFileCont
b3d0: 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54  rol(pFile, SQLIT
b3e0: 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46  E_SET_LOCKPROXYF
b3f0: 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ILE, .          
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b410: 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 29             NULL)
b420: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
b430: 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45 5f  if( res!=SQLITE_
b440: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  OK ){.        sq
b450: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
b460: 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74 6f  arse, "failed to
b470: 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20   set lock proxy 
b480: 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20 20  file");.        
b490: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
b4a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
b4b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
b4c0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45  ndif /* SQLITE_E
b4d0: 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54  NABLE_LOCKING_ST
b4e0: 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20 20  YLE */      .   
b4f0: 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52   .  /*.  **   PR
b500: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
b510: 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a  synchronous.  **
b520: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
b530: 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ase.]synchronous
b540: 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46  =OFF|ON|NORMAL|F
b550: 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  ULL.  **.  ** Re
b560: 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20  turn or set the 
b570: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  local value of t
b580: 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66  he synchronous f
b590: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
b5a0: 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61   ** the local va
b5b0: 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b  lue does not mak
b5c0: 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
b5d0: 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74   disk file and t
b5e0: 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20  he.  ** default 
b5f0: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65  value will be re
b600: 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20  stored the next 
b610: 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73  time the databas
b620: 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64  e is.  ** opened
b630: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
b640: 61 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55  agTyp_SYNCHRONOU
b650: 53 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  S: {.    if( !zR
b660: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
b670: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
b680: 61 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f  arse, "synchrono
b690: 75 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20  us", .          
b6a0: 20 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65 74    SQLITE_DbSafet
b6b0: 79 4c 65 76 65 6c 56 61 6c 75 65 28 70 44 62 2d  yLevelValue(pDb-
b6c0: 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 29 2d 31  >safety_level)-1
b6d0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
b6e0: 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74      if( !db->aut
b6f0: 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20  oCommit ){.     
b700: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
b710: 73 67 28 70 50 61 72 73 65 2c 20 0a 20 20 20 20  sg(pParse, .    
b720: 20 20 20 20 20 20 20 20 22 53 61 66 65 74 79 20          "Safety 
b730: 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65  level may not be
b740: 20 63 68 61 6e 67 65 64 20 69 6e 73 69 64 65 20   changed inside 
b750: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b  a transaction");
b760: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
b770: 20 20 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74        pDb->safet
b780: 79 5f 6c 65 76 65 6c 20 3d 20 28 67 65 74 53 61  y_level = (getSa
b790: 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68 74  fetyLevel(zRight
b7a0: 2c 30 2c 31 29 2b 31 29 0a 20 20 20 20 20 20 20  ,0,1)+1).       
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7c                 |
b7d0: 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59 4c 45   SQLITE_SAFETYLE
b7e0: 56 45 4c 5f 46 49 58 45 44 3b 0a 20 20 20 20 20  VEL_FIXED;.     
b7f0: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
b800: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ags(db);.      }
b810: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
b820: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
b830: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
b840: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  R_PRAGMAS */..#i
b850: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b860: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20  T_FLAG_PRAGMAS. 
b870: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c   case PragTyp_FL
b880: 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  AG: {.    if( zR
b890: 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ight==0 ){.     
b8a0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
b8b0: 28 70 50 61 72 73 65 2c 20 61 50 72 61 67 6d 61  (pParse, aPragma
b8c0: 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65  Names[mid].zName
b8d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
b8e0: 20 20 20 20 20 20 20 28 64 62 2d 3e 66 6c 61 67         (db->flag
b8f0: 73 20 26 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  s & aPragmaNames
b900: 5b 6d 69 64 5d 2e 69 41 72 67 29 21 3d 30 20 29  [mid].iArg)!=0 )
b910: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
b920: 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20 61 50     int mask = aP
b930: 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e  ragmaNames[mid].
b940: 69 41 72 67 3b 20 20 20 20 2f 2a 20 4d 61 73 6b  iArg;    /* Mask
b950: 20 6f 66 20 62 69 74 73 20 74 6f 20 73 65 74 20   of bits to set 
b960: 6f 72 20 63 6c 65 61 72 2e 20 2a 2f 0a 20 20 20  or clear. */.   
b970: 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
b980: 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ommit==0 ){.    
b990: 20 20 20 20 2f 2a 20 46 6f 72 65 69 67 6e 20 6b      /* Foreign k
b9a0: 65 79 20 73 75 70 70 6f 72 74 20 6d 61 79 20 6e  ey support may n
b9b0: 6f 74 20 62 65 20 65 6e 61 62 6c 65 64 20 6f 72  ot be enabled or
b9c0: 20 64 69 73 61 62 6c 65 64 20 77 68 69 6c 65 20   disabled while 
b9d0: 6e 6f 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 69  not.        ** i
b9e0: 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f  n auto-commit mo
b9f0: 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20 20  de.  */.        
ba00: 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45  mask &= ~(SQLITE
ba10: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 29 3b 0a 20  _ForeignKeys);. 
ba20: 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66       }..      if
ba30: 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  ( sqlite3GetBool
ba40: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29  ean(zRight, 0) )
ba50: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c  {.        db->fl
ba60: 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20  ags |= mask;.   
ba70: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
ba80: 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e    db->flags &= ~
ba90: 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 69 66  mask;.        if
baa0: 28 20 6d 61 73 6b 3d 3d 53 51 4c 49 54 45 5f 44  ( mask==SQLITE_D
bab0: 65 66 65 72 46 4b 73 20 29 20 64 62 2d 3e 6e 44  eferFKs ) db->nD
bac0: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
bad0: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20   0;.      }..   
bae0: 20 20 20 2f 2a 20 4d 61 6e 79 20 6f 66 20 74 68     /* Many of th
baf0: 65 20 66 6c 61 67 2d 70 72 61 67 6d 61 73 20 6d  e flag-pragmas m
bb00: 6f 64 69 66 79 20 74 68 65 20 63 6f 64 65 20 67  odify the code g
bb10: 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
bb20: 53 51 4c 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f  SQL .      ** co
bb30: 6d 70 69 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e  mpiler (eg. coun
bb40: 74 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f 20 61  t_changes). So a
bb50: 64 64 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20  dd an opcode to 
bb60: 65 78 70 69 72 65 20 61 6c 6c 0a 20 20 20 20 20  expire all.     
bb70: 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c   ** compiled SQL
bb80: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 66 74 65   statements afte
bb90: 72 20 6d 6f 64 69 66 79 69 6e 67 20 61 20 70 72  r modifying a pr
bba0: 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20 20 20 20  agma value..    
bbb0: 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
bbc0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
bbd0: 4f 50 5f 45 78 70 69 72 65 2c 20 30 2c 20 30 29  OP_Expire, 0, 0)
bbe0: 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61  ;.      setAllPa
bbf0: 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20  gerFlags(db);.  
bc00: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
bc10: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
bc20: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
bc30: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
bc40: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  f SQLITE_OMIT_SC
bc50: 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f  HEMA_PRAGMAS.  /
bc60: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
bc70: 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c  table_info(<tabl
bc80: 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  e>).  **.  ** Re
bc90: 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  turn a single ro
bca0: 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  w for each colum
bcb0: 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74  n of the named t
bcc0: 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e  able. The column
bcd0: 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65  s of.  ** the re
bce0: 74 75 72 6e 65 64 20 64 61 74 61 20 73 65 74 20  turned data set 
bcf0: 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63  are:.  **.  ** c
bd00: 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d  id:        Colum
bd10: 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66  n id (numbered f
bd20: 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
bd30: 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20 30  t, starting at 0
bd40: 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20  ).  ** name:    
bd50: 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20     Column name. 
bd60: 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20   ** type:       
bd70: 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  Column declarati
bd80: 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f  on type..  ** no
bd90: 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69  tnull:    True i
bda0: 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20  f 'NOT NULL' is 
bdb0: 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64  part of column d
bdc0: 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20  eclaration.  ** 
bdd0: 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20  dflt_value: The 
bde0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
bdf0: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66  r the column, if
be00: 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   any..  */.  cas
be10: 65 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45 5f  e PragTyp_TABLE_
be20: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
be30: 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   ){.    Table *p
be40: 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  Tab;.    pTab = 
be50: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
be60: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
be70: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
be80: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20  ){.      int i, 
be90: 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69  k;.      int nHi
bea0: 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  dden = 0;.      
beb0: 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20  Column *pCol;.  
bec0: 20 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d      Index *pPk =
bed0: 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b   sqlite3PrimaryK
bee0: 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20  eyIndex(pTab);. 
bef0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bf00: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29  SetNumCols(v, 6)
bf10: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
bf20: 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20  nMem = 6;.      
bf30: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
bf40: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
bf50: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
bf60: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
bf70: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
bf80: 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20 53 51 4c  NAME, "cid", SQL
bf90: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
bfa0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
bfb0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
bfc0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
bfd0: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
bfe0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
bff0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c000: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
c010: 41 4d 45 2c 20 22 74 79 70 65 22 2c 20 53 51 4c  AME, "type", SQL
c020: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c030: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c040: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43  tColName(v, 3, C
c050: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 6f  OLNAME_NAME, "no
c060: 74 6e 75 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53  tnull", SQLITE_S
c070: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
c080: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
c090: 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d  ame(v, 4, COLNAM
c0a0: 45 5f 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76 61  E_NAME, "dflt_va
c0b0: 6c 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  lue", SQLITE_STA
c0c0: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
c0d0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c0e0: 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 5, COLNAME_
c0f0: 4e 41 4d 45 2c 20 22 70 6b 22 2c 20 53 51 4c 49  NAME, "pk", SQLI
c100: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
c110: 20 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74    sqlite3ViewGet
c120: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72  ColumnNames(pPar
c130: 73 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20  se, pTab);.     
c140: 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70   for(i=0, pCol=p
c150: 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61  Tab->aCol; i<pTa
c160: 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43  b->nCol; i++, pC
c170: 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  ol++){.        i
c180: 66 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  f( IsHiddenColum
c190: 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20  n(pCol) ){.     
c1a0: 20 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a       nHidden++;.
c1b0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
c1c0: 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ue;.        }.  
c1d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c1e0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c1f0: 74 65 67 65 72 2c 20 69 2d 6e 48 69 64 64 65 6e  teger, i-nHidden
c200: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 1);.        sq
c210: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c220: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c230: 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e  , 2, 0, pCol->zN
c240: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ame, 0);.       
c250: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c260: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
c270: 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20  , 0, 3, 0,.     
c280: 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70        pCol->zTyp
c290: 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20  e ? pCol->zType 
c2a0: 3a 20 22 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  : "", 0);.      
c2b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c2c0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c2d0: 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c  r, (pCol->notNul
c2e0: 6c 20 3f 20 31 20 3a 20 30 29 2c 20 34 29 3b 0a  l ? 1 : 0), 4);.
c2f0: 20 20 20 20 20 20 20 20 69 66 28 20 70 43 6f 6c          if( pCol
c300: 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20 20 20 20 20  ->zDflt ){.     
c310: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c320: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
c330: 69 6e 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20 28  ing8, 0, 5, 0, (
c340: 63 68 61 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66 6c  char*)pCol->zDfl
c350: 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  t, 0);.        }
c360: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
c370: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c380: 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c  2(v, OP_Null, 0,
c390: 20 35 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   5);.        }. 
c3a0: 20 20 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c         if( (pCol
c3b0: 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
c3c0: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30  FLAG_PRIMKEY)==0
c3d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20   ){.          k 
c3e0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 0;.        }el
c3f0: 73 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b  se if( pPk==0 ){
c400: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31  .          k = 1
c410: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
c420: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b  .          for(k
c430: 3d 31 3b 20 41 4c 57 41 59 53 28 6b 3c 3d 70 54  =1; ALWAYS(k<=pT
c440: 61 62 2d 3e 6e 43 6f 6c 29 20 26 26 20 70 50 6b  ab->nCol) && pPk
c450: 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21  ->aiColumn[k-1]!
c460: 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20  =i; k++){}.     
c470: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
c480: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c490: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6b 2c  , OP_Integer, k,
c4a0: 20 36 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   6);.        sql
c4b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c4c0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
c4d0: 31 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 6);.      }. 
c4e0: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
c4f0: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
c500: 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 49  p_STATS: {.    I
c510: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
c520: 48 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 20  HashElem *i;.   
c530: 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   v = sqlite3GetV
c540: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20  dbe(pParse);.   
c550: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
c560: 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20  umCols(v, 4);.  
c570: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
c580: 20 34 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   4;.    sqlite3C
c590: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
c5a0: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
c5b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c5c0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
c5d0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62  LNAME_NAME, "tab
c5e0: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  le", SQLITE_STAT
c5f0: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
c600: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
c610: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
c620: 45 2c 20 22 69 6e 64 65 78 22 2c 20 53 51 4c 49  E, "index", SQLI
c630: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
c640: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
c650: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
c660: 41 4d 45 5f 4e 41 4d 45 2c 20 22 77 69 64 74 68  AME_NAME, "width
c670: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
c680: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
c690: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
c6a0: 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  3, COLNAME_NAME,
c6b0: 20 22 68 65 69 67 68 74 22 2c 20 53 51 4c 49 54   "height", SQLIT
c6c0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66  E_STATIC);.    f
c6d0: 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46  or(i=sqliteHashF
c6e0: 69 72 73 74 28 26 70 44 62 2d 3e 70 53 63 68 65  irst(&pDb->pSche
c6f0: 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b  ma->tblHash); i;
c700: 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   i=sqliteHashNex
c710: 74 28 69 29 29 7b 0a 20 20 20 20 20 20 54 61 62  t(i)){.      Tab
c720: 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74  le *pTab = sqlit
c730: 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20  eHashData(i);.  
c740: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c750: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
c760: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70 54  ng8, 0, 1, 0, pT
c770: 61 62 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  ab->zName, 0);. 
c780: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c790: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c  AddOp2(v, OP_Nul
c7a0: 6c 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20 20 20  l, 0, 2);.      
c7b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c7c0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c7e0: 20 20 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 73 7a 54 61 62 52  Int(pTab->szTabR
c810: 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 73  ow), 3);.      s
c820: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c830: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c840: 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29  .          (int)
c850: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
c860: 6e 74 28 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67  nt(pTab->nRowLog
c870: 45 73 74 29 2c 20 34 29 3b 0a 20 20 20 20 20 20  Est), 4);.      
c880: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c890: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
c8a0: 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20  w, 1, 4);.      
c8b0: 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70  for(pIdx=pTab->p
c8c0: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
c8d0: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a  x=pIdx->pNext){.
c8e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c8f0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
c900: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
c910: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30  , pIdx->zName, 0
c920: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c930: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c940: 4f 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20  OP_Integer,.    
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c960: 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71           (int)sq
c970: 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
c980: 28 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77 29  (pIdx->szIdxRow)
c990: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 3);.        sq
c9a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c9b0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 0a  v, OP_Integer, .
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
c9d0: 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f  )sqlite3LogEstTo
c9e0: 49 6e 74 28 70 49 64 78 2d 3e 61 69 52 6f 77 4c  Int(pIdx->aiRowL
c9f0: 6f 67 45 73 74 5b 30 5d 29 2c 20 34 29 3b 0a 20  ogEst[0]), 4);. 
ca00: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ca10: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
ca20: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b  esultRow, 1, 4);
ca30: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
ca40: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
ca50: 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45  ase PragTyp_INDE
ca60: 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67  X_INFO: if( zRig
ca70: 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20  ht ){.    Index 
ca80: 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65  *pIdx;.    Table
ca90: 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78   *pTab;.    pIdx
caa0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e   = sqlite3FindIn
cab0: 64 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  dex(db, zRight, 
cac0: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49  zDb);.    if( pI
cad0: 64 78 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  dx ){.      int 
cae0: 69 3b 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20  i;.      pTab = 
caf0: 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20  pIdx->pTable;.  
cb00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
cb10: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b  etNumCols(v, 3);
cb20: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
cb30: 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 73  Mem = 3;.      s
cb40: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
cb50: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
cb60: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
cb70: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
cb80: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
cb90: 41 4d 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51  AME, "seqno", SQ
cba0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
cbb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
cbc0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
cbd0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
cbe0: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
cbf0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
cc00: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
cc10: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
cc20: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
cc30: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
cc40: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 49     for(i=0; i<pI
cc50: 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 69 2b 2b  dx->nKeyCol; i++
cc60: 29 7b 0a 20 20 20 20 20 20 20 20 69 31 36 20 63  ){.        i16 c
cc70: 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f  num = pIdx->aiCo
cc80: 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20  lumn[i];.       
cc90: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cca0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
ccb0: 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , i, 1);.       
ccc0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ccd0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
cce0: 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20 20  , cnum, 2);.    
ccf0: 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
cd00: 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20  ->nCol>cnum );. 
cd10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cd20: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
cd30: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
cd40: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d   pTab->aCol[cnum
cd50: 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ].zName, 0);.   
cd60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cd70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
cd80: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
cd90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
cda0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
cdb0: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
cdc0: 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74  LIST: if( zRight
cdd0: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
cde0: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
cdf0: 70 54 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b  pTab;.    int i;
ce00: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
ce10: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
ce20: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
ce30: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
ce40: 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
ce50: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
ce60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
ce70: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
ce80: 33 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65  3);.      pParse
ce90: 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20  ->nMem = 3;.    
cea0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
ceb0: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
cec0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
ced0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
cee0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
cef0: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53  E_NAME, "seq", S
cf00: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
cf10: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cf20: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
cf30: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
cf40: 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  name", SQLITE_ST
cf50: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
cf60: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
cf70: 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
cf80: 5f 4e 41 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c  _NAME, "unique",
cf90: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
cfa0: 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d  .      for(pIdx=
cfb0: 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d  pTab->pIndex, i=
cfc0: 30 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  0; pIdx; pIdx=pI
cfd0: 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b  dx->pNext, i++){
cfe0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
cff0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d000: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
d010: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d020: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
d030: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
d040: 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20  0, pIdx->zName, 
d050: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
d060: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d070: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 49 73 55   OP_Integer, IsU
d080: 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29  niqueIndex(pIdx)
d090: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 3);.        sq
d0a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d0b0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
d0c0: 20 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 3);.      }.
d0d0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
d0e0: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
d0f0: 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54  yp_DATABASE_LIST
d100: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20  : {.    int i;. 
d110: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d120: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a  tNumCols(v, 3);.
d130: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
d140: 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 3;.    sqlite
d150: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d160: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
d170: 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54  ME, "seq", SQLIT
d180: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
d190: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
d1a0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
d1b0: 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c  ME_NAME, "name",
d1c0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
d1d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d1e0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
d1f0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d200: 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  file", SQLITE_ST
d210: 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69  ATIC);.    for(i
d220: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
d230: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  ++){.      if( d
d240: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30  b->aDb[i].pBt==0
d250: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
d260: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
d270: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29  Db[i].zName!=0 )
d280: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
d290: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d2a0: 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a  Integer, i, 1);.
d2b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d2c0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
d2d0: 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
d2e0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
d2f0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
d300: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
d310: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
d320: 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  3, 0,.          
d330: 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
d340: 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62  Filename(db->aDb
d350: 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20 20  [i].pBt), 0);.  
d360: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d370: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
d380: 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20  ltRow, 1, 3);.  
d390: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
d3a0: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
d3b0: 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a  _COLLATION_LIST:
d3c0: 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30   {.    int i = 0
d3d0: 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  ;.    HashElem *
d3e0: 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  p;.    sqlite3Vd
d3f0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
d400: 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  2);.    pParse->
d410: 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71  nMem = 2;.    sq
d420: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d430: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
d440: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53  E_NAME, "seq", S
d450: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
d460: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d470: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
d480: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
d490: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
d4a0: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73  IC);.    for(p=s
d4b0: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
d4c0: 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70  db->aCollSeq); p
d4d0: 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; p=sqliteHashNe
d4e0: 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f  xt(p)){.      Co
d4f0: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28  llSeq *pColl = (
d500: 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65  CollSeq *)sqlite
d510: 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20  HashData(p);.   
d520: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d530: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
d540: 65 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20 20 20  er, i++, 1);.   
d550: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d560: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
d570: 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f  g8, 0, 2, 0, pCo
d580: 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  ll->zName, 0);. 
d590: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d5a0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
d5b0: 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20  ultRow, 1, 2);. 
d5c0: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
d5d0: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
d5e0: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
d5f0: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
d600: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
d610: 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73  OREIGN_KEY.  cas
d620: 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47  e PragTyp_FOREIG
d630: 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28 20  N_KEY_LIST: if( 
d640: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46 4b  zRight ){.    FK
d650: 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62  ey *pFK;.    Tab
d660: 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54  le *pTab;.    pT
d670: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
d680: 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74  Table(db, zRight
d690: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
d6a0: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20  pTab ){.      v 
d6b0: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
d6c0: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
d6d0: 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65  pFK = pTab->pFKe
d6e0: 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b  y;.      if( pFK
d6f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   ){.        int 
d700: 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20  i = 0; .        
d710: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
d720: 6d 43 6f 6c 73 28 76 2c 20 38 29 3b 0a 20 20 20  mCols(v, 8);.   
d730: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
d740: 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 73  m = 8;.        s
d750: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
d760: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
d770: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
d780: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
d790: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
d7a0: 5f 4e 41 4d 45 2c 20 22 69 64 22 2c 20 53 51 4c  _NAME, "id", SQL
d7b0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d7c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d7d0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
d7e0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d7f0: 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  seq", SQLITE_STA
d800: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
d810: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d820: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
d830: 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c  E_NAME, "table",
d840: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
d850: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d860: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
d870: 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 3, COLNAME_NAM
d880: 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49 54  E, "from", SQLIT
d890: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
d8a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d8b0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43  tColName(v, 4, C
d8c0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 6f  OLNAME_NAME, "to
d8d0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d8e0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
d8f0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d900: 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 5, COLNAME_N
d910: 41 4d 45 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22  AME, "on_update"
d920: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d930: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d940: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d950: 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 6, COLNAME_NA
d960: 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c  ME, "on_delete",
d970: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
d980: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d990: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
d9a0: 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 7, COLNAME_NAM
d9b0: 45 2c 20 22 6d 61 74 63 68 22 2c 20 53 51 4c 49  E, "match", SQLI
d9c0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d9d0: 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a      while(pFK){.
d9e0: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b            int j;
d9f0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a  .          for(j
da00: 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b  =0; j<pFK->nCol;
da10: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
da20: 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d 20     char *zCol = 
da30: 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f  pFK->aCol[j].zCo
da40: 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  l;.            c
da50: 68 61 72 20 2a 7a 4f 6e 44 65 6c 65 74 65 20 3d  har *zOnDelete =
da60: 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e   (char *)actionN
da70: 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e  ame(pFK->aAction
da80: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [0]);.          
da90: 20 20 63 68 61 72 20 2a 7a 4f 6e 55 70 64 61 74    char *zOnUpdat
daa0: 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69  e = (char *)acti
dab0: 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74  onName(pFK->aAct
dac0: 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20  ion[1]);.       
dad0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
dae0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
daf0: 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20  eger, i, 1);.   
db00: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
db10: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
db20: 5f 49 6e 74 65 67 65 72 2c 20 6a 2c 20 32 29 3b  _Integer, j, 2);
db30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
db40: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
db50: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
db60: 20 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c   3, 0, pFK->zTo,
db70: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
db80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
db90: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
dba0: 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20  , 0, 4, 0,.     
dbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbc0: 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61           pTab->a
dbd0: 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  Col[pFK->aCol[j]
dbe0: 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30  .iFrom].zName, 0
dbf0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
dc00: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
dc10: 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53 74  (v, zCol ? OP_St
dc20: 72 69 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c 2c  ring8 : OP_Null,
dc30: 20 30 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c 20   0, 5, 0, zCol, 
dc40: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
dc50: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
dc60: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
dc70: 20 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55 70 64   0, 6, 0, zOnUpd
dc80: 61 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ate, 0);.       
dc90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
dca0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
dcb0: 69 6e 67 38 2c 20 30 2c 20 37 2c 20 30 2c 20 7a  ing8, 0, 7, 0, z
dcc0: 4f 6e 44 65 6c 65 74 65 2c 20 30 29 3b 0a 20 20  OnDelete, 0);.  
dcd0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
dce0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
dcf0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 38 2c  P_String8, 0, 8,
dd00: 20 30 2c 20 22 4e 4f 4e 45 22 2c 20 30 29 3b 0a   0, "NONE", 0);.
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
dd20: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
dd30: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
dd40: 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 8);.          
dd50: 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b  }.          ++i;
dd60: 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d  .          pFK =
dd70: 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b   pFK->pNextFrom;
dd80: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
dd90: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
dda0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
ddb0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
ddc0: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
ddd0: 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  ) */..#ifndef SQ
dde0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
ddf0: 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51  N_KEY.#ifndef SQ
de00: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
de10: 52 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  R.  case PragTyp
de20: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45  _FOREIGN_KEY_CHE
de30: 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a  CK: {.    FKey *
de40: 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20  pFK;            
de50: 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65   /* A foreign ke
de60: 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  y constraint */.
de70: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
de80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68             /* Ch
de90: 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ild table contai
dea0: 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b  n "REFERENCES" k
deb0: 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61  eyword */.    Ta
dec0: 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20  ble *pParent;   
ded0: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74       /* Parent t
dee0: 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20  able that child 
def0: 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20  points to */.   
df00: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20   Index *pIdx;   
df10: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
df20: 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74   in the parent t
df30: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
df40: 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
df50: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
df60: 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79  er:  Foreign key
df70: 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62   number for pTab
df80: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20   */.    int j;  
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dfa0: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20  * Loop counter: 
dfb0: 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f   Field of the fo
dfc0: 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20  reign key */.   
dfd0: 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20   HashElem *k;   
dfe0: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
dff0: 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74  counter:  Next t
e000: 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a  able in schema *
e010: 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20  /.    int x;    
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e030: 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20  result variable 
e040: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
e050: 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  sult;         /*
e060: 20 33 20 72 65 67 69 73 74 65 72 73 20 74 6f 20   3 registers to 
e070: 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f  hold a result ro
e080: 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  w */.    int reg
e090: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  Key;            
e0a0: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 68  /* Register to h
e0b0: 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63  old key for chec
e0c0: 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20  king the FK */. 
e0d0: 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20     int regRow;  
e0e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
e0f0: 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61  isters to hold a
e100: 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a   row from pTab *
e110: 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f  /.    int addrTo
e120: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
e130: 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68  Top of a loop ch
e140: 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b  ecking foreign k
e150: 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  eys */.    int a
e160: 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20  ddrOk;          
e170: 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69    /* Jump here i
e180: 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20  f the key is OK 
e190: 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
e1a0: 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ls;           /*
e1b0: 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74   child to parent
e1c0: 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20   column mapping 
e1d0: 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c  */..    regResul
e1e0: 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  t = pParse->nMem
e1f0: 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  +1;.    pParse->
e200: 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72  nMem += 4;.    r
e210: 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65  egKey = ++pParse
e220: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52  ->nMem;.    regR
e230: 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  ow = ++pParse->n
e240: 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c  Mem;.    v = sql
e250: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
e260: 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  se);.    sqlite3
e270: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
e280: 2c 20 34 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 4);.    sqlite
e290: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
e2a0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
e2b0: 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c  ME, "table", SQL
e2c0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
e2d0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
e2e0: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
e2f0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f 77 69  NAME_NAME, "rowi
e300: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
e310: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
e320: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
e330: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
e340: 2c 20 22 70 61 72 65 6e 74 22 2c 20 53 51 4c 49  , "parent", SQLI
e350: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
e360: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
e370: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
e380: 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b 69 64 22  AME_NAME, "fkid"
e390: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
e3a0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64  ;.    sqlite3Cod
e3b0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
e3c0: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
e3d0: 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46 69  k = sqliteHashFi
e3e0: 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44 62  rst(&db->aDb[iDb
e3f0: 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61  ].pSchema->tblHa
e400: 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  sh);.    while( 
e410: 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a  k ){.      if( z
e420: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 20  Right ){.       
e430: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 4c   pTab = sqlite3L
e440: 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72 73  ocateTable(pPars
e450: 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e, 0, zRight, zD
e460: 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20  b);.        k = 
e470: 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
e480: 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 28          pTab = (
e490: 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61 73  Table*)sqliteHas
e4a0: 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20 20  hData(k);.      
e4b0: 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68    k = sqliteHash
e4c0: 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d  Next(k);.      }
e4d0: 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62 3d  .      if( pTab=
e4e0: 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65  =0 || pTab->pFKe
e4f0: 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  y==0 ) continue;
e500: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 61  .      sqlite3Ta
e510: 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20  bleLock(pParse, 
e520: 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c  iDb, pTab->tnum,
e530: 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29   0, pTab->zName)
e540: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62  ;.      if( pTab
e550: 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50  ->nCol+regRow>pP
e560: 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61  arse->nMem ) pPa
e570: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62  rse->nMem = pTab
e580: 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b  ->nCol + regRow;
e590: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70  .      sqlite3Op
e5a0: 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  enTable(pParse, 
e5b0: 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f 50  0, iDb, pTab, OP
e5c0: 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20  _OpenRead);.    
e5d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e5e0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
e5f0: 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2c  8, 0, regResult,
e600: 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c   0, pTab->zName,
e610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e620: 20 20 20 20 20 20 20 20 20 50 34 5f 54 52 41 4e           P4_TRAN
e630: 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 66 6f  SIENT);.      fo
e640: 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d  r(i=1, pFK=pTab-
e650: 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b  >pFKey; pFK; i++
e660: 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74  , pFK=pFK->pNext
e670: 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70  From){.        p
e680: 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33  Parent = sqlite3
e690: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46  FindTable(db, pF
e6a0: 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20  K->zTo, zDb);.  
e6b0: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e        if( pParen
e6c0: 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  t==0 ) continue;
e6d0: 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20  .        pIdx = 
e6e0: 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  0;.        sqlit
e6f0: 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72  e3TableLock(pPar
e700: 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74  se, iDb, pParent
e710: 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65  ->tnum, 0, pPare
e720: 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  nt->zName);.    
e730: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46      x = sqlite3F
e740: 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61  kLocateIndex(pPa
e750: 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46  rse, pParent, pF
e760: 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20  K, &pIdx, 0);.  
e770: 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29        if( x==0 )
e780: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
e790: 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20  pIdx==0 ){.     
e7a0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70         sqlite3Op
e7b0: 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  enTable(pParse, 
e7c0: 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c  i, iDb, pParent,
e7d0: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
e7e0: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e800: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
e810: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c   OP_OpenRead, i,
e820: 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62   pIdx->tnum, iDb
e830: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
e840: 71 6c 69 74 65 33 56 64 62 65 53 65 74 50 34 4b  qlite3VdbeSetP4K
e850: 65 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70  eyInfo(pParse, p
e860: 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Idx);.          
e870: 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
e880: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30  .          k = 0
e890: 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
e8a0: 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
e8b0: 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
e8c0: 74 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e  t( pParse->nErr>
e8d0: 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20  0 || pFK==0 );. 
e8e0: 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 20 62       if( pFK ) b
e8f0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20  reak;.      if( 
e900: 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29  pParse->nTab<i )
e910: 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20   pParse->nTab = 
e920: 69 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70  i;.      addrTop
e930: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
e940: 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e  dOp1(v, OP_Rewin
e950: 64 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72  d, 0); VdbeCover
e960: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f  age(v);.      fo
e970: 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d  r(i=1, pFK=pTab-
e980: 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b  >pFKey; pFK; i++
e990: 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74  , pFK=pFK->pNext
e9a0: 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70  From){.        p
e9b0: 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33  Parent = sqlite3
e9c0: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46  FindTable(db, pF
e9d0: 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20  K->zTo, zDb);.  
e9e0: 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a        pIdx = 0;.
e9f0: 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d          aiCols =
ea00: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   0;.        if( 
ea10: 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20  pParent ){.     
ea20: 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
ea30: 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50  FkLocateIndex(pP
ea40: 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70  arse, pParent, p
ea50: 46 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f  FK, &pIdx, &aiCo
ea60: 6c 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  ls);.          a
ea70: 73 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20  ssert( x==0 );. 
ea80: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ea90: 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65   addrOk = sqlite
eaa0: 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76  3VdbeMakeLabel(v
eab0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
eac0: 50 61 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d  Parent && pIdx==
ead0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  0 ){.          i
eae0: 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61  nt iKey = pFK->a
eaf0: 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20  Col[0].iFrom;.  
eb00: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
eb10: 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c  iKey>=0 && iKey<
eb20: 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20  pTab->nCol );.  
eb30: 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79          if( iKey
eb40: 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b  !=pTab->iPKey ){
eb50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
eb60: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
eb70: 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20  , OP_Column, 0, 
eb80: 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20  iKey, regRow);. 
eb90: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
eba0: 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
ebb0: 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72  v, pTab, iKey, r
ebc0: 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20  egRow);.        
ebd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ebe0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp2(v, OP_IsNu
ebf0: 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72  ll, regRow, addr
ec00: 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  Ok); VdbeCoverag
ec10: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
ec20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ec30: 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65  Op2(v, OP_MustBe
ec40: 49 6e 74 2c 20 72 65 67 52 6f 77 2c 20 0a 20 20  Int, regRow, .  
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
ec60: 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
ec70: 64 64 72 28 76 29 2b 33 29 3b 20 56 64 62 65 43  ddr(v)+3); VdbeC
ec80: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
ec90: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
eca0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ecb0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ecc0: 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f  _Rowid, 0, regRo
ecd0: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  w);.          }.
ece0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ecf0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
ed00: 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20  P_NotExists, i, 
ed10: 30 2c 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65  0, regRow); Vdbe
ed20: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
ed30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ed40: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47  beAddOp2(v, OP_G
ed50: 6f 74 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29 3b  oto, 0, addrOk);
ed60: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
ed70: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
ed80: 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  , sqlite3VdbeCur
ed90: 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a  rentAddr(v)-2);.
eda0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
edb0: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30           for(j=0
edc0: 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a  ; j<pFK->nCol; j
edd0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
ede0: 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
edf0: 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
ee00: 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20  (v, pTab, 0,.   
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee20: 20 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20           aiCols 
ee30: 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46  ? aiCols[j] : pF
ee40: 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d  K->aCol[j].iFrom
ee50: 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20  , regRow+j);.   
ee60: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ee70: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ee80: 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b  _IsNull, regRow+
ee90: 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65  j, addrOk); Vdbe
eea0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
eeb0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
eec0: 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29     if( pParent )
eed0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
eee0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
eef0: 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  v, OP_MakeRecord
ef00: 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e  , regRow, pFK->n
ef10: 43 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20  Col, regKey,.   
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef30: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ef40: 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
ef50: 74 72 28 76 2c 70 49 64 78 29 2c 20 70 46 4b 2d  tr(v,pIdx), pFK-
ef60: 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20  >nCol);.        
ef70: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ef80: 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46  ddOp4Int(v, OP_F
ef90: 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c  ound, i, addrOk,
efa0: 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20   regKey, 0);.   
efb0: 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76           VdbeCov
efc0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
efd0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
efe0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
eff0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
f000: 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 65 73  Rowid, 0, regRes
f010: 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20 20 20  ult+1);.        
f020: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f030: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
f040: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c   0, regResult+2,
f050: 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20   0, .           
f060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
f070: 46 4b 2d 3e 7a 54 6f 2c 20 50 34 5f 54 52 41 4e  FK->zTo, P4_TRAN
f080: 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20  SIENT);.        
f090: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f0a0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
f0b0: 20 69 2d 31 2c 20 72 65 67 52 65 73 75 6c 74 2b   i-1, regResult+
f0c0: 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  3);.        sqli
f0d0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
f0e0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72   OP_ResultRow, r
f0f0: 65 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20  egResult, 4);.  
f100: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f110: 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c  eResolveLabel(v,
f120: 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20   addrOk);.      
f130: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
f140: 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20  db, aiCols);.   
f150: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
f160: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
f170: 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64 72  OP_Next, 0, addr
f180: 54 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f 76 65  Top+1); VdbeCove
f190: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73  rage(v);.      s
f1a0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
f1b0: 72 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a  re(v, addrTop);.
f1c0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
f1d0: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  k;.#endif /* !de
f1e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
f1f0: 54 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65  T_TRIGGER) */.#e
f200: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
f210: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
f220: 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69  EIGN_KEY) */..#i
f230: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63  fndef NDEBUG.  c
f240: 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 52 53  ase PragTyp_PARS
f250: 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20  ER_TRACE: {.    
f260: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
f270: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
f280: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
f290: 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  , 0) ){.        
f2a0: 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
f2b0: 63 65 28 73 74 64 65 72 72 2c 20 22 70 61 72 73  ce(stderr, "pars
f2c0: 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65  er: ");.      }e
f2d0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
f2e0: 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
f2f0: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  0, 0);.      }. 
f300: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
f310: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52  ;.#endif..  /* R
f320: 65 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b  einstall the LIK
f330: 45 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74  E and GLOB funct
f340: 69 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61  ions.  The varia
f350: 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20  nt of LIKE.  ** 
f360: 75 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73  used will be cas
f370: 65 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e  e sensitive or n
f380: 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ot depending on 
f390: 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20  the RHS..  */.  
f3a0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 53  case PragTyp_CAS
f3b0: 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45  E_SENSITIVE_LIKE
f3c0: 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
f3d0: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
f3e0: 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
f3f0: 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c  unctions(db, sql
f400: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
f410: 52 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20  Right, 0));.    
f420: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  }.  }.  break;..
f430: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49  #ifndef SQLITE_I
f440: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
f450: 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e  RROR_MAX.# defin
f460: 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  e SQLITE_INTEGRI
f470: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
f480: 41 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23  AX 100.#endif..#
f490: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f4a0: 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
f4b0: 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20 22  CK.  /* Pragma "
f4c0: 71 75 69 63 6b 5f 63 68 65 63 6b 22 20 69 73 20  quick_check" is 
f4d0: 72 65 64 75 63 65 64 20 76 65 72 73 69 6f 6e 20  reduced version 
f4e0: 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69  of .  ** integri
f4f0: 74 79 5f 63 68 65 63 6b 20 64 65 73 69 67 6e 65  ty_check designe
f500: 64 20 74 6f 20 64 65 74 65 63 74 20 6d 6f 73 74  d to detect most
f510: 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
f520: 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75  tion.  ** withou
f530: 74 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f 76  t most of the ov
f540: 65 72 68 65 61 64 20 6f 66 20 61 20 66 75 6c 6c  erhead of a full
f550: 20 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b   integrity-check
f560: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
f570: 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f  agTyp_INTEGRITY_
f580: 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74  CHECK: {.    int
f590: 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45   i, j, addr, mxE
f5a0: 72 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65  rr;..    /* Code
f5b0: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 61 74   that appears at
f5c0: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
f5d0: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 2e  integrity check.
f5e0: 20 20 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20 20    If no error.  
f5f0: 20 20 2a 2a 20 6d 65 73 73 61 67 65 73 20 68 61    ** messages ha
f600: 76 65 20 62 65 65 6e 20 67 65 6e 65 72 61 74 65  ve been generate
f610: 64 2c 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20 4f  d, output OK.  O
f620: 74 68 65 72 77 69 73 65 20 6f 75 74 70 75 74 20  therwise output 
f630: 74 68 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f 72  the.    ** error
f640: 20 6d 65 73 73 61 67 65 0a 20 20 20 20 2a 2f 0a   message.    */.
f650: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
f660: 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f   int iLn = VDBE_
f670: 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29  OFFSET_LINENO(2)
f680: 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  ;.    static con
f690: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e  st VdbeOpList en
f6a0: 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  dCode[] = {.    
f6b0: 20 20 7b 20 4f 50 5f 49 66 4e 65 67 2c 20 20 20    { OP_IfNeg,   
f6c0: 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20      1, 0,       
f6d0: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
f6e0: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
f6f0: 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20  g8,     0, 3,   
f700: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31       0},    /* 1
f710: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52   */.      { OP_R
f720: 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31  esultRow,   3, 1
f730: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
f740: 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73 51   };..    int isQ
f750: 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33 54  uick = (sqlite3T
f760: 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29  olower(zLeft[0])
f770: 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20  =='q');..    /* 
f780: 49 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f  If the PRAGMA co
f790: 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68 65  mmand was of the
f7a0: 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c 64   form "PRAGMA <d
f7b0: 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65  b>.integrity_che
f7c0: 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e  ck",.    ** then
f7d0: 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 74   iDb is set to t
f7e0: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
f7f0: 64 61 74 61 62 61 73 65 20 69 64 65 6e 74 69 66  database identif
f800: 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20  ied by <db>..   
f810: 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73 65   ** In this case
f820: 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20  , the integrity 
f830: 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62 20  of database iDb 
f840: 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65 64  only is verified
f850: 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20 56   by.    ** the V
f860: 44 42 45 20 63 72 65 61 74 65 64 20 62 65 6c 6f  DBE created belo
f870: 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  w..    **.    **
f880: 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74   Otherwise, if t
f890: 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73  he command was s
f8a0: 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69 6e  imply "PRAGMA in
f8b0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20 28  tegrity_check" (
f8c0: 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47 4d  or.    ** "PRAGM
f8d0: 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c  A quick_check"),
f8e0: 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74   then iDb is set
f8f0: 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20 63   to 0. In this c
f900: 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20 20  ase, set iDb.   
f910: 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c 20   ** to -1 here, 
f920: 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
f930: 20 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c 64   the VDBE should
f940: 20 76 65 72 69 66 79 20 74 68 65 20 69 6e 74 65   verify the inte
f950: 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  grity.    ** of 
f960: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
f970: 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20  abases.  */.    
f980: 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 29  assert( iDb>=0 )
f990: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  ;.    assert( iD
f9a0: 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20  b==0 || pId2->z 
f9b0: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d  );.    if( pId2-
f9c0: 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d 31  >z==0 ) iDb = -1
f9d0: 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
f9e0: 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20 70 72  lize the VDBE pr
f9f0: 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61  ogram */.    pPa
fa00: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20  rse->nMem = 6;. 
fa10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
fa20: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
fa30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
fa40: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
fa50: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69  COLNAME_NAME, "i
fa60: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c  ntegrity_check",
fa70: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
fa80: 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65  ..    /* Set the
fa90: 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63   maximum error c
faa0: 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72  ount */.    mxEr
fab0: 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  r = SQLITE_INTEG
fac0: 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
fad0: 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52  _MAX;.    if( zR
fae0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
faf0: 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52  lite3GetInt32(zR
fb00: 69 67 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20  ight, &mxErr);. 
fb10: 20 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d       if( mxErr<=
fb20: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45  0 ){.        mxE
fb30: 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rr = SQLITE_INTE
fb40: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
fb50: 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20  R_MAX;.      }. 
fb60: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
fb70: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
fb80: 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c  _Integer, mxErr,
fb90: 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20   1);  /* reg[1] 
fba0: 68 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66  holds errors lef
fbb0: 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20  t */..    /* Do 
fbc0: 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  an integrity che
fbd0: 63 6b 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62  ck on each datab
fbe0: 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  ase file */.    
fbf0: 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
fc00: 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
fc10: 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20  HashElem *x;.   
fc20: 20 20 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a     Hash *pTbls;.
fc30: 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20        int cnt = 
fc40: 30 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 4f 4d  0;..      if( OM
fc50: 49 54 5f 54 45 4d 50 44 42 20 26 26 20 69 3d 3d  IT_TEMPDB && i==
fc60: 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  1 ) continue;.  
fc70: 20 20 20 20 69 66 28 20 69 44 62 3e 3d 30 20 26      if( iDb>=0 &
fc80: 26 20 69 21 3d 69 44 62 20 29 20 63 6f 6e 74 69  & i!=iDb ) conti
fc90: 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69  nue;..      sqli
fca0: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
fcb0: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a  ema(pParse, i);.
fcc0: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
fcd0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
fce0: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20  , OP_IfPos, 1); 
fcf0: 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75 74 20 6f  /* Halt if out o
fd00: 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20  f errors */.    
fd10: 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76    VdbeCoverage(v
fd20: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
fd30: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
fd40: 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20  _Halt, 0, 0);.  
fd50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
fd60: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
fd70: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61  ;..      /* Do a
fd80: 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  n integrity chec
fd90: 6b 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a  k of the B-Tree.
fda0: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
fdb0: 2a 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69  * Begin by filli
fdc0: 6e 67 20 72 65 67 69 73 74 65 72 73 20 32 2c 20  ng registers 2, 
fdd0: 33 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20  3, ... with the 
fde0: 72 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65  root pages numbe
fdf0: 72 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20  rs.      ** for 
fe00: 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69  all tables and i
fe10: 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20 64 61  ndices in the da
fe20: 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  tabase..      */
fe30: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
fe40: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
fe50: 78 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20  xHeld(db, i, 0) 
fe60: 29 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d  );.      pTbls =
fe70: 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63   &db->aDb[i].pSc
fe80: 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20  hema->tblHash;. 
fe90: 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74       for(x=sqlit
fea0: 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73  eHashFirst(pTbls
feb0: 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61  ); x; x=sqliteHa
fec0: 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20  shNext(x)){.    
fed0: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20      Table *pTab 
fee0: 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  = sqliteHashData
fef0: 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  (x);.        Ind
ff00: 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20  ex *pIdx;.      
ff10: 20 20 69 66 28 20 48 61 73 52 6f 77 69 64 28 70    if( HasRowid(p
ff20: 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Tab) ){.        
ff30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ff40: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
ff50: 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32  r, pTab->tnum, 2
ff60: 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  +cnt);.         
ff70: 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c   VdbeComment((v,
ff80: 20 22 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61   "%s", pTab->zNa
ff90: 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  me));.          
ffa0: 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  cnt++;.        }
ffb0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 49 64  .        for(pId
ffc0: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
ffd0: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
ffe0: 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20  >pNext){.       
fff0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10000 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
10010 65 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20  er, pIdx->tnum, 
10020 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  2+cnt);.        
10030 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76    VdbeComment((v
10040 2c 20 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a 4e  , "%s", pIdx->zN
10050 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ame));.         
10060 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20   cnt++;.        
10070 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  }.      }..     
10080 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75   /* Make sure su
10090 66 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20  fficient number 
100a0 6f 66 20 72 65 67 69 73 74 65 72 73 20 68 61 76  of registers hav
100b0 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
100c0 20 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65   */.      pParse
100d0 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50  ->nMem = MAX( pP
100e0 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b  arse->nMem, cnt+
100f0 38 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  8 );..      /* D
10100 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74  o the b-tree int
10110 65 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f  egrity checks */
10120 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10130 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49  beAddOp3(v, OP_I
10140 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63  ntegrityCk, 2, c
10150 6e 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  nt, 1);.      sq
10160 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
10170 35 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20  5(v, (u8)i);.   
10180 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
10190 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
101a0 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56 64  P_IsNull, 2); Vd
101b0 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
101c0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
101d0 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
101e0 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20  ing8, 0, 3, 0,. 
101f0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d          sqlite3M
10200 50 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20  Printf(db, "*** 
10210 69 6e 20 64 61 74 61 62 61 73 65 20 25 73 20 2a  in database %s *
10220 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69  **\n", db->aDb[i
10230 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20  ].zName),.      
10240 20 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a     P4_DYNAMIC);.
10250 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10260 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f  eAddOp3(v, OP_Mo
10270 76 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20  ve, 2, 4, 1);.  
10280 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10290 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
102a0 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20  at, 4, 3, 2);.  
102b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
102c0 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
102d0 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20  ltRow, 2, 1);.  
102e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
102f0 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
10300 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ;..      /* Make
10310 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e   sure all the in
10320 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72  dices are constr
10330 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e  ucted correctly.
10340 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
10350 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68  for(x=sqliteHash
10360 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20  First(pTbls); x 
10370 26 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73  && !isQuick; x=s
10380 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29  qliteHashNext(x)
10390 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65  ){.        Table
103a0 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48   *pTab = sqliteH
103b0 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20  ashData(x);.    
103c0 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c      Index *pIdx,
103d0 20 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49   *pPk;.        I
103e0 6e 64 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30  ndex *pPrior = 0
103f0 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f  ;.        int lo
10400 6f 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69  opTop;.        i
10410 6e 74 20 69 44 61 74 61 43 75 72 2c 20 69 49 64  nt iDataCur, iId
10420 78 43 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e  xCur;.        in
10430 74 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20  t r1 = -1;..    
10440 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49      if( pTab->pI
10450 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  ndex==0 ) contin
10460 75 65 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20  ue;.        pPk 
10470 3d 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  = HasRowid(pTab)
10480 20 3f 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72   ? 0 : sqlite3Pr
10490 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54  imaryKeyIndex(pT
104a0 61 62 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64  ab);.        add
104b0 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
104c0 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp1(v, OP_IfPo
104d0 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20  s, 1);  /* Stop 
104e0 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73  if out of errors
104f0 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65   */.        Vdbe
10500 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
10510 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10520 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c  AddOp2(v, OP_Hal
10530 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  t, 0, 0);.      
10540 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
10550 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
10560 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
10570 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 70 50  xprCacheClear(pP
10580 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73  arse);.        s
10590 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
105a0 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72 73 65  ndIndices(pParse
105b0 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52  , pTab, OP_OpenR
105c0 65 61 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ead,.           
105d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105e0 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69          1, 0, &i
105f0 44 61 74 61 43 75 72 2c 20 26 69 49 64 78 43 75  DataCur, &iIdxCu
10600 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  r);.        sqli
10610 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10620 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20   OP_Integer, 0, 
10630 37 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  7);.        for(
10640 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
10650 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
10660 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
10670 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
10680 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10690 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
106a0 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64   0, 8+j); /* ind
106b0 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74  ex entries count
106c0 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  er */.        }.
106d0 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e          pParse->
106e0 6e 4d 65 6d 20 3d 20 4d 41 58 28 70 50 61 72 73  nMem = MAX(pPars
106f0 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20  e->nMem, 8+j);. 
10700 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10710 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
10720 65 77 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c  ewind, iDataCur,
10730 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   0); VdbeCoverag
10740 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f  e(v);.        lo
10750 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56  opTop = sqlite3V
10760 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10770 41 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20  AddImm, 7, 1);. 
10780 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79         /* Verify
10790 20 74 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55   that all NOT NU
107a0 4c 4c 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c  LL columns reall
107b0 79 20 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a  y are NOT NULL *
107c0 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  /.        for(j=
107d0 30 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b  0; j<pTab->nCol;
107e0 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
107f0 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20   char *zErr;.   
10800 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c         int jmp2,
10810 20 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20   jmp3;.         
10820 20 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50   if( j==pTab->iP
10830 4b 65 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  Key ) continue;.
10840 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 54            if( pT
10850 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e  ab->aCol[j].notN
10860 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ull==0 ) continu
10870 65 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e;.          sql
10880 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
10890 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20  olumnOfTable(v, 
108a0 70 54 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20  pTab, iDataCur, 
108b0 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  j, 3);.         
108c0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
108d0 67 65 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54  geP5(v, OPFLAG_T
108e0 59 50 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20  YPEOFARG);.     
108f0 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69       jmp2 = sqli
10900 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
10910 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b   OP_NotNull, 3);
10920 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
10930 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10940 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10950 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
10960 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74  1); /* Decrement
10970 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a   error limit */.
10980 20 20 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d            zErr =
10990 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
109a0 64 62 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20  db, "NULL value 
109b0 69 6e 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d  in %s.%s", pTab-
109c0 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109e0 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c        pTab->aCol
109f0 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  [j].zName);.    
10a00 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10a10 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
10a20 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20  ring8, 0, 3, 0, 
10a30 7a 45 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43  zErr, P4_DYNAMIC
10a40 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10a50 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10a60 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
10a70 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 1);.         
10a80 20 6a 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56   jmp3 = sqlite3V
10a90 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
10aa0 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43  IfPos, 1); VdbeC
10ab0 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
10ac0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10ad0 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61  eAddOp0(v, OP_Ha
10ae0 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  lt);.          s
10af0 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
10b00 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20  re(v, jmp2);.   
10b10 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10b20 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
10b30 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  p3);.        }. 
10b40 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61         /* Valida
10b50 74 65 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73  te index entries
10b60 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
10b70 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20   row */.        
10b80 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
10b90 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
10ba0 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
10bb0 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
10bc0 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d      int jmp2, jm
10bd0 70 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a  p3, jmp4, jmp5;.
10be0 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b            int ck
10bf0 55 6e 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64  Uniq = sqlite3Vd
10c00 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
10c10 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
10c20 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e  k==pIdx ) contin
10c30 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31  ue;.          r1
10c40 20 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61   = sqlite3Genera
10c50 74 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73  teIndexKey(pPars
10c60 65 2c 20 70 49 64 78 2c 20 69 44 61 74 61 43 75  e, pIdx, iDataCu
10c70 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a  r, 0, 0, &jmp3,.
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ca0 20 20 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72         pPrior, r
10cb0 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50  1);.          pP
10cc0 72 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20  rior = pIdx;.   
10cd0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10ce0 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
10cf0 64 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20  ddImm, 8+j, 1); 
10d00 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e   /* increment en
10d10 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20  try count */.   
10d20 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79         /* Verify
10d30 20 74 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65   that an index e
10d40 6e 74 72 79 20 65 78 69 73 74 73 20 66 6f 72 20  ntry exists for 
10d50 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
10d60 65 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20  e row */.       
10d70 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65     jmp2 = sqlite
10d80 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76  3VdbeAddOp4Int(v
10d90 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78  , OP_Found, iIdx
10da0 43 75 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72  Cur+j, ckUniq, r
10db0 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1,.             
10dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dd0 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e           pIdx->n
10de0 43 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76  Column); VdbeCov
10df0 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
10e00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10e10 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
10e20 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44  mm, 1, -1); /* D
10e30 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c  ecrement error l
10e40 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  imit */.        
10e50 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10e60 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
10e70 38 2c 20 30 2c 20 33 2c 20 30 2c 20 22 72 6f 77  8, 0, 3, 0, "row
10e80 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a   ", P4_STATIC);.
10e90 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10ea0 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
10eb0 50 5f 43 6f 6e 63 61 74 2c 20 37 2c 20 33 2c 20  P_Concat, 7, 3, 
10ec0 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  3);.          sq
10ed0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
10ee0 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
10ef0 2c 20 34 2c 20 30 2c 20 0a 20 20 20 20 20 20 20  , 4, 0, .       
10f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f10 20 20 20 20 20 22 20 6d 69 73 73 69 6e 67 20 66       " missing f
10f20 72 6f 6d 20 69 6e 64 65 78 20 22 2c 20 50 34 5f  rom index ", P4_
10f30 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
10f40 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10f50 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
10f60 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20  t, 4, 3, 3);.   
10f70 20 20 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71         jmp5 = sq
10f80 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
10f90 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
10fa0 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 4, 0,.        
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
10fd0 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53  >zName, P4_TRANS
10fe0 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20  IENT);.         
10ff0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11000 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
11010 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   4, 3, 3);.     
11020 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11030 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
11040 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20  ultRow, 3, 1);. 
11050 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20           jmp4 = 
11060 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11070 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
11080 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
11090 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
110a0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28  lite3VdbeAddOp0(
110b0 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20  v, OP_Halt);.   
110c0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
110d0 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
110e0 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f  p2);.          /
110f0 2a 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64  * For UNIQUE ind
11100 65 78 65 73 2c 20 76 65 72 69 66 79 20 74 68 61  exes, verify tha
11110 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79  t only one entry
11120 20 65 78 69 73 74 73 20 77 69 74 68 20 74 68 65   exists with the
11130 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75  .          ** cu
11140 72 72 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20  rrent key.  The 
11150 65 6e 74 72 79 20 69 73 20 75 6e 69 71 75 65 20  entry is unique 
11160 69 66 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d  if (1) any colum
11170 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20  n is NULL.      
11180 20 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68      ** or (2) th
11190 65 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73  e next entry has
111a0 20 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79   a different key
111b0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66   */.          if
111c0 28 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  ( IsUniqueIndex(
111d0 70 49 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20  pIdx) ){.       
111e0 20 20 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20       int uniqOk 
111f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b  = sqlite3VdbeMak
11200 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20  eLabel(v);.     
11210 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b         int jmp6;
11220 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
11230 20 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20   kk;.           
11240 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49   for(kk=0; kk<pI
11250 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b  dx->nKeyCol; kk+
11260 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
11270 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64    int iCol = pId
11280 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b  x->aiColumn[kk];
11290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  .              a
112a0 73 73 65 72 74 28 20 69 43 6f 6c 3e 3d 30 20 26  ssert( iCol>=0 &
112b0 26 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f  & iCol<pTab->nCo
112c0 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  l );.           
112d0 20 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43 6f     if( pTab->aCo
112e0 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20  l[iCol].notNull 
112f0 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
11300 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11310 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
11320 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c  P_IsNull, r1+kk,
11330 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20   uniqOk);.      
11340 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65          VdbeCove
11350 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
11360 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
11370 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65     jmp6 = sqlite
11380 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
11390 50 5f 4e 65 78 74 2c 20 69 49 64 78 43 75 72 2b  P_Next, iIdxCur+
113a0 6a 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  j); VdbeCoverage
113b0 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
113c0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
113d0 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30  p2(v, OP_Goto, 0
113e0 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20  , uniqOk);.     
113f0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11400 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
11410 70 36 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  p6);.           
11420 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11430 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64 78 47  p4Int(v, OP_IdxG
11440 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 75 6e  T, iIdxCur+j, un
11450 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20 20 20  iqOk, r1,.      
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11470 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
11480 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56 64 62 65 43  >nKeyCol); VdbeC
11490 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
114a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
114b0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
114c0 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20  AddImm, 1, -1); 
114d0 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72  /* Decrement err
114e0 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20  or limit */.    
114f0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11500 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
11510 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
11520 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11540 22 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72  "non-unique entr
11550 79 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34  y in index ", P4
11560 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
11570 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11580 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f  eAddOp2(v, OP_Go
11590 74 6f 2c 20 30 2c 20 6a 6d 70 35 29 3b 0a 20 20  to, 0, jmp5);.  
115a0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
115b0 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65  3VdbeResolveLabe
115c0 6c 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  l(v, uniqOk);.  
115d0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
115e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
115f0 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29  umpHere(v, jmp4)
11600 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11610 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
11620 78 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a  xLabel(pParse, j
11630 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  mp3);.        }.
11640 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11650 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
11660 4e 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20  Next, iDataCur, 
11670 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f  loopTop); VdbeCo
11680 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
11690 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
116a0 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f  mpHere(v, loopTo
116b0 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  p-1);.#ifndef SQ
116c0 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
116d0 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c  OUNT.        sql
116e0 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
116f0 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
11700 20 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20   2, 0, .        
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72               "wr
11720 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
11730 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f   in index ", P4_
11740 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
11750 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70   for(j=0, pIdx=p
11760 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
11770 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
11780 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ext, j++){.     
11790 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49       if( pPk==pI
117a0 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  dx ) continue;. 
117b0 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20           addr = 
117c0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
117d0 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20  ntAddr(v);.     
117e0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
117f0 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50  AddOp2(v, OP_IfP
11800 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20  os, 1, addr+2); 
11810 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
11820 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11830 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
11840 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a  OP_Halt, 0, 0);.
11850 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11860 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
11870 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72  P_Count, iIdxCur
11880 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20  +j, 3);.        
11890 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
118a0 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b  Op3(v, OP_Eq, 8+
118b0 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56  j, addr+8, 3); V
118c0 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
118d0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
118e0 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
118f0 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29   SQLITE_NOTNULL)
11900 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11910 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
11920 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
11930 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  1);.          sq
11940 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
11950 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
11960 2c 20 33 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e  , 3, 0, pIdx->zN
11970 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e  ame, P4_TRANSIEN
11980 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  T);.          sq
11990 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
119a0 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c  v, OP_Concat, 3,
119b0 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20   2, 7);.        
119c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
119d0 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
119e0 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20  Row, 7, 1);.    
119f0 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
11a00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
11a10 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20  ECOUNT */.      
11a20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61 64 64  } .    }.    add
11a30 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
11a40 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
11a50 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20  ySize(endCode), 
11a60 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20  endCode, iLn);. 
11a70 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
11a80 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2c 20  angeP3(v, addr, 
11a90 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73 71 6c  -mxErr);.    sql
11aa0 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
11ab0 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 73  (v, addr);.    s
11ac0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
11ad0 50 34 28 76 2c 20 61 64 64 72 2b 31 2c 20 22 6f  P4(v, addr+1, "o
11ae0 6b 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a  k", P4_STATIC);.
11af0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
11b00 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
11b10 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
11b20 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  CK */..#ifndef S
11b30 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
11b40 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
11b50 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a  GMA encoding.  *
11b60 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64  *   PRAGMA encod
11b70 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75  ing = "utf-8"|"u
11b80 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65  tf-16"|"utf-16le
11b90 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a  "|"utf-16be".  *
11ba0 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69  *.  ** In its fi
11bb0 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70  rst form, this p
11bc0 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68  ragma returns th
11bd0 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68  e encoding of th
11be0 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61  e main.  ** data
11bf0 62 61 73 65 2e 20 49 66 20 74 68 65 20 64 61 74  base. If the dat
11c00 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69  abase is not ini
11c10 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20  tialized, it is 
11c20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e  initialized now.
11c30 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
11c40 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68  econd form of th
11c50 69 73 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e  is pragma is a n
11c60 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e  o-op if the main
11c70 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20   database file. 
11c80 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65   ** has not alre
11c90 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  ady been initial
11ca0 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ized. In this ca
11cb0 73 65 20 69 74 20 73 65 74 73 20 74 68 65 20 64  se it sets the d
11cc0 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f  efault.  ** enco
11cd0 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62  ding that will b
11ce0 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d  e used for the m
11cf0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
11d00 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a  e if a new file.
11d10 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e    ** is created.
11d20 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   If an existing 
11d30 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
11d40 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68  le is opened, th
11d50 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61  en the.  ** defa
11d60 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ult text encodin
11d70 67 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69  g for the existi
11d80 6e 67 20 64 61 74 61 62 61 73 65 20 69 73 20 75  ng database is u
11d90 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  sed..  ** .  ** 
11da0 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77  In all cases new
11db0 20 64 61 74 61 62 61 73 65 73 20 63 72 65 61 74   databases creat
11dc0 65 64 20 75 73 69 6e 67 20 74 68 65 20 41 54 54  ed using the ATT
11dd0 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a  ACH command are.
11de0 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20    ** created to 
11df0 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 65 66  use the same def
11e00 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69  ault text encodi
11e10 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64  ng as the main d
11e20 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a  atabase. If.  **
11e30 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
11e40 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20  se has not been 
11e50 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f  initialized and/
11e60 6f 72 20 63 72 65 61 74 65 64 20 77 68 65 6e 20  or created when 
11e70 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65  ATTACH.  ** is e
11e80 78 65 63 75 74 65 64 2c 20 74 68 69 73 20 69 73  xecuted, this is
11e90 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65   done before the
11ea0 20 41 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f   ATTACH operatio
11eb0 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  n..  **.  ** In 
11ec0 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  the second form 
11ed0 74 68 69 73 20 70 72 61 67 6d 61 20 73 65 74 73  this pragma sets
11ee0 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69   the text encodi
11ef0 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e  ng to be used in
11f00 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61  .  ** new databa
11f10 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64  se files created
11f20 20 75 73 69 6e 67 20 74 68 69 73 20 64 61 74 61   using this data
11f30 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20  base handle. It 
11f40 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65  is only.  ** use
11f50 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69  ful if invoked i
11f60 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
11f70 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
11f80 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73 65  se i.  */.  case
11f90 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44 49 4e   PragTyp_ENCODIN
11fa0 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20  G: {.    static 
11fb0 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63  const struct Enc
11fc0 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61  Name {.      cha
11fd0 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20  r *zName;.      
11fe0 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e  u8 enc;.    } en
11ff0 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20  cnames[] = {.   
12000 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20 20 20     { "UTF8",    
12010 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20   SQLITE_UTF8    
12020 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
12030 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c 49 54  UTF-8",    SQLIT
12040 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c  E_UTF8        },
12050 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65    /* Must be ele
12060 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20  ment [1] */.    
12070 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c 20    { "UTF-16le", 
12080 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20  SQLITE_UTF16LE  
12090 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
120a0 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f  e element [2] */
120b0 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
120c0 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  be", SQLITE_UTF1
120d0 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d  6BE     },  /* M
120e0 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
120f0 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  3] */.      { "U
12100 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49 54 45  TF16le",  SQLITE
12110 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a  _UTF16LE     },.
12120 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62 65        { "UTF16be
12130 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ",  SQLITE_UTF16
12140 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  BE     },.      
12150 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20  { "UTF-16",   0 
12160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12170 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54   }, /* SQLITE_UT
12180 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20  F16NATIVE */.   
12190 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20 20     { "UTF16",   
121a0 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
121b0 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45      }, /* SQLITE
121c0 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a  _UTF16NATIVE */.
121d0 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20        { 0, 0 }. 
121e0 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20     };.    const 
121f0 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a  struct EncName *
12200 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21 7a  pEnc;.    if( !z
12210 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20 22  Right ){    /* "
12220 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22  PRAGMA encoding"
12230 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73 71   */.      if( sq
12240 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
12250 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
12260 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
12270 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
12280 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
12290 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
122a0 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
122b0 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 65  COLNAME_NAME, "e
122c0 6e 63 6f 64 69 6e 67 22 2c 20 53 51 4c 49 54 45  ncoding", SQLITE
122d0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
122e0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
122f0 32 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  2(v, OP_String8,
12300 20 30 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73   0, 1);.      as
12310 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
12320 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d  QLITE_UTF8].enc=
12330 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a  =SQLITE_UTF8 );.
12340 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e        assert( en
12350 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54  cnames[SQLITE_UT
12360 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49  F16LE].enc==SQLI
12370 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20  TE_UTF16LE );.  
12380 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e      assert( encn
12390 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31  ames[SQLITE_UTF1
123a0 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45  6BE].enc==SQLITE
123b0 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 20 20  _UTF16BE );.    
123c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
123d0 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20 65 6e 63  ngeP4(v, -1, enc
123e0 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65  names[ENC(pParse
123f0 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20 50 34  ->db)].zName, P4
12400 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
12410 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
12420 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
12430 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 65  w, 1, 1);.    }e
12440 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20 20 20  lse{            
12450 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22              /* "
12460 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20  PRAGMA encoding 
12470 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20  = XXX" */.      
12480 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74  /* Only change t
12490 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69  he value of sqli
124a0 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61  te.enc if the da
124b0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73  tabase handle is
124c0 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e   not.      ** in
124d0 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68  itialized. If th
124e0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
124f0 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20  exists, the new 
12500 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65  sqlite.enc value
12510 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62  .      ** will b
12520 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68  e overwritten wh
12530 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69 73  en the schema is
12540 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66   next loaded. If
12550 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20   it does not.   
12560 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78     ** already ex
12570 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65  ists, it will be
12580 20 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20   created to use 
12590 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67  the new encoding
125a0 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f   value..      */
125b0 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20 20 20  .      if( .    
125c0 20 20 20 20 21 28 44 62 48 61 73 50 72 6f 70 65      !(DbHasPrope
125d0 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63  rty(db, 0, DB_Sc
125e0 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20  hemaLoaded)) || 
125f0 0a 20 20 20 20 20 20 20 20 44 62 48 61 73 50 72  .        DbHasPr
12600 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42  operty(db, 0, DB
12610 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29  _Empty) .      )
12620 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 45  {.        for(pE
12630 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b  nc=&encnames[0];
12640 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45   pEnc->zName; pE
12650 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  nc++){.         
12660 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
12670 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70  trICmp(zRight, p
12680 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20  Enc->zName) ){. 
12690 20 20 20 20 20 20 20 20 20 20 20 45 4e 43 28 70             ENC(p
126a0 50 61 72 73 65 2d 3e 64 62 29 20 3d 20 70 45 6e  Parse->db) = pEn
126b0 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65  c->enc ? pEnc->e
126c0 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55 54 46 31  nc : SQLITE_UTF1
126d0 36 4e 41 54 49 56 45 3b 0a 20 20 20 20 20 20 20  6NATIVE;.       
126e0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
126f0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
12700 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 70  }.        if( !p
12710 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20  Enc->zName ){.  
12720 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
12730 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
12740 22 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63  "unsupported enc
12750 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67  oding: %s", zRig
12760 68 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ht);.        }. 
12770 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
12780 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
12790 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
127a0 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65  UTF16 */..#ifnde
127b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  f SQLITE_OMIT_SC
127c0 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
127d0 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  GMAS.  /*.  **  
127e0 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
127f0 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  e.]schema_versio
12800 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  n.  **   PRAGMA 
12810 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d  [database.]schem
12820 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  a_version = <int
12830 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
12840 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
12850 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e  se.]user_version
12860 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
12870 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76  database.]user_v
12880 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65  ersion = <intege
12890 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  r>.  **.  **   P
128a0 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
128b0 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20  ]freelist_count 
128c0 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a  = <integer>.  **
128d0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
128e0 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63  database.]applic
128f0 61 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20  ation_id.  **   
12900 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
12910 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64  .]application_id
12920 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
12930 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72 61 67 6d  *.  ** The pragm
12940 61 27 73 20 73 63 68 65 6d 61 5f 76 65 72 73 69  a's schema_versi
12950 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76 65 72 73  on and user_vers
12960 69 6f 6e 20 61 72 65 20 75 73 65 64 20 74 6f 20  ion are used to 
12970 73 65 74 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20  set or get.  ** 
12980 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
12990 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
129a0 61 6e 64 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  and user-version
129b0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
129c0 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65 20 73 63  Both.  ** the sc
129d0 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64  hema-version and
129e0 20 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   the user-versio
129f0 6e 20 61 72 65 20 33 32 2d 62 69 74 20 73 69 67  n are 32-bit sig
12a00 6e 65 64 20 69 6e 74 65 67 65 72 73 0a 20 20 2a  ned integers.  *
12a10 2a 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  * stored in the 
12a20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72 2e  database header.
12a30 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
12a40 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20  chema-cookie is 
12a50 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e  usually only man
12a60 69 70 75 6c 61 74 65 64 20 69 6e 74 65 72 6e 61  ipulated interna
12a70 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49  lly by SQLite. I
12a80 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d  t.  ** is increm
12a90 65 6e 74 65 64 20 62 79 20 53 51 4c 69 74 65 20  ented by SQLite 
12aa0 77 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74  whenever the dat
12ab0 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
12ac0 6d 6f 64 69 66 69 65 64 20 28 62 79 0a 20 20 2a  modified (by.  *
12ad0 2a 20 63 72 65 61 74 69 6e 67 20 6f 72 20 64 72  * creating or dr
12ae0 6f 70 70 69 6e 67 20 61 20 74 61 62 6c 65 20 6f  opping a table o
12af0 72 20 69 6e 64 65 78 29 2e 20 54 68 65 20 73 63  r index). The sc
12b00 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20  hema version is 
12b10 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c  used by.  ** SQL
12b20 69 74 65 20 65 61 63 68 20 74 69 6d 65 20 61 20  ite each time a 
12b30 71 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65  query is execute
12b40 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74  d to ensure that
12b50 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61   the internal ca
12b60 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20  che.  ** of the 
12b70 73 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e  schema used when
12b80 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53   compiling the S
12b90 51 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73  QL query matches
12ba0 20 74 68 65 20 73 63 68 65 6d 61 20 6f 66 0a 20   the schema of. 
12bb0 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
12bc0 20 61 67 61 69 6e 73 74 20 77 68 69 63 68 20 74   against which t
12bd0 68 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72  he compiled quer
12be0 79 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78  y is actually ex
12bf0 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62  ecuted..  ** Sub
12c00 76 65 72 74 69 6e 67 20 74 68 69 73 20 6d 65 63  verting this mec
12c10 68 61 6e 69 73 6d 20 62 79 20 75 73 69 6e 67 20  hanism by using 
12c20 22 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76  "PRAGMA schema_v
12c30 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66  ersion" to modif
12c40 79 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d  y.  ** the schem
12c50 61 2d 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 74  a-version is pot
12c60 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f  entially dangero
12c70 75 73 20 61 6e 64 20 6d 61 79 20 6c 65 61 64 20  us and may lead 
12c80 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20  to program.  ** 
12c90 63 72 61 73 68 65 73 20 6f 72 20 64 61 74 61 62  crashes or datab
12ca0 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20  ase corruption. 
12cb0 55 73 65 20 77 69 74 68 20 63 61 75 74 69 6f 6e  Use with caution
12cc0 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  !.  **.  ** The 
12cd0 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 73 20  user-version is 
12ce0 6e 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61  not used interna
12cf0 6c 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49  lly by SQLite. I
12d00 74 20 6d 61 79 20 62 65 20 75 73 65 64 20 62 79  t may be used by
12d10 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f  .  ** applicatio
12d20 6e 73 20 66 6f 72 20 61 6e 79 20 70 75 72 70 6f  ns for any purpo
12d30 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  se..  */.  case 
12d40 50 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56  PragTyp_HEADER_V
12d50 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20  ALUE: {.    int 
12d60 69 43 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 43 6f  iCookie;   /* Co
12d70 6f 6b 69 65 20 69 6e 64 65 78 2e 20 31 20 66 6f  okie index. 1 fo
12d80 72 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 2c  r schema-cookie,
12d90 20 36 20 66 6f 72 20 75 73 65 72 2d 63 6f 6f 6b   6 for user-cook
12da0 69 65 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74  ie. */.    sqlit
12db0 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28  e3VdbeUsesBtree(
12dc0 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 77 69  v, iDb);.    swi
12dd0 74 63 68 28 20 7a 4c 65 66 74 5b 30 5d 20 29 7b  tch( zLeft[0] ){
12de0 0a 20 20 20 20 20 20 63 61 73 65 20 27 61 27 3a  .      case 'a':
12df0 20 63 61 73 65 20 27 41 27 3a 0a 20 20 20 20 20   case 'A':.     
12e00 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52     iCookie = BTR
12e10 45 45 5f 41 50 50 4c 49 43 41 54 49 4f 4e 5f 49  EE_APPLICATION_I
12e20 44 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  D;.        break
12e30 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27 66 27  ;.      case 'f'
12e40 3a 20 63 61 73 65 20 27 46 27 3a 0a 20 20 20 20  : case 'F':.    
12e50 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54      iCookie = BT
12e60 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f  REE_FREE_PAGE_CO
12e70 55 4e 54 3b 0a 20 20 20 20 20 20 20 20 62 72 65  UNT;.        bre
12e80 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27  ak;.      case '
12e90 73 27 3a 20 63 61 73 65 20 27 53 27 3a 0a 20 20  s': case 'S':.  
12ea0 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20        iCookie = 
12eb0 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
12ec0 53 49 4f 4e 3b 0a 20 20 20 20 20 20 20 20 62 72  SION;.        br
12ed0 65 61 6b 3b 0a 20 20 20 20 20 20 64 65 66 61 75  eak;.      defau
12ee0 6c 74 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f  lt:.        iCoo
12ef0 6b 69 65 20 3d 20 42 54 52 45 45 5f 55 53 45 52  kie = BTREE_USER
12f00 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20  _VERSION;.      
12f10 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a    break;.    }..
12f20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26      if( zRight &
12f30 26 20 69 43 6f 6f 6b 69 65 21 3d 42 54 52 45 45  & iCookie!=BTREE
12f40 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f 55 4e 54  _FREE_PAGE_COUNT
12f50 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57 72 69   ){.      /* Wri
12f60 74 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  te the specified
12f70 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f   cookie value */
12f80 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
12f90 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73  nst VdbeOpList s
12fa0 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20  etCookie[] = {. 
12fb0 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e         { OP_Tran
12fc0 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20  saction,    0,  
12fd0 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20  1,  0},    /* 0 
12fe0 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
12ff0 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20 20  Integer,        
13000 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  1,  0},    /
13010 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 1 */.        {
13020 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20   OP_SetCookie,  
13030 20 20 20 20 30 2c 20 20 30 2c 20 20 31 7d 2c 20      0,  0,  1}, 
13040 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20     /* 2 */.     
13050 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64   };.      int ad
13060 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
13070 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
13080 61 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65  aySize(setCookie
13090 29 2c 20 73 65 74 43 6f 6f 6b 69 65 2c 20 30 29  ), setCookie, 0)
130a0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
130b0 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
130c0 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
130d0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
130e0 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
130f0 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
13100 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ht));.      sqli
13110 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
13120 76 2c 20 61 64 64 72 2b 32 2c 20 69 44 62 29 3b  v, addr+2, iDb);
13130 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
13140 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64  beChangeP2(v, ad
13150 64 72 2b 32 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a  dr+2, iCookie);.
13160 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
13170 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 70 65   /* Read the spe
13180 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61  cified cookie va
13190 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61  lue */.      sta
131a0 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
131b0 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b  List readCookie[
131c0 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20  ] = {.        { 
131d0 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
131e0 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20      0,  0,  0}, 
131f0 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
13200 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
13210 69 65 2c 20 20 20 20 20 20 30 2c 20 20 31 2c 20  ie,      0,  1, 
13220 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
13230 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73          { OP_Res
13240 75 6c 74 52 6f 77 2c 20 20 20 20 20 20 20 31 2c  ultRow,       1,
13250 20 20 31 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d    1,  0}.      }
13260 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64 72  ;.      int addr
13270 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
13280 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
13290 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29  Size(readCookie)
132a0 2c 20 72 65 61 64 43 6f 6f 6b 69 65 2c 20 30 29  , readCookie, 0)
132b0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
132c0 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
132d0 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
132e0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
132f0 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
13300 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
13310 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 33 28  te3VdbeChangeP3(
13320 76 2c 20 61 64 64 72 2b 31 2c 20 69 43 6f 6f 6b  v, addr+1, iCook
13330 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ie);.      sqlit
13340 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
13350 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  (v, 1);.      sq
13360 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
13370 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
13380 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53  E_NAME, zLeft, S
13390 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
133a0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
133b0 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
133c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
133d0 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
133e0 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
133f0 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
13400 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20  EOPTION_DIAGS.  
13410 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
13420 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73   compile_options
13430 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
13440 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61  n the names of a
13450 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ll compile-time 
13460 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20  options used in 
13470 74 68 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a  this build,.  **
13480 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20   one option per 
13490 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  row..  */.  case
134a0 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45   PragTyp_COMPILE
134b0 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20  _OPTIONS: {.    
134c0 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63  int i = 0;.    c
134d0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b  onst char *zOpt;
134e0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
134f0 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
13500 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
13510 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69  em = 1;.    sqli
13520 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
13530 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
13540 4e 41 4d 45 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f  NAME, "compile_o
13550 70 74 69 6f 6e 22 2c 20 53 51 4c 49 54 45 5f 53  ption", SQLITE_S
13560 54 41 54 49 43 29 3b 0a 20 20 20 20 77 68 69 6c  TATIC);.    whil
13570 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74  e( (zOpt = sqlit
13580 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e  e3_compileoption
13590 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b  _get(i++))!=0 ){
135a0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
135b0 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
135c0 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c  tring8, 0, 1, 0,
135d0 20 7a 4f 70 74 2c 20 30 29 3b 0a 20 20 20 20 20   zOpt, 0);.     
135e0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
135f0 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
13600 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d  ow, 1, 1);.    }
13610 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
13620 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
13630 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
13640 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e  N_DIAGS */..#ifn
13650 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13660 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  WAL.  /*.  **   
13670 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
13680 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74  .]wal_checkpoint
13690 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c   = passive|full|
136a0 72 65 73 74 61 72 74 0a 20 20 2a 2a 0a 20 20 2a  restart.  **.  *
136b0 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 74 68 65  * Checkpoint the
136c0 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a   database..  */.
136d0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 57    case PragTyp_W
136e0 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b  AL_CHECKPOINT: {
136f0 0a 20 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28  .    int iBt = (
13700 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49  pId2->z?iDb:SQLI
13710 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29  TE_MAX_ATTACHED)
13720 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20  ;.    int eMode 
13730 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  = SQLITE_CHECKPO
13740 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20  INT_PASSIVE;.   
13750 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
13760 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
13770 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  StrICmp(zRight, 
13780 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20  "full")==0 ){.  
13790 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51        eMode = SQ
137a0 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
137b0 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73  FULL;.      }els
137c0 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
137d0 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65  ICmp(zRight, "re
137e0 73 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20  start")==0 ){.  
137f0 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51        eMode = SQ
13800 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
13810 52 45 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d  RESTART;.      }
13820 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
13830 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
13840 28 76 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72  (v, 3);.    pPar
13850 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20  se->nMem = 3;.  
13860 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
13870 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
13880 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 62 75 73  LNAME_NAME, "bus
13890 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  y", SQLITE_STATI
138a0 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
138b0 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
138c0 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
138d0 2c 20 22 6c 6f 67 22 2c 20 53 51 4c 49 54 45 5f  , "log", SQLITE_
138e0 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
138f0 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
13900 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
13910 5f 4e 41 4d 45 2c 20 22 63 68 65 63 6b 70 6f 69  _NAME, "checkpoi
13920 6e 74 65 64 22 2c 20 53 51 4c 49 54 45 5f 53 54  nted", SQLITE_ST
13930 41 54 49 43 29 3b 0a 0a 20 20 20 20 73 71 6c 69  ATIC);..    sqli
13940 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
13950 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20   OP_Checkpoint, 
13960 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a  iBt, eMode, 1);.
13970 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
13980 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
13990 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20  ltRow, 1, 3);.  
139a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a  }.  break;..  /*
139b0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77  .  **   PRAGMA w
139c0 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
139d0 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  t.  **   PRAGMA 
139e0 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
139f0 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  nt = N.  **.  **
13a00 20 43 6f 6e 66 69 67 75 72 65 20 61 20 64 61 74   Configure a dat
13a10 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
13a20 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   to automaticall
13a30 79 20 63 68 65 63 6b 70 6f 69 6e 74 20 61 20 64  y checkpoint a d
13a40 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 61 66 74  atabase.  ** aft
13a50 65 72 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20  er accumulating 
13a60 4e 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20  N frames in the 
13a70 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79 20 66 6f  log. Or query fo
13a80 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  r the current va
13a90 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20  lue.  ** of N.. 
13aa0 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
13ab0 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b  yp_WAL_AUTOCHECK
13ac0 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66 28  POINT: {.    if(
13ad0 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
13ae0 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74   sqlite3_wal_aut
13af0 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20  ocheckpoint(db, 
13b00 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
13b10 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ht));.    }.    
13b20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
13b30 70 50 61 72 73 65 2c 20 22 77 61 6c 5f 61 75 74  pParse, "wal_aut
13b40 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20  ocheckpoint", . 
13b50 20 20 20 20 20 20 64 62 2d 3e 78 57 61 6c 43 61        db->xWalCa
13b60 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57  llback==sqlite3W
13b70 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20  alDefaultHook ? 
13b80 0a 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49  .           SQLI
13b90 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62  TE_PTR_TO_INT(db
13ba0 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20 30 29 3b  ->pWalArg) : 0);
13bb0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
13bc0 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  ndif..  /*.  ** 
13bd0 20 50 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d   PRAGMA shrink_m
13be0 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20  emory.  **.  ** 
13bf0 54 68 69 73 20 70 72 61 67 6d 61 20 61 74 74 65  This pragma atte
13c00 6d 70 74 73 20 74 6f 20 66 72 65 65 20 61 73 20  mpts to free as 
13c10 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61 73 20 70  much memory as p
13c20 6f 73 73 69 62 6c 65 20 66 72 6f 6d 20 74 68 65  ossible from the
13c30 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 64 61  .  ** current da
13c40 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
13c50 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  n..  */.  case P
13c60 72 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45  ragTyp_SHRINK_ME
13c70 4d 4f 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69  MORY: {.    sqli
13c80 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d  te3_db_release_m
13c90 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20 20 20 62  emory(db);.    b
13ca0 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
13cb0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75    **   PRAGMA bu
13cc0 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20  sy_timeout.  ** 
13cd0 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69    PRAGMA busy_ti
13ce0 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20  meout = N.  **. 
13cf0 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33   ** Call sqlite3
13d00 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62  _busy_timeout(db
13d10 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68  , N).  Return th
13d20 65 20 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75  e current timeou
13d30 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20  t value.  ** if 
13d40 6f 6e 65 20 69 73 20 73 65 74 2e 20 20 49 66 20  one is set.  If 
13d50 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20  no busy handler 
13d60 6f 72 20 61 20 64 69 66 66 65 72 65 6e 74 20 62  or a different b
13d70 75 73 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73  usy handler is s
13d80 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69  et.  ** then 0 i
13d90 73 20 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74  s returned.  Set
13da0 74 69 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69  ting the busy_ti
13db0 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65  meout to 0 or ne
13dc0 67 61 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61  gative.  ** disa
13dd0 62 6c 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74  bles the timeout
13de0 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20  ..  */.  /*case 
13df0 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d  PragTyp_BUSY_TIM
13e00 45 4f 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20  EOUT*/ default: 
13e10 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 50  {.    assert( aP
13e20 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e  ragmaNames[mid].
13e30 65 50 72 61 67 54 79 70 3d 3d 50 72 61 67 54 79  ePragTyp==PragTy
13e40 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 20 29  p_BUSY_TIMEOUT )
13e50 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
13e60 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
13e70 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64  3_busy_timeout(d
13e80 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  b, sqlite3Atoi(z
13e90 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20  Right));.    }. 
13ea0 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
13eb0 6e 74 28 70 50 61 72 73 65 2c 20 22 74 69 6d 65  nt(pParse, "time
13ec0 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54  out",  db->busyT
13ed0 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65  imeout);.    bre
13ee0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
13ef0 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74  **   PRAGMA soft
13f00 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a  _heap_limit.  **
13f10 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68     PRAGMA soft_h
13f20 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20  eap_limit = N.  
13f30 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c  **.  ** Call sql
13f40 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  ite3_soft_heap_l
13f50 69 6d 69 74 36 34 28 4e 29 2e 20 20 52 65 74 75  imit64(N).  Retu
13f60 72 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  rn the result.  
13f70 49 66 20 4e 20 69 73 20 6f 6d 69 74 74 65 64 2c  If N is omitted,
13f80 0a 20 20 2a 2a 20 75 73 65 20 2d 31 2e 0a 20 20  .  ** use -1..  
13f90 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
13fa0 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49  p_SOFT_HEAP_LIMI
13fb0 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  T: {.    sqlite3
13fc0 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66  _int64 N;.    if
13fd0 28 20 7a 52 69 67 68 74 20 26 26 20 73 71 6c 69  ( zRight && sqli
13fe0 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
13ff0 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51  (zRight, &N)==SQ
14000 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
14010 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
14020 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a 20  ap_limit64(N);. 
14030 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
14040 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
14050 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69   "soft_heap_limi
14060 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f 66  t",  sqlite3_sof
14070 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d  t_heap_limit64(-
14080 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  1));.    break;.
14090 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
140a0 20 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 0a   PRAGMA threads.
140b0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68    **   PRAGMA th
140c0 72 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20  reads = N.  **. 
140d0 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74 68   ** Configure th
140e0 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72  e maximum number
140f0 20 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65 61   of worker threa
14100 64 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  ds.  Return the 
14110 6e 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d  new.  ** maximum
14120 2c 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65  , which might be
14130 20 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75 65   less than reque
14140 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  sted..  */.  cas
14150 65 20 50 72 61 67 54 79 70 5f 54 48 52 45 41 44  e PragTyp_THREAD
14160 53 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  S: {.    sqlite3
14170 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66  _int64 N;.    if
14180 28 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26 26  ( zRight.     &&
14190 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78   sqlite3DecOrHex
141a0 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e  ToI64(zRight, &N
141b0 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20  )==SQLITE_OK.   
141c0 20 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b    && N>=0.    ){
141d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c  .      sqlite3_l
141e0 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f  imit(db, SQLITE_
141f0 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
14200 45 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30 78  EADS, (int)(N&0x
14210 37 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20 20  7fffffff));.    
14220 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
14230 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74  leInt(pParse, "t
14240 68 72 65 61 64 73 22 2c 0a 20 20 20 20 20 20 20  hreads",.       
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
14260 69 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53  ite3_limit(db, S
14270 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
14280 45 52 5f 54 48 52 45 41 44 53 2c 20 2d 31 29 29  ER_THREADS, -1))
14290 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
142a0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
142b0 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
142c0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
142d0 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52 65  ST).  /*.  ** Re
142e0 70 6f 72 74 20 74 68 65 20 63 75 72 72 65 6e 74  port the current
142f0 20 73 74 61 74 65 20 6f 66 20 66 69 6c 65 20 6c   state of file l
14300 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61  ogs for all data
14310 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20 63 61 73  bases.  */.  cas
14320 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53  e PragTyp_LOCK_S
14330 54 41 54 55 53 3a 20 7b 0a 20 20 20 20 73 74 61  TATUS: {.    sta
14340 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
14350 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65  const azLockName
14360 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e  [] = {.      "un
14370 6c 6f 63 6b 65 64 22 2c 20 22 73 68 61 72 65 64  locked", "shared
14380 22 2c 20 22 72 65 73 65 72 76 65 64 22 2c 20 22  ", "reserved", "
14390 70 65 6e 64 69 6e 67 22 2c 20 22 65 78 63 6c 75  pending", "exclu
143a0 73 69 76 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20  sive".    };.   
143b0 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69   int i;.    sqli
143c0 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
143d0 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61  s(v, 2);.    pPa
143e0 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20  rse->nMem = 2;. 
143f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
14400 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
14410 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 61  OLNAME_NAME, "da
14420 74 61 62 61 73 65 22 2c 20 53 51 4c 49 54 45 5f  tabase", SQLITE_
14430 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
14440 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
14450 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
14460 5f 4e 41 4d 45 2c 20 22 73 74 61 74 75 73 22 2c  _NAME, "status",
14470 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
14480 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
14490 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
144a0 20 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b       Btree *pBt;
144b0 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
144c0 72 20 2a 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b  r *zState = "unk
144d0 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74  nown";.      int
144e0 20 6a 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62   j;.      if( db
144f0 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d  ->aDb[i].zName==
14500 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
14510 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
14520 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
14530 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 64 62  ng8, 0, 1, 0, db
14540 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  ->aDb[i].zName, 
14550 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
14560 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
14570 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69 66  i].pBt;.      if
14580 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69  ( pBt==0 || sqli
14590 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
145a0 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  t)==0 ){.       
145b0 20 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f 73 65   zState = "close
145c0 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  d";.      }else 
145d0 69 66 28 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  if( sqlite3_file
145e0 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f  _control(db, i ?
145f0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
14600 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20  e : 0, .        
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14620 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
14630 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54  ITE_FCNTL_LOCKST
14640 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45  ATE, &j)==SQLITE
14650 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
14660 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e  zState = azLockN
14670 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a  ame[j];.      }.
14680 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
14690 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
146a0 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
146b0 7a 53 74 61 74 65 2c 20 50 34 5f 53 54 41 54 49  zState, P4_STATI
146c0 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
146d0 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
146e0 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
146f0 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  2);.    }.    br
14700 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
14710 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
14720 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65 20  AS_CODEC.  case 
14730 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20  PragTyp_KEY: {. 
14740 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20     if( zRight ) 
14750 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64  sqlite3_key_v2(d
14760 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20  b, zDb, zRight, 
14770 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
14780 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72  zRight));.    br
14790 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20  eak;.  }.  case 
147a0 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b  PragTyp_REKEY: {
147b0 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
147c0 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f  ) sqlite3_rekey_
147d0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67  v2(db, zDb, zRig
147e0 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
147f0 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
14800 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63    break;.  }.  c
14810 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b  ase PragTyp_HEXK
14820 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
14830 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75 38  ight ){.      u8
14840 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69 6e   iByte;.      in
14850 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72 20  t i;.      char 
14860 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20  zKey[40];.      
14870 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30  for(i=0, iByte=0
14880 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29  ; i<sizeof(zKey)
14890 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49 73 78  *2 && sqlite3Isx
148a0 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d 29  digit(zRight[i])
148b0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
148c0 69 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c 3c  iByte = (iByte<<
148d0 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54  4) + sqlite3HexT
148e0 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b  oInt(zRight[i]);
148f0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26  .        if( (i&
14900 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32  1)!=0 ) zKey[i/2
14910 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20 20  ] = iByte;.     
14920 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 4c   }.      if( (zL
14930 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30  eft[3] & 0xf)==0
14940 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  xb ){.        sq
14950 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c  lite3_key_v2(db,
14960 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29   zDb, zKey, i/2)
14970 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
14980 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
14990 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
149a0 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20   zKey, i/2);.   
149b0 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
149c0 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
149d0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
149e0 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c  ITE_HAS_CODEC) |
149f0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
14a00 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20  _ENABLE_CEROD). 
14a10 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 43   case PragTyp_AC
14a20 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e  TIVATE_EXTENSION
14a30 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  S: if( zRight ){
14a40 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
14a50 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66 28  AS_CODEC.    if(
14a60 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
14a70 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22 2c  (zRight, "see-",
14a80 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   4)==0 ){.      
14a90 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65  sqlite3_activate
14aa0 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d 29  _see(&zRight[4])
14ab0 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23  ;.    }.#endif.#
14ac0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
14ad0 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69 66  BLE_CEROD.    if
14ae0 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
14af0 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f 64  p(zRight, "cerod
14b00 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 6)==0 ){.   
14b10 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
14b20 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68  ate_cerod(&zRigh
14b30 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  t[6]);.    }.#en
14b40 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
14b50 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20  .#endif..  } /* 
14b60 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47 4d  End of the PRAGM
14b70 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72 61  A switch */..pra
14b80 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74  gma_out:.  sqlit
14b90 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c 65  e3DbFree(db, zLe
14ba0 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  ft);.  sqlite3Db
14bb0 46 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74 29  Free(db, zRight)
14bc0 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.}..#endif /* S
14bd0 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
14be0 41 20 2a 2f 0a                                   A */.