/ Hex Artifact Content
Login

Artifact c93be505649183b2d80082c2eef1a56879dabfe6:


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 61  GS_MASK );.    a
5360: 73 73 65 72 74 28 20 28 70 44 62 2d 3e 73 61 66  ssert( (pDb->saf
5370: 65 74 79 5f 6c 65 76 65 6c 20 26 20 50 41 47 45  ety_level & PAGE
5380: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41  R_SYNCHRONOUS_MA
5390: 53 4b 29 3d 3d 70 44 62 2d 3e 73 61 66 65 74 79  SK)==pDb->safety
53a0: 5f 6c 65 76 65 6c 20 29 3b 0a 20 20 20 20 77 68  _level );.    wh
53b0: 69 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30 20 29  ile( (n--) > 0 )
53c0: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 44 62 2d  {.      if( pDb-
53d0: 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 20 20  >pBt ){.        
53e0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 50  sqlite3BtreeSetP
53f0: 61 67 65 72 46 6c 61 67 73 28 70 44 62 2d 3e 70  agerFlags(pDb->p
5400: 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
5410: 20 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79       pDb->safety
5420: 5f 6c 65 76 65 6c 20 7c 20 28 64 62 2d 3e 66 6c  _level | (db->fl
5430: 61 67 73 20 26 20 50 41 47 45 52 5f 46 4c 41 47  ags & PAGER_FLAG
5440: 53 5f 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20 20  S_MASK) );.     
5450: 20 7d 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b 0a   }.      pDb++;.
5460: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73      }.  }.}.#els
5470: 65 0a 23 20 64 65 66 69 6e 65 20 73 65 74 41 6c  e.# define setAl
5480: 6c 50 61 67 65 72 46 6c 61 67 73 28 58 29 20 20  lPagerFlags(X)  
5490: 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64  /* no-op */.#end
54a0: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  if.../*.** Retur
54b0: 6e 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62  n a human-readab
54c0: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 61 20 63 6f  le name for a co
54d0: 6e 73 74 72 61 69 6e 74 20 72 65 73 6f 6c 75 74  nstraint resolut
54e0: 69 6f 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  ion action..*/.#
54f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5500: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 73  IT_FOREIGN_KEY.s
5510: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
5520: 20 2a 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38 20   *actionName(u8 
5530: 61 63 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74  action){.  const
5540: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20   char *zName;.  
5550: 73 77 69 74 63 68 28 20 61 63 74 69 6f 6e 20 29  switch( action )
5560: 7b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65  {.    case OE_Se
5570: 74 4e 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20  tNull:  zName = 
5580: 22 53 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20 20  "SET NULL";     
5590: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
55a0: 73 65 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20 20  se OE_SetDflt:  
55b0: 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 44 45 46  zName = "SET DEF
55c0: 41 55 4c 54 22 3b 20 20 20 20 20 62 72 65 61 6b  AULT";     break
55d0: 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 43 61  ;.    case OE_Ca
55e0: 73 63 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d 20  scade:  zName = 
55f0: 22 43 41 53 43 41 44 45 22 3b 20 20 20 20 20 20  "CASCADE";      
5600: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
5610: 73 65 20 4f 45 5f 52 65 73 74 72 69 63 74 3a 20  se OE_Restrict: 
5620: 7a 4e 61 6d 65 20 3d 20 22 52 45 53 54 52 49 43  zName = "RESTRIC
5630: 54 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  T";        break
5640: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
5650: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
5660: 22 4e 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a 20  "NO ACTION";  . 
5670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5680: 20 20 20 20 20 61 73 73 65 72 74 28 20 61 63 74       assert( act
5690: 69 6f 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20  ion==OE_None ); 
56a0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74  break;.  }.  ret
56b0: 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e  urn zName;.}.#en
56c0: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61  dif.../*.** Para
56d0: 6d 65 74 65 72 20 65 4d 6f 64 65 20 6d 75 73 74  meter eMode must
56e0: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 50   be one of the P
56f0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
5700: 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a 2a  _XXX constants.*
5710: 2a 20 64 65 66 69 6e 65 64 20 69 6e 20 70 61 67  * defined in pag
5720: 65 72 2e 68 2e 20 54 68 69 73 20 66 75 6e 63 74  er.h. This funct
5730: 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
5740: 61 73 73 6f 63 69 61 74 65 64 20 6c 6f 77 65 72  associated lower
5750: 63 61 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d  case.** journal-
5760: 6d 6f 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f  mode name..*/.co
5770: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
5780: 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
5790: 28 69 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20 73  (int eMode){.  s
57a0: 74 61 74 69 63 20 63 68 61 72 20 2a 20 63 6f 6e  tatic char * con
57b0: 73 74 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20  st azModeName[] 
57c0: 3d 20 7b 0a 20 20 20 20 22 64 65 6c 65 74 65 22  = {.    "delete"
57d0: 2c 20 22 70 65 72 73 69 73 74 22 2c 20 22 6f 66  , "persist", "of
57e0: 66 22 2c 20 22 74 72 75 6e 63 61 74 65 22 2c 20  f", "truncate", 
57f0: 22 6d 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65 66  "memory".#ifndef
5800: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
5810: 0a 20 20 20 20 20 2c 20 22 77 61 6c 22 0a 23 65  .     , "wal".#e
5820: 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73 65  ndif.  };.  asse
5830: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
5840: 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30 20  LMODE_DELETE==0 
5850: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
5860: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
5870: 45 52 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20 61  ERSIST==1 );.  a
5880: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
5890: 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20  RNALMODE_OFF==2 
58a0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
58b0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54  ER_JOURNALMODE_T
58c0: 52 55 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20 20  RUNCATE==3 );.  
58d0: 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f  assert( PAGER_JO
58e0: 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
58f0: 3d 3d 34 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==4 );.  assert(
5900: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
5910: 44 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20 61  DE_WAL==5 );.  a
5920: 73 73 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30 20  ssert( eMode>=0 
5930: 26 26 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79 53  && eMode<=ArrayS
5940: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
5950: 29 3b 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65 3d  );..  if( eMode=
5960: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64  =ArraySize(azMod
5970: 65 4e 61 6d 65 29 20 29 20 72 65 74 75 72 6e 20  eName) ) return 
5980: 30 3b 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d 6f  0;.  return azMo
5990: 64 65 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d  deName[eMode];.}
59a0: 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20  ../*.** Process 
59b0: 61 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  a pragma stateme
59c0: 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67  nt.  .**.** Prag
59d0: 6d 61 73 20 61 72 65 20 6f 66 20 74 68 69 73 20  mas are of this 
59e0: 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  form:.**.**     
59f0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
5a00: 65 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a  e.]id [= value].
5a10: 2a 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74 69  **.** The identi
5a20: 66 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f 20  fier might also 
5a30: 62 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54 68  be a string.  Th
5a40: 65 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72  e value is a str
5a50: 69 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e  ing, and.** iden
5a60: 74 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d  tifier, or a num
5a70: 62 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c  ber.  If minusFl
5a80: 61 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  ag is true, then
5a90: 20 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a   the value is.**
5aa0: 20 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20 77   a number that w
5ab0: 61 73 20 70 72 65 63 65 64 65 64 20 62 79 20 61  as preceded by a
5ac0: 20 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a   minus sign..**.
5ad0: 2a 2a 20 49 66 20 74 68 65 20 6c 65 66 74 20 73  ** If the left s
5ae0: 69 64 65 20 69 73 20 22 64 61 74 61 62 61 73 65  ide is "database
5af0: 2e 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69  .id" then pId1 i
5b00: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e  s the database n
5b10: 61 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20  ame.** and pId2 
5b20: 69 73 20 74 68 65 20 69 64 2e 20 20 49 66 20 74  is the id.  If t
5b30: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
5b40: 6a 75 73 74 20 22 69 64 22 20 74 68 65 6e 20 70  just "id" then p
5b50: 49 64 31 20 69 73 20 74 68 65 0a 2a 2a 20 69 64  Id1 is the.** id
5b60: 20 61 6e 64 20 70 49 64 32 20 69 73 20 61 6e 79   and pId2 is any
5b70: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a   empty string..*
5b80: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  /.void sqlite3Pr
5b90: 61 67 6d 61 28 0a 20 20 50 61 72 73 65 20 2a 70  agma(.  Parse *p
5ba0: 50 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20  Parse, .  Token 
5bb0: 2a 70 49 64 31 2c 20 20 20 20 20 20 20 20 2f 2a  *pId1,        /*
5bc0: 20 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 5b   First part of [
5bd0: 64 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65  database.]id fie
5be0: 6c 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  ld */.  Token *p
5bf0: 49 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20 53  Id2,        /* S
5c00: 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b 64  econd part of [d
5c10: 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c  atabase.]id fiel
5c20: 64 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  d, or NULL */.  
5c30: 54 6f 6b 65 6e 20 2a 70 56 61 6c 75 65 2c 20 20  Token *pValue,  
5c40: 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72      /* Token for
5c50: 20 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c   <value>, or NUL
5c60: 4c 20 2a 2f 0a 20 20 69 6e 74 20 6d 69 6e 75 73  L */.  int minus
5c70: 46 6c 61 67 20 20 20 20 20 20 20 2f 2a 20 54 72  Flag       /* Tr
5c80: 75 65 20 69 66 20 61 20 27 2d 27 20 73 69 67 6e  ue if a '-' sign
5c90: 20 70 72 65 63 65 64 65 64 20 3c 76 61 6c 75 65   preceded <value
5ca0: 3e 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a  > */.){.  char *
5cb0: 7a 4c 65 66 74 20 3d 20 30 3b 20 20 20 20 20 20  zLeft = 0;      
5cc0: 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74   /* Nul-terminat
5cd0: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
5ce0: 3c 69 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  <id> */.  char *
5cf0: 7a 52 69 67 68 74 20 3d 20 30 3b 20 20 20 20 20  zRight = 0;     
5d00: 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74   /* Nul-terminat
5d10: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
5d20: 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c  <value>, or NULL
5d30: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
5d40: 20 2a 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20   *zDb = 0;   /* 
5d50: 54 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d  The database nam
5d60: 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49  e */.  Token *pI
5d70: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
5d80: 20 50 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64 3e   Pointer to <id>
5d90: 20 74 6f 6b 65 6e 20 2a 2f 0a 20 20 63 68 61 72   token */.  char
5da0: 20 2a 61 46 63 6e 74 6c 5b 34 5d 3b 20 20 20 20   *aFcntl[4];    
5db0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
5dc0: 6f 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  o SQLITE_FCNTL_P
5dd0: 52 41 47 4d 41 20 2a 2f 0a 20 20 69 6e 74 20 69  RAGMA */.  int i
5de0: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
5df0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 6e    /* Database in
5e00: 64 65 78 20 66 6f 72 20 3c 64 61 74 61 62 61 73  dex for <databas
5e10: 65 3e 20 2a 2f 0a 20 20 69 6e 74 20 6c 77 72 2c  e> */.  int lwr,
5e20: 20 75 70 72 2c 20 6d 69 64 3b 20 20 20 20 20 20   upr, mid;      
5e30: 20 20 20 20 20 2f 2a 20 42 69 6e 61 72 79 20 73       /* Binary s
5e40: 65 61 72 63 68 20 62 6f 75 6e 64 73 20 2a 2f 0a  earch bounds */.
5e50: 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
5e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5e70: 2a 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 66  * return value f
5e80: 6f 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  orm SQLITE_FCNTL
5e90: 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71 6c  _PRAGMA */.  sql
5ea0: 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73  ite3 *db = pPars
5eb0: 65 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68 65  e->db;    /* The
5ec0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
5ed0: 74 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70 44  tion */.  Db *pD
5ee0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
5ef0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70         /* The sp
5f00: 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20  ecific database 
5f10: 62 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20 2a  being pragmaed *
5f20: 2f 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71  /.  Vdbe *v = sq
5f30: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
5f40: 72 73 65 29 3b 20 20 2f 2a 20 50 72 65 70 61 72  rse);  /* Prepar
5f50: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ed statement */.
5f60: 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65  .  if( v==0 ) re
5f70: 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56  turn;.  sqlite3V
5f80: 64 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76  dbeRunOnlyOnce(v
5f90: 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  );.  pParse->nMe
5fa0: 6d 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74  m = 2;..  /* Int
5fb0: 65 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61  erpret the [data
5fc0: 62 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74  base.] part of t
5fd0: 68 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d  he pragma statem
5fe0: 65 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a  ent. iDb is the.
5ff0: 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68    ** index of th
6000: 65 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20  e database this 
6010: 70 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20  pragma is being 
6020: 61 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62  applied to in db
6030: 2e 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62  .aDb[]. */.  iDb
6040: 20 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72   = sqlite3TwoPar
6050: 74 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49  tName(pParse, pI
6060: 64 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b  d1, pId2, &pId);
6070: 0a 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72  .  if( iDb<0 ) r
6080: 65 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26  eturn;.  pDb = &
6090: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20  db->aDb[iDb];.. 
60a0: 20 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20   /* If the temp 
60b0: 64 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65  database has bee
60c0: 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d  n explicitly nam
60d0: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
60e0: 65 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20  e .  ** pragma, 
60f0: 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20  make sure it is 
6100: 6f 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66  open. .  */.  if
6110: 28 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69  ( iDb==1 && sqli
6120: 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
6130: 61 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20  ase(pParse) ){. 
6140: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a     return;.  }..
6150: 20 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65    zLeft = sqlite
6160: 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64  3NameFromToken(d
6170: 62 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21  b, pId);.  if( !
6180: 7a 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a  zLeft ) return;.
6190: 20 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20    if( minusFlag 
61a0: 29 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20  ){.    zRight = 
61b0: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
61c0: 62 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65  b, "-%T", pValue
61d0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
61e0: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
61f0: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62  NameFromToken(db
6200: 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a  , pValue);.  }..
6210: 20 20 61 73 73 65 72 74 28 20 70 49 64 32 20 29    assert( pId2 )
6220: 3b 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e  ;.  zDb = pId2->
6230: 6e 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65  n>0 ? pDb->zName
6240: 20 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69   : 0;.  if( sqli
6250: 74 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61  te3AuthCheck(pPa
6260: 72 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47  rse, SQLITE_PRAG
6270: 4d 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68  MA, zLeft, zRigh
6280: 74 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67  t, zDb) ){.    g
6290: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
62a0: 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61    }..  /* Send a
62b0: 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  n SQLITE_FCNTL_P
62c0: 52 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72  RAGMA file-contr
62d0: 6f 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c  ol to the underl
62e0: 79 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f  ying VFS.  ** co
62f0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74  nnection.  If it
6300: 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
6310: 4f 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20  OK, then assume 
6320: 74 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a  that the VFS.  *
6330: 2a 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72  * handled the pr
6340: 61 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74  agma and generat
6350: 65 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72  e a no-op prepar
6360: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  ed statement..  
6370: 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d  */.  aFcntl[0] =
6380: 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20   0;.  aFcntl[1] 
6390: 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74  = zLeft;.  aFcnt
63a0: 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20  l[2] = zRight;. 
63b0: 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a   aFcntl[3] = 0;.
63c0: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
63d0: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72  r.nBusy = 0;.  r
63e0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
63f0: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
6400: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  , SQLITE_FCNTL_P
6410: 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46  RAGMA, (void*)aF
6420: 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d  cntl);.  if( rc=
6430: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
6440: 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20    if( aFcntl[0] 
6450: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 65 6d  ){.      int mem
6460: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
6470: 6d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  m;.      sqlite3
6480: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
6490: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d 65 6d  _String8, 0, mem
64a0: 2c 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c 20  , 0, aFcntl[0], 
64b0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
64c0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
64d0: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
64e0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
64f0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
6500: 5f 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74 22 2c  _NAME, "result",
6510: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
6520: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
6530: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
6540: 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31  esultRow, mem, 1
6550: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
6560: 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29  _free(aFcntl[0])
6570: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
6580: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
6590: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
65a0: 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20  E_NOTFOUND ){.  
65b0: 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20    if( aFcntl[0] 
65c0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
65d0: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
65e0: 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30 5d   "%s", aFcntl[0]
65f0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
6600: 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29  _free(aFcntl[0])
6610: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61 72  ;.    }.    pPar
6620: 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20  se->nErr++;.    
6630: 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b  pParse->rc = rc;
6640: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
6650: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
6660: 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61 67 6d  Locate the pragm
6670: 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70 20  a in the lookup 
6680: 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20 3d  table */.  lwr =
6690: 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61   0;.  upr = Arra
66a0: 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d  ySize(aPragmaNam
66b0: 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20  es)-1;.  while( 
66c0: 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20  lwr<=upr ){.    
66d0: 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f  mid = (lwr+upr)/
66e0: 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  2;.    rc = sqli
66f0: 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65 66  te3_stricmp(zLef
6700: 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  t, aPragmaNames[
6710: 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20  mid].zName);.   
6720: 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72 65   if( rc==0 ) bre
6730: 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c 30  ak;.    if( rc<0
6740: 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d 20   ){.      upr = 
6750: 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c  mid - 1;.    }el
6760: 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d 20  se{.      lwr = 
6770: 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20  mid + 1;.    }. 
6780: 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70 72   }.  if( lwr>upr
6790: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
67a0: 75 74 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  ut;..  /* Make s
67b0: 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ure the database
67c0: 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65   schema is loade
67d0: 64 20 69 66 20 74 68 65 20 70 72 61 67 6d 61 20  d if the pragma 
67e0: 72 65 71 75 69 72 65 73 20 74 68 61 74 20 2a 2f  requires that */
67f0: 0a 20 20 69 66 28 20 28 61 50 72 61 67 6d 61 4e  .  if( (aPragmaN
6800: 61 6d 65 73 5b 6d 69 64 5d 2e 6d 50 72 61 67 46  ames[mid].mPragF
6810: 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 4e  lag & PragFlag_N
6820: 65 65 64 53 63 68 65 6d 61 29 21 3d 30 20 29 7b  eedSchema)!=0 ){
6830: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
6840: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
6850: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
6860: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
6870: 4a 75 6d 70 20 74 6f 20 74 68 65 20 61 70 70 72  Jump to the appr
6880: 6f 70 72 69 61 74 65 20 70 72 61 67 6d 61 20 68  opriate pragma h
6890: 61 6e 64 6c 65 72 20 2a 2f 0a 20 20 73 77 69 74  andler */.  swit
68a0: 63 68 28 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  ch( aPragmaNames
68b0: 5b 6d 69 64 5d 2e 65 50 72 61 67 54 79 70 20 29  [mid].ePragTyp )
68c0: 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65  {.  .#if !define
68d0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
68e0: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
68f0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
6900: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
6910: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
6920: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65  MA [database.]de
6930: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
6940: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
6950: 61 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74  atabase.]default
6960: 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20  _cache_size=N.  
6970: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
6980: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
6990: 68 65 20 63 75 72 72 65 6e 74 20 70 65 72 73 69  he current persi
69a0: 73 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  stent setting fo
69b0: 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20  r the.  ** page 
69c0: 63 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65  cache size.  The
69d0: 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
69e0: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  is the maximum n
69f0: 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61  umber of.  ** pa
6a00: 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20  ges in the page 
6a10: 63 61 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f  cache.  The seco
6a20: 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74  nd form sets bot
6a30: 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20  h the current.  
6a40: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
6a50: 7a 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  ze value and the
6a60: 20 70 65 72 73 69 73 74 65 6e 74 20 70 61 67 65   persistent page
6a70: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
6a80: 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e  e.  ** stored in
6a90: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6aa0: 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c  le..  **.  ** Ol
6ab0: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
6ac0: 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74  SQLite would set
6ad0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
6ae0: 68 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a  he size to a.  *
6af0: 2a 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  * negative numbe
6b00: 72 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79  r to indicate sy
6b10: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20  nchronous=OFF.  
6b20: 54 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63  These days, sync
6b30: 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20  hronous.  ** is 
6b40: 61 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66  always on by def
6b50: 61 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20  ault regardless 
6b60: 6f 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74  of the sign of t
6b70: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
6b80: 0a 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74  .  ** size.  But
6b90: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b   continue to tak
6ba0: 65 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76  e the absolute v
6bb0: 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66 61  alue of the defa
6bc0: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
6bd0: 69 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61  ize of historica
6be0: 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e  l compatibility.
6bf0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
6c00: 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43 41 43  gTyp_DEFAULT_CAC
6c10: 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73  HE_SIZE: {.    s
6c20: 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
6c30: 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45  iLn = VDBE_OFFSE
6c40: 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20  T_LINENO(2);.   
6c50: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
6c60: 62 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68  beOpList getCach
6c70: 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  eSize[] = {.    
6c80: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
6c90: 6f 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20  on, 0, 0,       
6ca0: 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20   0},            
6cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6cc0: 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  0 */.      { OP_
6cd0: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20  ReadCookie,  0, 
6ce0: 31 2c 20 20 20 20 20 20 20 20 42 54 52 45 45 5f  1,        BTREE_
6cf0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
6d00: 5a 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  ZE},  /* 1 */.  
6d10: 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20      { OP_IfPos, 
6d20: 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20        1, 8,     
6d30: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
6d40: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30  P_Integer,     0
6d50: 2c 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 2,        0},.
6d60: 20 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72        { OP_Subtr
6d70: 61 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20  act,    1, 2,   
6d80: 20 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b       1},.      {
6d90: 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20   OP_IfPos,      
6da0: 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d   1, 8,        0}
6db0: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
6dc0: 65 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20  eger,     0, 1, 
6dd0: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20         0},      
6de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6df0: 20 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20     /* 6 */.     
6e00: 20 7b 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20   { OP_Noop,     
6e10: 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20     0, 0,        
6e20: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52  0},.      { OP_R
6e30: 65 73 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31  esultRow,   1, 1
6e40: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
6e50: 20 7d 3b 0a 20 20 20 20 69 6e 74 20 61 64 64 72   };.    int addr
6e60: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
6e70: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44  eUsesBtree(v, iD
6e80: 62 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  b);.    if( !zRi
6e90: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
6ea0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
6eb0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
6ec0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
6ed0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
6ee0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 61 63 68 65  AME_NAME, "cache
6ef0: 5f 73 69 7a 65 22 2c 20 53 51 4c 49 54 45 5f 53  _size", SQLITE_S
6f00: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70 50  TATIC);.      pP
6f10: 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b  arse->nMem += 2;
6f20: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
6f30: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
6f40: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
6f50: 67 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67  getCacheSize), g
6f60: 65 74 43 61 63 68 65 53 69 7a 65 2c 69 4c 6e 29  etCacheSize,iLn)
6f70: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6f80: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
6f90: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
6fa0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
6fb0: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
6fc0: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
6fd0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
6fe0: 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49 54  v, addr+6, SQLIT
6ff0: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
7000: 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73 65  SIZE);.    }else
7010: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
7020: 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74   = sqlite3AbsInt
7030: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
7040: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
7050: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
7060: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
7070: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  , 0, iDb);.     
7080: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
7090: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
70a0: 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20 20  , size, 1);.    
70b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
70c0: 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  Op3(v, OP_SetCoo
70d0: 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f  kie, iDb, BTREE_
70e0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
70f0: 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73  ZE, 1);.      as
7100: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
7110: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
7120: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
7130: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
7140: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
7150: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
7160: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
7170: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
7180: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
7190: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  size);.    }.   
71a0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
71b0: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
71c0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
71d0: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
71e0: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
71f0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
7200: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
7210: 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a  RAGMAS).  /*.  *
7220: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
7230: 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ase.]page_size. 
7240: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
7250: 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65  abase.]page_size
7260: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
7270: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
7280: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
7290: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
72a0: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
72b0: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
72c0: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
72d0: 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a  rm sets the.  **
72e0: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
72f0: 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ize value.  The 
7300: 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62  value can only b
7310: 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68  e set if.  ** th
7320: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  e database has n
7330: 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61  ot yet been crea
7340: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
7350: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49   PragTyp_PAGE_SI
7360: 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  ZE: {.    Btree 
7370: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
7380: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
7390: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
73a0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
73b0: 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59  int size = ALWAY
73c0: 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33  S(pBt) ? sqlite3
73d0: 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65  BtreeGetPageSize
73e0: 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20  (pBt) : 0;.     
73f0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
7400: 28 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f 73  (pParse, "page_s
7410: 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20  ize", size);.   
7420: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
7430: 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c   Malloc may fail
7440: 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68   when setting th
7450: 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20  e page-size, as 
7460: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
7470: 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75  rnal.      ** bu
7480: 66 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61  ffer that the pa
7490: 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a  ger module resiz
74a0: 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  es using sqlite3
74b0: 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20  _realloc()..    
74c0: 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e    */.      db->n
74d0: 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71  extPagesize = sq
74e0: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
74f0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c  );.      if( SQL
7500: 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74  ITE_NOMEM==sqlit
7510: 65 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69  e3BtreeSetPageSi
7520: 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74  ze(pBt, db->next
7530: 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29  Pagesize,-1,0) )
7540: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 61  {.        db->ma
7550: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
7560: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
7570: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
7580: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
7590: 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72  [database.]secur
75a0: 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50  e_delete.  **  P
75b0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
75c0: 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f  ]secure_delete=O
75d0: 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20  N/OFF.  **.  ** 
75e0: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
75f0: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
7600: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
7610: 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f 64  he.  ** secure_d
7620: 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68 65  elete flag.  The
7630: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61   second form cha
7640: 6e 67 65 73 20 74 68 65 20 73 65 63 75 72 65 5f  nges the secure_
7650: 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67  delete.  ** flag
7660: 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65 70   setting and rep
7670: 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c 75  orts thenew valu
7680: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
7690: 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45  ragTyp_SECURE_DE
76a0: 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72 65  LETE: {.    Btre
76b0: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
76c0: 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20 2d  t;.    int b = -
76d0: 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
76e0: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
76f0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
7700: 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74 42   b = sqlite3GetB
7710: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
7720: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
7730: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62   pId2->n==0 && b
7740: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  >=0 ){.      int
7750: 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69   ii;.      for(i
7760: 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
7770: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
7780: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75  sqlite3BtreeSecu
7790: 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62  reDelete(db->aDb
77a0: 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20  [ii].pBt, b);.  
77b0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
77c0: 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  b = sqlite3Btree
77d0: 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74  SecureDelete(pBt
77e0: 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , b);.    return
77f0: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
7800: 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65  , "secure_delete
7810: 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b  ", b);.    break
7820: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
7830: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
7840: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
7850: 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  nt.  **  PRAGMA 
7860: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70  [database.]max_p
7870: 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a  age_count=N.  **
7880: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
7890: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
78a0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
78b0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61   for the.  ** ma
78c0: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
78d0: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
78e0: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
78f0: 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f   .  ** second fo
7900: 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63  rm attempts to c
7910: 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69  hange this setti
7920: 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66  ng.  Both.  ** f
7930: 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20  orms return the 
7940: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e  current setting.
7950: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61  .  **.  ** The a
7960: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
7970: 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69   N is used.  Thi
7980: 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s is undocumente
7990: 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a  d and might.  **
79a0: 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e   change.  The on
79b0: 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f  ly purpose is to
79c0: 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79   provide an easy
79d0: 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a   way to test.  *
79e0: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73  * the sqlite3Abs
79f0: 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e  Int32() function
7a00: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  **.  **  PRA
7a10: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70  GMA [database.]p
7a20: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20  age_count.  **. 
7a30: 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
7a40: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
7a50: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
7a60: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
7a70: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41   case PragTyp_PA
7a80: 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20  GE_COUNT: {.    
7a90: 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71  int iReg;.    sq
7aa0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
7ab0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
7ac0: 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b  b);.    iReg = +
7ad0: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
7ae0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f     if( sqlite3To
7af0: 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d  lower(zLeft[0])=
7b00: 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71  ='p' ){.      sq
7b10: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
7b20: 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c  v, OP_Pagecount,
7b30: 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20   iDb, iReg);.   
7b40: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
7b50: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
7b60: 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20  v, OP_MaxPgcnt, 
7b70: 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20  iDb, iReg, .    
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b90: 20 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e      sqlite3AbsIn
7ba0: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
7bb0: 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d  zRight)));.    }
7bc0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7bd0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
7be0: 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29  ultRow, iReg, 1)
7bf0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7c00: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
7c10: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
7c20: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
7c30: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
7c40: 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
7c50: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62  RANSIENT);.    b
7c60: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
7c70: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7c80: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f  tabase.]locking_
7c90: 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  mode.  **  PRAGM
7ca0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
7cb0: 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72  king_mode = (nor
7cc0: 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a 20  mal|exclusive). 
7cd0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
7ce0: 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a  yp_LOCKING_MODE:
7cf0: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
7d00: 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61  r *zRet = "norma
7d10: 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  l";.    int eMod
7d20: 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f  e = getLockingMo
7d30: 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20  de(zRight);..   
7d40: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
7d50: 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  && eMode==PAGER_
7d60: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52  LOCKINGMODE_QUER
7d70: 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69  Y ){.      /* Si
7d80: 6d 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f 63  mple "PRAGMA loc
7d90: 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74  king_mode;" stat
7da0: 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20 61  ement. This is a
7db0: 20 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20 20   query for.     
7dc0: 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
7dd0: 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20  default locking 
7de0: 6d 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79 20  mode (which may 
7df0: 62 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f 0a  be different to.
7e00: 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63        ** the loc
7e10: 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65  king-mode of the
7e20: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29 2e   main database).
7e30: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
7e40: 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74  eMode = db->dflt
7e50: 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65  LockMode;.    }e
7e60: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
7e70: 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20 20   *pPager;.      
7e80: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29  if( pId2->n==0 )
7e90: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69  {.        /* Thi
7ea0: 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  s indicates that
7eb0: 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d   no database nam
7ec0: 65 20 77 61 73 20 73 70 65 63 69 66 69 65 64 20  e was specified 
7ed0: 61 73 20 70 61 72 74 0a 20 20 20 20 20 20 20 20  as part.        
7ee0: 2a 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  ** of the PRAGMA
7ef0: 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69   command. In thi
7f00: 73 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b 69  s case the locki
7f10: 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a  ng-mode must be.
7f20: 20 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20 6f          ** set o
7f30: 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
7f40: 61 74 61 62 61 73 65 73 2c 20 61 73 20 77 65 6c  atabases, as wel
7f50: 6c 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 62  l as the main db
7f60: 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a   file..        *
7f70: 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73  *.        ** Als
7f80: 6f 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  o, the sqlite3.d
7f90: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69  fltLockMode vari
7fa0: 61 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20 74  able is set so t
7fb0: 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  hat.        ** a
7fc0: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20  ny subsequently 
7fd0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
7fe0: 65 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65 20  es also use the 
7ff0: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
8000: 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64    ** locking mod
8010: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
8020: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
8030: 20 20 20 20 20 20 61 73 73 65 72 74 28 70 44 62        assert(pDb
8040: 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a  ==&db->aDb[0]);.
8050: 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 32          for(ii=2
8060: 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
8070: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
8080: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
8090: 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
80a0: 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20  b[ii].pBt);.    
80b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
80c0: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
80d0: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
80e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
80f0: 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  db->dfltLockMode
8100: 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20   = (u8)eMode;.  
8110: 20 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61 67      }.      pPag
8120: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
8130: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
8140: 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  ;.      eMode = 
8150: 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b  sqlite3PagerLock
8160: 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  ingMode(pPager, 
8170: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20  eMode);.    }.. 
8180: 20 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64 65     assert( eMode
8190: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
81a0: 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20 20  ODE_NORMAL.     
81b0: 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65 3d         || eMode=
81c0: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
81d0: 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b 0a  DE_EXCLUSIVE );.
81e0: 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50      if( eMode==P
81f0: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
8200: 5f 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20 20  _EXCLUSIVE ){.  
8210: 20 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63 6c      zRet = "excl
8220: 75 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20  usive";.    }.  
8230: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8240: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
8250: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8260: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
8270: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f  OLNAME_NAME, "lo
8280: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c  cking_mode", SQL
8290: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
82a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
82b0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
82c0: 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c  , 0, 1, 0, zRet,
82d0: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
82e0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
82f0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
8300: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
8310: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
8320: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
8330: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a  journal_mode.  *
8340: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
8350: 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ase.]journal_mod
8360: 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  e =.  **        
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
8380: 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66  elete|persist|of
8390: 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72  f|truncate|memor
83a0: 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a  y|wal|off).  */.
83b0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a    case PragTyp_J
83c0: 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20  OURNAL_MODE: {. 
83d0: 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20     int eMode;   
83e0: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74       /* One of t
83f0: 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  he PAGER_JOURNAL
8400: 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73  MODE_XXX symbols
8410: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20   */.    int ii; 
8420: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
8430: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20  p counter */..  
8440: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8450: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
8460: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8470: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
8480: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f  OLNAME_NAME, "jo
8490: 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c  urnal_mode", SQL
84a0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20  ITE_STATIC);..  
84b0: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
84c0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ){.      /* If t
84d0: 68 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44  here is no "=MOD
84e0: 45 22 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  E" part of the p
84f0: 72 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65 72  ragma, do a quer
8500: 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20  y for the.      
8510: 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 20  ** current mode 
8520: 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  */.      eMode =
8530: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
8540: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d 65  DE_QUERY;.    }e
8550: 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  lse{.      const
8560: 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20   char *zMode;.  
8570: 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69      int n = sqli
8580: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67  te3Strlen30(zRig
8590: 68 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 65  ht);.      for(e
85a0: 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d  Mode=0; (zMode =
85b0: 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d   sqlite3JournalM
85c0: 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21  odename(eMode))!
85d0: 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20  =0; eMode++){.  
85e0: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
85f0: 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
8600: 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29  , zMode, n)==0 )
8610: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
8620: 20 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64 65        if( !zMode
8630: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
8640: 66 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70 61  f the "=MODE" pa
8650: 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  rt does not matc
8660: 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72  h any known jour
8670: 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20  nal mode,.      
8680: 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20 71    ** then do a q
8690: 75 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 20  uery */.        
86a0: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
86b0: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
86c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
86d0: 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41     if( eMode==PA
86e0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
86f0: 51 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e 6e  QUERY && pId2->n
8700: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
8710: 43 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41 20  Convert "PRAGMA 
8720: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e  journal_mode" in
8730: 74 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e  to "PRAGMA main.
8740: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f  journal_mode" */
8750: 0a 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b 0a  .      iDb = 0;.
8760: 20 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20        pId2->n = 
8770: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  1;.    }.    for
8780: 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69  (ii=db->nDb-1; i
8790: 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20  i>=0; ii--){.   
87a0: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
87b0: 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69  i].pBt && (ii==i
87c0: 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30  Db || pId2->n==0
87d0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
87e0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
87f0: 65 28 76 2c 20 69 69 29 3b 0a 20 20 20 20 20 20  e(v, ii);.      
8800: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8810: 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61  Op3(v, OP_Journa
8820: 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c 20 65 4d  lMode, ii, 1, eM
8830: 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ode);.      }.  
8840: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
8850: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8860: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
8870: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
8880: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
8890: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a  GMA [database.]j
88a0: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
88b0: 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  t.  **  PRAGMA [
88c0: 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61  database.]journa
88d0: 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a 20  l_size_limit=N. 
88e0: 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20   **.  ** Get or 
88f0: 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69 6d  set the size lim
8900: 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 6a  it on rollback j
8910: 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20 20  ournal files..  
8920: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
8930: 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c  p_JOURNAL_SIZE_L
8940: 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67 65  IMIT: {.    Page
8950: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
8960: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
8970: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36 34  b->pBt);.    i64
8980: 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20 20   iLimit = -2;.  
8990: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
89a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 63        sqlite3Dec
89b0: 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
89c0: 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20 20 20  t, &iLimit);.   
89d0: 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d 31     if( iLimit<-1
89e0: 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a   ) iLimit = -1;.
89f0: 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69 74      }.    iLimit
8a00: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 4a   = sqlite3PagerJ
8a10: 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74 28  ournalSizeLimit(
8a20: 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29 3b  pPager, iLimit);
8a30: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
8a40: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6a 6f  eInt(pParse, "jo
8a50: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
8a60: 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20  ", iLimit);.    
8a70: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64  break;.  }..#end
8a80: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
8a90: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  T_PAGER_PRAGMAS 
8aa0: 2a 2f 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 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a  ]auto_vacuum.  *
8ad0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
8ae0: 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d  ase.]auto_vacuum
8af0: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74  =N.  **.  ** Get
8b00: 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75   or set the valu
8b10: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
8b20: 65 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27 20  e 'auto-vacuum' 
8b30: 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20  parameter..  ** 
8b40: 54 68 65 20 76 61 6c 75 65 20 69 73 20 6f 6e 65  The value is one
8b50: 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46   of:  0 NONE 1 F
8b60: 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54 41  ULL 2 INCREMENTA
8b70: 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  L.  */.#ifndef S
8b80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
8b90: 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61  ACUUM.  case Pra
8ba0: 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d  gTyp_AUTO_VACUUM
8bb0: 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70  : {.    Btree *p
8bc0: 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  Bt = pDb->pBt;. 
8bd0: 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d     assert( pBt!=
8be0: 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  0 );.    if( !zR
8bf0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
8c00: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
8c10: 61 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63 75  arse, "auto_vacu
8c20: 75 6d 22 2c 20 73 71 6c 69 74 65 33 42 74 72 65  um", sqlite3Btre
8c30: 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70  eGetAutoVacuum(p
8c40: 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Bt));.    }else{
8c50: 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75 74 6f  .      int eAuto
8c60: 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d   = getAutoVacuum
8c70: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
8c80: 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e 3d 30  assert( eAuto>=0
8c90: 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b 0a   && eAuto<=2 );.
8ca0: 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 41 75        db->nextAu
8cb0: 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41 75 74  tovac = (u8)eAut
8cc0: 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  o;.      /* Call
8cd0: 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 29   SetAutoVacuum()
8ce0: 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61 6c 69   to set initiali
8cf0: 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ze the internal 
8d00: 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20 20 2a  auto and.      *
8d10: 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66 6c  * incr-vacuum fl
8d20: 61 67 73 2e 20 54 68 69 73 20 69 73 20 72 65 71  ags. This is req
8d30: 75 69 72 65 64 20 69 6e 20 63 61 73 65 20 74 68  uired in case th
8d40: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20  is connection.  
8d50: 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73 20 74      ** creates t
8d60: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
8d70: 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e  . It is importan
8d80: 74 20 74 68 61 74 20 69 74 20 69 73 20 63 72 65  t that it is cre
8d90: 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  ated.      ** as
8da0: 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   an auto-vacuum 
8db0: 63 61 70 61 62 6c 65 20 64 62 2e 0a 20 20 20 20  capable db..    
8dc0: 20 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d 20    */.      rc = 
8dd0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 41  sqlite3BtreeSetA
8de0: 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c 20 65  utoVacuum(pBt, e
8df0: 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 69 66 28  Auto);.      if(
8e00: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
8e10: 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c 20 65  & (eAuto==1 || e
8e20: 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20 20 20  Auto==2) ){.    
8e30: 20 20 20 20 2f 2a 20 57 68 65 6e 20 73 65 74 74      /* When sett
8e40: 69 6e 67 20 74 68 65 20 61 75 74 6f 5f 76 61 63  ing the auto_vac
8e50: 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69 74 68  uum mode to eith
8e60: 65 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a 20 20  er "full" or .  
8e70: 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72 65 6d        ** "increm
8e80: 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20 74 68  ental", write th
8e90: 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74 61 5b  e value of meta[
8ea0: 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  6] in the databa
8eb0: 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69  se.        ** fi
8ec0: 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74 69  le. Before writi
8ed0: 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20 63  ng to meta[6], c
8ee0: 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b 33  heck that meta[3
8ef0: 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20 20  ] indicates.    
8f00: 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 69 73      ** that this
8f10: 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20 61 75   really is an au
8f20: 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c  to-vacuum capabl
8f30: 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  e database..    
8f40: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 73      */.        s
8f50: 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
8f60: 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45  iLn = VDBE_OFFSE
8f70: 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20  T_LINENO(2);.   
8f80: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
8f90: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74  t VdbeOpList set
8fa0: 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20 20 20  Meta6[] = {.    
8fb0: 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73        { OP_Trans
8fc0: 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20 20  action,    0,   
8fd0: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
8fe0: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
8ff0: 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 0 */.        
9000: 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
9010: 65 2c 20 20 20 20 20 30 2c 20 20 20 20 20 20 20  e,     0,       
9020: 20 20 31 2c 20 20 20 20 20 20 20 20 20 42 54 52    1,         BTR
9030: 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f 4f 54 5f  EE_LARGEST_ROOT_
9040: 50 41 47 45 7d 2c 0a 20 20 20 20 20 20 20 20 20  PAGE},.         
9050: 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20 20   { OP_If,       
9060: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
9070: 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   0,             
9080: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20      0},    /* 2 
9090: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f  */.          { O
90a0: 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20 20  P_Halt,         
90b0: 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 4f 45 5f    SQLITE_OK, OE_
90c0: 41 62 6f 72 74 2c 20 20 20 20 20 20 20 20 20 20  Abort,          
90d0: 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20  0},    /* 3 */. 
90e0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e           { OP_In
90f0: 74 65 67 65 72 2c 20 20 20 20 20 20 20 20 30 2c  teger,        0,
9100: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
9110: 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20              0}, 
9120: 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20     /* 4 */.     
9130: 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f       { OP_SetCoo
9140: 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 20 20  kie,      0,    
9150: 20 20 20 20 20 42 54 52 45 45 5f 49 4e 43 52 5f       BTREE_INCR_
9160: 56 41 43 55 55 4d 2c 20 31 7d 2c 20 20 20 20 2f  VACUUM, 1},    /
9170: 2a 20 35 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  * 5 */.        }
9180: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 41  ;.        int iA
9190: 64 64 72 3b 0a 20 20 20 20 20 20 20 20 69 41 64  ddr;.        iAd
91a0: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
91b0: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
91c0: 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29  aySize(setMeta6)
91d0: 2c 20 73 65 74 4d 65 74 61 36 2c 20 69 4c 6e 29  , setMeta6, iLn)
91e0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
91f0: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
9200: 20 69 41 64 64 72 2c 20 69 44 62 29 3b 0a 20 20   iAddr, iDb);.  
9210: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9220: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64  eChangeP1(v, iAd
9230: 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20  dr+1, iDb);.    
9240: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
9250: 68 61 6e 67 65 50 32 28 76 2c 20 69 41 64 64 72  hangeP2(v, iAddr
9260: 2b 32 2c 20 69 41 64 64 72 2b 34 29 3b 0a 20 20  +2, iAddr+4);.  
9270: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9280: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64  eChangeP1(v, iAd
9290: 64 72 2b 34 2c 20 65 41 75 74 6f 2d 31 29 3b 0a  dr+4, eAuto-1);.
92a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
92b0: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69  dbeChangeP1(v, i
92c0: 41 64 64 72 2b 35 2c 20 69 44 62 29 3b 0a 20 20  Addr+5, iDb);.  
92d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
92e0: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44  eUsesBtree(v, iD
92f0: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
9300: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
9310: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20  .#endif..  /*.  
9320: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
9330: 62 61 73 65 2e 5d 69 6e 63 72 65 6d 65 6e 74 61  base.]incrementa
9340: 6c 5f 76 61 63 75 75 6d 28 4e 29 0a 20 20 2a 2a  l_vacuum(N).  **
9350: 0a 20 20 2a 2a 20 44 6f 20 4e 20 73 74 65 70 73  .  ** Do N steps
9360: 20 6f 66 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20   of incremental 
9370: 76 61 63 75 75 6d 69 6e 67 20 6f 6e 20 61 20 64  vacuuming on a d
9380: 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 23 69  atabase..  */.#i
9390: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
93a0: 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63  T_AUTOVACUUM.  c
93b0: 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 43 52  ase PragTyp_INCR
93c0: 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d 3a 20  EMENTAL_VACUUM: 
93d0: 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69 6d 69 74  {.    int iLimit
93e0: 2c 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28 20  , addr;.    if( 
93f0: 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21 73 71  zRight==0 || !sq
9400: 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52  lite3GetInt32(zR
9410: 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 20 7c  ight, &iLimit) |
9420: 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a 20  | iLimit<=0 ){. 
9430: 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 30 78       iLimit = 0x
9440: 37 66 66 66 66 66 66 66 3b 0a 20 20 20 20 7d 0a  7fffffff;.    }.
9450: 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e      sqlite3Begin
9460: 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70  WriteOperation(p
9470: 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a  Parse, 0, iDb);.
9480: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9490: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
94a0: 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20 31 29 3b  ger, iLimit, 1);
94b0: 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69  .    addr = sqli
94c0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
94d0: 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 2c 20   OP_IncrVacuum, 
94e0: 69 44 62 29 3b 20 56 64 62 65 43 6f 76 65 72 61  iDb); VdbeCovera
94f0: 67 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  ge(v);.    sqlit
9500: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
9510: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 29  OP_ResultRow, 1)
9520: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9530: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
9540: 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20  dImm, 1, -1);.  
9550: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9560: 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op2(v, OP_IfPos,
9570: 20 31 2c 20 61 64 64 72 29 3b 20 56 64 62 65 43   1, addr); VdbeC
9580: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
9590: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
95a0: 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20  ere(v, addr);.  
95b0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
95c0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
95d0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
95e0: 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a  RAGMAS.  /*.  **
95f0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
9600: 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 0a 20  se.]cache_size. 
9610: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
9620: 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a  abase.]cache_siz
9630: 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  e=N.  **.  ** Th
9640: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
9650: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
9660: 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20 66   local setting f
9670: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65  or the.  ** page
9680: 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68 65   cache size. The
9690: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74   second form set
96a0: 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a 2a  s the local.  **
96b0: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
96c0: 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69 73   value.  If N is
96d0: 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20 74   positive then t
96e0: 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a 20  hat is the.  ** 
96f0: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
9700: 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20 49  in the cache.  I
9710: 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c  f N is negative,
9720: 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 6e   then the.  ** n
9730: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
9740: 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74 68  s adjusted so th
9750: 61 74 20 74 68 65 20 63 61 63 68 65 20 75 73 65  at the cache use
9760: 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a 20  s -N kibibytes. 
9770: 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 20   ** of memory.. 
9780: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
9790: 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b  yp_CACHE_SIZE: {
97a0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
97b0: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
97c0: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
97d0: 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  );.    if( !zRig
97e0: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
97f0: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
9800: 73 65 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22  se, "cache_size"
9810: 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  , pDb->pSchema->
9820: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20  cache_size);.   
9830: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
9840: 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  t size = sqlite3
9850: 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  Atoi(zRight);.  
9860: 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
9870: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73  ->cache_size = s
9880: 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ize;.      sqlit
9890: 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53  e3BtreeSetCacheS
98a0: 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44  ize(pDb->pBt, pD
98b0: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
98c0: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20  e_size);.    }. 
98d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
98e0: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
98f0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 6d 61 70   [database.]mmap
9900: 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20  _size(N).  **.  
9910: 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20 6d  ** Used to set m
9920: 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69  apping size limi
9930: 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20 73  t. The mapping s
9940: 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a  ize limit is.  *
9950: 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20  * used to limit 
9960: 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 69  the aggregate si
9970: 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79  ze of all memory
9980: 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73 20   mapped regions 
9990: 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  of the.  ** data
99a0: 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74 68  base file. If th
99b0: 69 73 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  is parameter is 
99c0: 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65  set to zero, the
99d0: 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67  n memory mapping
99e0: 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65  .  ** is not use
99f0: 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20  d at all.  If N 
9a00: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
9a10: 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 65  n the default me
9a20: 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69  mory map.  ** li
9a30: 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62  mit determined b
9a40: 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  y sqlite3_config
9a50: 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  (SQLITE_CONFIG_M
9a60: 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65 74  MAP_SIZE) is set
9a70: 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61 6d  ..  ** The param
9a80: 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75 72  eter N is measur
9a90: 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a  ed in bytes..  *
9aa0: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c 75  *.  ** This valu
9ab0: 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20 20  e is advisory.  
9ac0: 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56  The underlying V
9ad0: 46 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d 65  FS is free to me
9ae0: 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73  mory map.  ** as
9af0: 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d 75   little or as mu
9b00: 63 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e 20  ch as it wants. 
9b10: 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69 73   Except, if N is
9b20: 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20 74   set to 0 then t
9b30: 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c 61  he.  ** upper la
9b40: 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72 20  yers will never 
9b50: 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74 63  invoke the xFetc
9b60: 68 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f 20  h interfaces to 
9b70: 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20  the VFS..  */.  
9b80: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d 41  case PragTyp_MMA
9b90: 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71  P_SIZE: {.    sq
9ba0: 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a  lite3_int64 sz;.
9bb0: 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  #if SQLITE_MAX_M
9bc0: 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61  MAP_SIZE>0.    a
9bd0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
9be0: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
9bf0: 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
9c00: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
9c10: 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20       int ii;.   
9c20: 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48     sqlite3DecOrH
9c30: 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
9c40: 26 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20  &sz);.      if( 
9c50: 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c 69  sz<0 ) sz = sqli
9c60: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
9c70: 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69 66  szMmap;.      if
9c80: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64  ( pId2->n==0 ) d
9c90: 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a  b->szMmap = sz;.
9ca0: 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d        for(ii=db-
9cb0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
9cc0: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69 66  i--){.        if
9cd0: 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  ( db->aDb[ii].pB
9ce0: 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c  t && (ii==iDb ||
9cf0: 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a   pId2->n==0) ){.
9d00: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9d10: 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d  3BtreeSetMmapLim
9d20: 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  it(db->aDb[ii].p
9d30: 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20 20  Bt, sz);.       
9d40: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
9d50: 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20  .    sz = -1;.  
9d60: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
9d70: 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
9d80: 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  zDb, SQLITE_FCNT
9d90: 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a  L_MMAP_SIZE, &sz
9da0: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a 20  );.#else.    sz 
9db0: 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 0;.    rc = SQ
9dc0: 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a  LITE_OK;.#endif.
9dd0: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
9de0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
9df0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
9e00: 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f 73 69 7a  Parse, "mmap_siz
9e10: 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65 6c  e", sz);.    }el
9e20: 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  se if( rc!=SQLIT
9e30: 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20  E_NOTFOUND ){.  
9e40: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72      pParse->nErr
9e50: 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65  ++;.      pParse
9e60: 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 7d  ->rc = rc;.    }
9e70: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
9e80: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
9e90: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20  GMA temp_store. 
9ea0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d   **   PRAGMA tem
9eb0: 70 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61 75  p_store = "defau
9ec0: 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69  lt"|"memory"|"fi
9ed0: 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  le".  **.  ** Re
9ee0: 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20  turn or set the 
9ef0: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  local value of t
9f00: 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c  he temp_store fl
9f10: 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20  ag.  Changing.  
9f20: 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  ** the local val
9f30: 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65  ue does not make
9f40: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
9f50: 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68  disk file and th
9f60: 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 76  e default.  ** v
9f70: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73  alue will be res
9f80: 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74  tored the next t
9f90: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
9fa0: 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a   is opened..  **
9fb0: 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  .  ** Note that 
9fc0: 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 66  it is possible f
9fd0: 6f 72 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  or the library c
9fe0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
9ff0: 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72  ons to.  ** over
a000: 72 69 64 65 20 74 68 69 73 20 73 65 74 74 69 6e  ride this settin
a010: 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  g.  */.  case Pr
a020: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
a030: 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  : {.    if( !zRi
a040: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
a050: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
a060: 72 73 65 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65  rse, "temp_store
a070: 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  ", db->temp_stor
a080: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
a090: 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70 53       changeTempS
a0a0: 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20 7a  torage(pParse, z
a0b0: 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20  Right);.    }.  
a0c0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
a0d0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
a0e0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
a0f0: 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41  ctory.  **   PRA
a100: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
a110: 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64  irectory = ""|"d
a120: 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20  irectory_name". 
a130: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
a140: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
a150: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65   value of the te
a160: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
a170: 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  ry flag.  Changi
a180: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  ng.  ** the valu
a190: 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69  e sets a specifi
a1a0: 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62  c directory to b
a1b0: 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
a1c0: 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a  rary files..  **
a1d0: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
a1e0: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
a1f0: 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74  s to the default
a200: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
a210: 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a  tory search..  *
a220: 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64  * If temporary d
a230: 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e  irectory is chan
a240: 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69  ged, then invali
a250: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e  dateTempStorage.
a260: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
a270: 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53  e PragTyp_TEMP_S
a280: 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20  TORE_DIRECTORY: 
a290: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
a2a0: 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73  t ){.      if( s
a2b0: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
a2c0: 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20  ctory ){.       
a2d0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
a2e0: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
a2f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a300: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
a310: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
a320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 74 65  .            "te
a330: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
a340: 72 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ry", SQLITE_STAT
a350: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
a360: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
a370: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
a380: 20 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f 74   1, 0, sqlite3_t
a390: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20 30  emp_directory, 0
a3a0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
a3b0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
a3c0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
a3d0: 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   1);.      }.   
a3e0: 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20   }else{.#ifndef 
a3f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
a400: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
a410: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69  [0] ){.        i
a420: 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20  nt res;.        
a430: 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63  rc = sqlite3OsAc
a440: 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a  cess(db->pVfs, z
a450: 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43  Right, SQLITE_AC
a460: 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20  CESS_READWRITE, 
a470: 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
a480: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
a490: 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   || res==0 ){.  
a4a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
a4b0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
a4c0: 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20  "not a writable 
a4d0: 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20  directory");.   
a4e0: 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67         goto prag
a4f0: 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20  ma_out;.        
a500: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
a510: 69 66 28 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  if( SQLITE_TEMP_
a520: 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20 20  STORE==0.       
a530: 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f  || (SQLITE_TEMP_
a540: 53 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d 3e  STORE==1 && db->
a550: 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a 20  temp_store<=1). 
a560: 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45        || (SQLITE
a570: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20 26  _TEMP_STORE==2 &
a580: 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  & db->temp_store
a590: 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ==1).      ){.  
a5a0: 20 20 20 20 20 20 69 6e 76 61 6c 69 64 61 74 65        invalidate
a5b0: 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72  TempStorage(pPar
a5c0: 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  se);.      }.   
a5d0: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
a5e0: 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
a5f0: 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 69  ectory);.      i
a600: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
a610: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
a620: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d  temp_directory =
a630: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
a640: 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a  ("%s", zRight);.
a650: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
a660: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65 6d       sqlite3_tem
a670: 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b  p_directory = 0;
a680: 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  .      }.#endif 
a690: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  /* SQLITE_OMIT_W
a6a0: 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20  SD */.    }.    
a6b0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20  break;.  }..#if 
a6c0: 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20 20  SQLITE_OS_WIN.  
a6d0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
a6e0: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
a6f0: 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41  ctory.  **   PRA
a700: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
a710: 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64  irectory = ""|"d
a720: 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20  irectory_name". 
a730: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
a740: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
a750: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
a760: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
a770: 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  ry flag.  Changi
a780: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  ng.  ** the valu
a790: 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69  e sets a specifi
a7a0: 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62  c directory to b
a7b0: 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62  e used for datab
a7c0: 61 73 65 20 66 69 6c 65 73 20 74 68 61 74 0a 20  ase files that. 
a7d0: 20 2a 2a 20 77 65 72 65 20 73 70 65 63 69 66 69   ** were specifi
a7e0: 65 64 20 77 69 74 68 20 61 20 72 65 6c 61 74 69  ed with a relati
a7f0: 76 65 20 70 61 74 68 6e 61 6d 65 2e 20 20 53 65  ve pathname.  Se
a800: 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20  tting to a null 
a810: 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 0a 20  string reverts. 
a820: 20 2a 2a 20 74 6f 20 74 68 65 20 64 65 66 61 75   ** to the defau
a830: 6c 74 20 64 61 74 61 62 61 73 65 20 64 69 72 65  lt database dire
a840: 63 74 6f 72 79 2c 20 77 68 69 63 68 20 66 6f 72  ctory, which for
a850: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
a860: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 0a 20  specified with. 
a870: 20 2a 2a 20 61 20 72 65 6c 61 74 69 76 65 20 70   ** a relative p
a880: 61 74 68 20 77 69 6c 6c 20 70 72 6f 62 61 62 6c  ath will probabl
a890: 79 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74 68  y be based on th
a8a0: 65 20 63 75 72 72 65 6e 74 20 64 69 72 65 63 74  e current direct
a8b0: 6f 72 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ory for the.  **
a8c0: 20 70 72 6f 63 65 73 73 2e 20 20 44 61 74 61 62   process.  Datab
a8d0: 61 73 65 20 66 69 6c 65 20 73 70 65 63 69 66 69  ase file specifi
a8e0: 65 64 20 77 69 74 68 20 61 6e 20 61 62 73 6f 6c  ed with an absol
a8f0: 75 74 65 20 70 61 74 68 20 61 72 65 20 6e 6f 74  ute path are not
a900: 20 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a 20 62   impacted.  ** b
a910: 79 20 74 68 69 73 20 73 65 74 74 69 6e 67 2c 20  y this setting, 
a920: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 69 74  regardless of it
a930: 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20 20  s value..  **.  
a940: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
a950: 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44 49 52  p_DATA_STORE_DIR
a960: 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66  ECTORY: {.    if
a970: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
a980: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 64     if( sqlite3_d
a990: 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 29 7b  ata_directory ){
a9a0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a9b0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
a9c0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 1);.        sq
a9d0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
a9e0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
a9f0: 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20  E_NAME, .       
aa00: 20 20 20 20 20 22 64 61 74 61 5f 73 74 6f 72 65       "data_store
aa10: 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51 4c  _directory", SQL
aa20: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
aa30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
aa40: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
aa50: 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73  ing8, 0, 1, 0, s
aa60: 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65  qlite3_data_dire
aa70: 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20  ctory, 0);.     
aa80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
aa90: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
aaa0: 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20  tRow, 1, 1);.   
aab0: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
aac0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
aad0: 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66  MIT_WSD.      if
aae0: 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20  ( zRight[0] ){. 
aaf0: 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a         int res;.
ab00: 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
ab10: 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d  ite3OsAccess(db-
ab20: 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53  >pVfs, zRight, S
ab30: 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41  QLITE_ACCESS_REA
ab40: 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20  DWRITE, &res);. 
ab50: 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
ab60: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d  QLITE_OK || res=
ab70: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
ab80: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
ab90: 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77  pParse, "not a w
aba0: 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72  ritable director
abb0: 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67  y");.          g
abc0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
abd0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
abe0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  }.      sqlite3_
abf0: 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61 74  free(sqlite3_dat
ac00: 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20  a_directory);.  
ac10: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
ac20: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ] ){.        sql
ac30: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
ac40: 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ory = sqlite3_mp
ac50: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67  rintf("%s", zRig
ac60: 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ht);.      }else
ac70: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
ac80: 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79  3_data_directory
ac90: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65   = 0;.      }.#e
aca0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
acb0: 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d  MIT_WSD */.    }
acc0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
acd0: 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
ace0: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
acf0: 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20 2a  G_STYLE.  /*.  *
ad00: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
ad10: 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79  base.]lock_proxy
ad20: 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52 41  _file.  **   PRA
ad30: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c  GMA [database.]l
ad40: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 3d  ock_proxy_file =
ad50: 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f   ":auto:"|"lock_
ad60: 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a 2a 0a  file_path".  **.
ad70: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
ad80: 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
ad90: 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  the lock_proxy_f
ada0: 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ile flag.  Chang
adb0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
adc0: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
add0: 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20 75 73  ic file to be us
ade0: 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  ed for database 
adf0: 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a 20 20  access locks..  
ae00: 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  **.  */.  case P
ae10: 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58  ragTyp_LOCK_PROX
ae20: 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20 69 66  Y_FILE: {.    if
ae30: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
ae40: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
ae50: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
ae60: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
ae70: 20 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f 78        char *prox
ae80: 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e 55  y_file_path = NU
ae90: 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  LL;.      sqlite
aea0: 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20  3_file *pFile = 
aeb0: 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
aec0: 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20  (pPager);.      
aed0: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
aee0: 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c 20  trolHint(pFile, 
aef0: 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50  SQLITE_GET_LOCKP
af00: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
af10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af20: 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66 69 6c        &proxy_fil
af30: 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20 20 0a  e_path);.      .
af40: 20 20 20 20 20 20 69 66 28 20 70 72 6f 78 79 5f        if( proxy_
af50: 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a 20 20 20  file_path ){.   
af60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
af70: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
af80: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
af90: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
afa0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
afb0: 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  ME, .           
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afd0: 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66     "lock_proxy_f
afe0: 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ile", SQLITE_STA
aff0: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
b000: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
b010: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
b020: 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79 5f 66 69  , 1, 0, proxy_fi
b030: 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a 20 20 20  le_path, 0);.   
b040: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b050: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
b060: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
b070: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
b080: 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70  {.      Pager *p
b090: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
b0a0: 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70  treePager(pDb->p
b0b0: 42 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Bt);.      sqlit
b0c0: 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d  e3_file *pFile =
b0d0: 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
b0e0: 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  e(pPager);.     
b0f0: 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20   int res;.      
b100: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
b110: 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71 6c  .        res=sql
b120: 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f  ite3OsFileContro
b130: 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f  l(pFile, SQLITE_
b140: 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c  SET_LOCKPROXYFIL
b150: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b170: 20 20 20 20 20 20 20 20 20 7a 52 69 67 68 74 29           zRight)
b180: 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ;.      } else {
b190: 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71 6c  .        res=sql
b1a0: 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f  ite3OsFileContro
b1b0: 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f  l(pFile, SQLITE_
b1c0: 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c  SET_LOCKPROXYFIL
b1d0: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
b1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1f0: 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 29 3b 0a           NULL);.
b200: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
b210: 28 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f 4b  ( res!=SQLITE_OK
b220: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
b230: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
b240: 73 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 73  se, "failed to s
b250: 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69  et lock proxy fi
b260: 6c 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  le");.        go
b270: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
b280: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
b290: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
b2a0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
b2b0: 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c  BLE_LOCKING_STYL
b2c0: 45 20 2a 2f 20 20 20 20 20 20 0a 20 20 20 20 0a  E */      .    .
b2d0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
b2e0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 79  MA [database.]sy
b2f0: 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20  nchronous.  **  
b300: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
b310: 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f  e.]synchronous=O
b320: 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c  FF|ON|NORMAL|FUL
b330: 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  L.  **.  ** Retu
b340: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
b350: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
b360: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61   synchronous fla
b370: 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a  g.  Changing.  *
b380: 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  * the local valu
b390: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20  e does not make 
b3a0: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
b3b0: 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65  isk file and the
b3c0: 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76 61  .  ** default va
b3d0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74  lue will be rest
b3e0: 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74 69  ored the next ti
b3f0: 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  me the database 
b400: 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a  is.  ** opened..
b410: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
b420: 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3a  Typ_SYNCHRONOUS:
b430: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
b440: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
b450: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
b460: 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73  se, "synchronous
b470: 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c  ", pDb->safety_l
b480: 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65 6c  evel-1);.    }el
b490: 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 64  se{.      if( !d
b4a0: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
b4b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b4c0: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
b4d0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53   .            "S
b4e0: 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20  afety level may 
b4f0: 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 69  not be changed i
b500: 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63 74  nside a transact
b510: 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ion");.      }el
b520: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 62 2d  se{.        pDb-
b530: 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20  >safety_level = 
b540: 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a  getSafetyLevel(z
b550: 52 69 67 68 74 2c 30 2c 31 29 2b 31 3b 0a 20 20  Right,0,1)+1;.  
b560: 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65        setAllPage
b570: 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20  rFlags(db);.    
b580: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
b590: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  eak;.  }.#endif 
b5a0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
b5b0: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
b5c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b5d0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
b5e0: 53 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  S.  case PragTyp
b5f0: 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66 28  _FLAG: {.    if(
b600: 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20   zRight==0 ){.  
b610: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
b620: 49 6e 74 28 70 50 61 72 73 65 2c 20 61 50 72 61  Int(pParse, aPra
b630: 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e  gmaNames[mid].zN
b640: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
b650: 20 20 20 20 20 20 20 20 20 20 28 64 62 2d 3e 66            (db->f
b660: 6c 61 67 73 20 26 20 61 50 72 61 67 6d 61 4e 61  lags & aPragmaNa
b670: 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 29 21 3d  mes[mid].iArg)!=
b680: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
b690: 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d        int mask =
b6a0: 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69   aPragmaNames[mi
b6b0: 64 5d 2e 69 41 72 67 3b 20 20 20 20 2f 2a 20 4d  d].iArg;    /* M
b6c0: 61 73 6b 20 6f 66 20 62 69 74 73 20 74 6f 20 73  ask of bits to s
b6d0: 65 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f 0a  et or clear. */.
b6e0: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
b6f0: 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20  toCommit==0 ){. 
b700: 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65 69 67         /* Foreig
b710: 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20 6d 61  n key support ma
b720: 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65 64  y not be enabled
b730: 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77 68 69   or disabled whi
b740: 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20 20 2a  le not.        *
b750: 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  * in auto-commit
b760: 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20   mode.  */.     
b770: 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c     mask &= ~(SQL
b780: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 29  ITE_ForeignKeys)
b790: 3b 0a 20 20 20 20 20 20 7d 0a 23 69 66 20 53 51  ;.      }.#if SQ
b7a0: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b7b0: 54 49 43 41 54 49 4f 4e 0a 20 20 20 20 20 20 69  TICATION.      i
b7c0: 66 28 20 64 62 2d 3e 61 75 74 68 2e 61 75 74 68  f( db->auth.auth
b7d0: 4c 65 76 65 6c 3d 3d 55 41 55 54 48 5f 55 73 65  Level==UAUTH_Use
b7e0: 72 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  r ){.        /* 
b7f0: 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f 6e  Do not allow non
b800: 2d 61 64 6d 69 6e 20 75 73 65 72 73 20 74 6f 20  -admin users to 
b810: 6d 6f 64 69 66 79 20 74 68 65 20 73 63 68 65 6d  modify the schem
b820: 61 20 61 72 62 69 74 72 61 72 69 6c 79 20 2a 2f  a arbitrarily */
b830: 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d  .        mask &=
b840: 20 7e 28 53 51 4c 49 54 45 5f 57 72 69 74 65 53   ~(SQLITE_WriteS
b850: 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 7d 0a  chema);.      }.
b860: 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 69 66  #endif..      if
b870: 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  ( sqlite3GetBool
b880: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29  ean(zRight, 0) )
b890: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c  {.        db->fl
b8a0: 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20  ags |= mask;.   
b8b0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
b8c0: 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e    db->flags &= ~
b8d0: 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 69 66  mask;.        if
b8e0: 28 20 6d 61 73 6b 3d 3d 53 51 4c 49 54 45 5f 44  ( mask==SQLITE_D
b8f0: 65 66 65 72 46 4b 73 20 29 20 64 62 2d 3e 6e 44  eferFKs ) db->nD
b900: 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
b910: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20   0;.      }..   
b920: 20 20 20 2f 2a 20 4d 61 6e 79 20 6f 66 20 74 68     /* Many of th
b930: 65 20 66 6c 61 67 2d 70 72 61 67 6d 61 73 20 6d  e flag-pragmas m
b940: 6f 64 69 66 79 20 74 68 65 20 63 6f 64 65 20 67  odify the code g
b950: 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
b960: 53 51 4c 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f  SQL .      ** co
b970: 6d 70 69 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e  mpiler (eg. coun
b980: 74 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f 20 61  t_changes). So a
b990: 64 64 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20  dd an opcode to 
b9a0: 65 78 70 69 72 65 20 61 6c 6c 0a 20 20 20 20 20  expire all.     
b9b0: 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c   ** compiled SQL
b9c0: 20 73 74 61 74 65 6d 65 6e 74 73 20 61 66 74 65   statements afte
b9d0: 72 20 6d 6f 64 69 66 79 69 6e 67 20 61 20 70 72  r modifying a pr
b9e0: 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20 20 20 20  agma value..    
b9f0: 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
ba00: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
ba10: 4f 50 5f 45 78 70 69 72 65 2c 20 30 2c 20 30 29  OP_Expire, 0, 0)
ba20: 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61  ;.      setAllPa
ba30: 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20  gerFlags(db);.  
ba40: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
ba50: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
ba60: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
ba70: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
ba80: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  f SQLITE_OMIT_SC
ba90: 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f  HEMA_PRAGMAS.  /
baa0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
bab0: 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c  table_info(<tabl
bac0: 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  e>).  **.  ** Re
bad0: 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  turn a single ro
bae0: 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  w for each colum
baf0: 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74  n of the named t
bb00: 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e  able. The column
bb10: 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65  s of.  ** the re
bb20: 74 75 72 6e 65 64 20 64 61 74 61 20 73 65 74 20  turned data set 
bb30: 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63  are:.  **.  ** c
bb40: 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d  id:        Colum
bb50: 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66  n id (numbered f
bb60: 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
bb70: 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20 30  t, starting at 0
bb80: 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20  ).  ** name:    
bb90: 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20     Column name. 
bba0: 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20   ** type:       
bbb0: 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69  Column declarati
bbc0: 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f  on type..  ** no
bbd0: 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69  tnull:    True i
bbe0: 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20  f 'NOT NULL' is 
bbf0: 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64  part of column d
bc00: 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20  eclaration.  ** 
bc10: 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20  dflt_value: The 
bc20: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f  default value fo
bc30: 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66  r the column, if
bc40: 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   any..  */.  cas
bc50: 65 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45 5f  e PragTyp_TABLE_
bc60: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
bc70: 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   ){.    Table *p
bc80: 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  Tab;.    pTab = 
bc90: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
bca0: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
bcb0: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
bcc0: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20  ){.      int i, 
bcd0: 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69  k;.      int nHi
bce0: 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20  dden = 0;.      
bcf0: 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20  Column *pCol;.  
bd00: 20 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d      Index *pPk =
bd10: 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b   sqlite3PrimaryK
bd20: 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20  eyIndex(pTab);. 
bd30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bd40: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29  SetNumCols(v, 6)
bd50: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
bd60: 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20  nMem = 6;.      
bd70: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
bd80: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
bd90: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
bda0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
bdb0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
bdc0: 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20 53 51 4c  NAME, "cid", SQL
bdd0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
bde0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
bdf0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
be00: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
be10: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
be20: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
be30: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
be40: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
be50: 41 4d 45 2c 20 22 74 79 70 65 22 2c 20 53 51 4c  AME, "type", SQL
be60: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
be70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
be80: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43  tColName(v, 3, C
be90: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 6f  OLNAME_NAME, "no
bea0: 74 6e 75 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53  tnull", SQLITE_S
beb0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
bec0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
bed0: 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d  ame(v, 4, COLNAM
bee0: 45 5f 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76 61  E_NAME, "dflt_va
bef0: 6c 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  lue", SQLITE_STA
bf00: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
bf10: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
bf20: 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 5, COLNAME_
bf30: 4e 41 4d 45 2c 20 22 70 6b 22 2c 20 53 51 4c 49  NAME, "pk", SQLI
bf40: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
bf50: 20 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74    sqlite3ViewGet
bf60: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72  ColumnNames(pPar
bf70: 73 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20  se, pTab);.     
bf80: 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70   for(i=0, pCol=p
bf90: 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61  Tab->aCol; i<pTa
bfa0: 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43  b->nCol; i++, pC
bfb0: 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  ol++){.        i
bfc0: 66 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  f( IsHiddenColum
bfd0: 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20  n(pCol) ){.     
bfe0: 20 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a       nHidden++;.
bff0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
c000: 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ue;.        }.  
c010: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c020: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c030: 74 65 67 65 72 2c 20 69 2d 6e 48 69 64 64 65 6e  teger, i-nHidden
c040: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 1);.        sq
c050: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c060: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c070: 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e  , 2, 0, pCol->zN
c080: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ame, 0);.       
c090: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c0a0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
c0b0: 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20  , 0, 3, 0,.     
c0c0: 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70        pCol->zTyp
c0d0: 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20  e ? pCol->zType 
c0e0: 3a 20 22 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  : "", 0);.      
c0f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c100: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c110: 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c  r, (pCol->notNul
c120: 6c 20 3f 20 31 20 3a 20 30 29 2c 20 34 29 3b 0a  l ? 1 : 0), 4);.
c130: 20 20 20 20 20 20 20 20 69 66 28 20 70 43 6f 6c          if( pCol
c140: 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20 20 20 20 20  ->zDflt ){.     
c150: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c160: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
c170: 69 6e 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20 28  ing8, 0, 5, 0, (
c180: 63 68 61 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66 6c  char*)pCol->zDfl
c190: 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  t, 0);.        }
c1a0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
c1b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c1c0: 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c  2(v, OP_Null, 0,
c1d0: 20 35 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   5);.        }. 
c1e0: 20 20 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c         if( (pCol
c1f0: 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
c200: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30  FLAG_PRIMKEY)==0
c210: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20   ){.          k 
c220: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 0;.        }el
c230: 73 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b  se if( pPk==0 ){
c240: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31  .          k = 1
c250: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
c260: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b  .          for(k
c270: 3d 31 3b 20 41 4c 57 41 59 53 28 6b 3c 3d 70 54  =1; ALWAYS(k<=pT
c280: 61 62 2d 3e 6e 43 6f 6c 29 20 26 26 20 70 50 6b  ab->nCol) && pPk
c290: 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21  ->aiColumn[k-1]!
c2a0: 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20  =i; k++){}.     
c2b0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
c2c0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c2d0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6b 2c  , OP_Integer, k,
c2e0: 20 36 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   6);.        sql
c2f0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c300: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
c310: 31 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 6);.      }. 
c320: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
c330: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
c340: 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 49  p_STATS: {.    I
c350: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
c360: 48 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 20  HashElem *i;.   
c370: 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   v = sqlite3GetV
c380: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20  dbe(pParse);.   
c390: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
c3a0: 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20  umCols(v, 4);.  
c3b0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
c3c0: 20 34 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43   4;.    sqlite3C
c3d0: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
c3e0: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
c3f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c400: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
c410: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62  LNAME_NAME, "tab
c420: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  le", SQLITE_STAT
c430: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
c440: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
c450: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
c460: 45 2c 20 22 69 6e 64 65 78 22 2c 20 53 51 4c 49  E, "index", SQLI
c470: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
c480: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
c490: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
c4a0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 77 69 64 74 68  AME_NAME, "width
c4b0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
c4c0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
c4d0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
c4e0: 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  3, COLNAME_NAME,
c4f0: 20 22 68 65 69 67 68 74 22 2c 20 53 51 4c 49 54   "height", SQLIT
c500: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66  E_STATIC);.    f
c510: 6f 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46  or(i=sqliteHashF
c520: 69 72 73 74 28 26 70 44 62 2d 3e 70 53 63 68 65  irst(&pDb->pSche
c530: 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b  ma->tblHash); i;
c540: 20 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   i=sqliteHashNex
c550: 74 28 69 29 29 7b 0a 20 20 20 20 20 20 54 61 62  t(i)){.      Tab
c560: 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74  le *pTab = sqlit
c570: 65 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20  eHashData(i);.  
c580: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c590: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
c5a0: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70 54  ng8, 0, 1, 0, pT
c5b0: 61 62 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  ab->zName, 0);. 
c5c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c5d0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c  AddOp2(v, OP_Nul
c5e0: 6c 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20 20 20  l, 0, 2);.      
c5f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c600: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c620: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
c630: 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f  )sqlite3LogEstTo
c640: 49 6e 74 28 70 54 61 62 2d 3e 73 7a 54 61 62 52  Int(pTab->szTabR
c650: 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 73  ow), 3);.      s
c660: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c670: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c680: 0a 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29  .          (int)
c690: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
c6a0: 6e 74 28 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67  nt(pTab->nRowLog
c6b0: 45 73 74 29 2c 20 34 29 3b 0a 20 20 20 20 20 20  Est), 4);.      
c6c0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c6d0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
c6e0: 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20  w, 1, 4);.      
c6f0: 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70  for(pIdx=pTab->p
c700: 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
c710: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a  x=pIdx->pNext){.
c720: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c730: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
c740: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
c750: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30  , pIdx->zName, 0
c760: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c770: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c780: 4f 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20  OP_Integer,.    
c790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7a0: 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71           (int)sq
c7b0: 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
c7c0: 28 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77 29  (pIdx->szIdxRow)
c7d0: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 3);.        sq
c7e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c7f0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 0a  v, OP_Integer, .
c800: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
c810: 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f  )sqlite3LogEstTo
c820: 49 6e 74 28 70 49 64 78 2d 3e 61 69 52 6f 77 4c  Int(pIdx->aiRowL
c830: 6f 67 45 73 74 5b 30 5d 29 2c 20 34 29 3b 0a 20  ogEst[0]), 4);. 
c840: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c850: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
c860: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b  esultRow, 1, 4);
c870: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
c880: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
c890: 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45  ase PragTyp_INDE
c8a0: 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67  X_INFO: if( zRig
c8b0: 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20  ht ){.    Index 
c8c0: 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65  *pIdx;.    Table
c8d0: 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78   *pTab;.    pIdx
c8e0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e   = sqlite3FindIn
c8f0: 64 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  dex(db, zRight, 
c900: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49  zDb);.    if( pI
c910: 64 78 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  dx ){.      int 
c920: 69 3b 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20  i;.      pTab = 
c930: 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20  pIdx->pTable;.  
c940: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c950: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b  etNumCols(v, 3);
c960: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
c970: 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 73  Mem = 3;.      s
c980: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
c990: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
c9a0: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
c9b0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c9c0: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
c9d0: 41 4d 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51  AME, "seqno", SQ
c9e0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
c9f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
ca00: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
ca10: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
ca20: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
ca30: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
ca40: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
ca50: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
ca60: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
ca70: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
ca80: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 49     for(i=0; i<pI
ca90: 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 69 2b 2b  dx->nKeyCol; i++
caa0: 29 7b 0a 20 20 20 20 20 20 20 20 69 31 36 20 63  ){.        i16 c
cab0: 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f  num = pIdx->aiCo
cac0: 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20  lumn[i];.       
cad0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cae0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
caf0: 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , i, 1);.       
cb00: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cb10: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
cb20: 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20 20  , cnum, 2);.    
cb30: 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62      assert( pTab
cb40: 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20  ->nCol>cnum );. 
cb50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cb60: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
cb70: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
cb80: 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d   pTab->aCol[cnum
cb90: 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ].zName, 0);.   
cba0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cbb0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
cbc0: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
cbd0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
cbe0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
cbf0: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
cc00: 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74  LIST: if( zRight
cc10: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
cc20: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
cc30: 70 54 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b  pTab;.    int i;
cc40: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
cc50: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
cc60: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
cc70: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
cc80: 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
cc90: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
cca0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
ccb0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
ccc0: 33 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65  3);.      pParse
ccd0: 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20  ->nMem = 3;.    
cce0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
ccf0: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
cd00: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
cd10: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
cd20: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
cd30: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53  E_NAME, "seq", S
cd40: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
cd50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cd60: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
cd70: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
cd80: 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  name", SQLITE_ST
cd90: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
cda0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
cdb0: 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
cdc0: 5f 4e 41 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c  _NAME, "unique",
cdd0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
cde0: 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d  .      for(pIdx=
cdf0: 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d  pTab->pIndex, i=
ce00: 30 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  0; pIdx; pIdx=pI
ce10: 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b  dx->pNext, i++){
ce20: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ce30: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ce40: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
ce50: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ce60: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
ce70: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
ce80: 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20  0, pIdx->zName, 
ce90: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
cea0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ceb0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 49 73 55   OP_Integer, IsU
cec0: 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29  niqueIndex(pIdx)
ced0: 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 3);.        sq
cee0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
cef0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
cf00: 20 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 3);.      }.
cf10: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
cf20: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
cf30: 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54  yp_DATABASE_LIST
cf40: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20  : {.    int i;. 
cf50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
cf60: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a  tNumCols(v, 3);.
cf70: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
cf80: 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 3;.    sqlite
cf90: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
cfa0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
cfb0: 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54  ME, "seq", SQLIT
cfc0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
cfd0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
cfe0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
cff0: 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c  ME_NAME, "name",
d000: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
d010: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d020: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
d030: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d040: 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  file", SQLITE_ST
d050: 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69  ATIC);.    for(i
d060: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
d070: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  ++){.      if( d
d080: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30  b->aDb[i].pBt==0
d090: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
d0a0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
d0b0: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29  Db[i].zName!=0 )
d0c0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
d0d0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d0e0: 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a  Integer, i, 1);.
d0f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d100: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
d110: 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
d120: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
d130: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
d140: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
d150: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
d160: 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  3, 0,.          
d170: 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
d180: 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62  Filename(db->aDb
d190: 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20 20  [i].pBt), 0);.  
d1a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d1b0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
d1c0: 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20  ltRow, 1, 3);.  
d1d0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
d1e0: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
d1f0: 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a  _COLLATION_LIST:
d200: 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30   {.    int i = 0
d210: 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  ;.    HashElem *
d220: 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  p;.    sqlite3Vd
d230: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
d240: 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  2);.    pParse->
d250: 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71  nMem = 2;.    sq
d260: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d270: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
d280: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53  E_NAME, "seq", S
d290: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
d2a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d2b0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
d2c0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
d2d0: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
d2e0: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73  IC);.    for(p=s
d2f0: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
d300: 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70  db->aCollSeq); p
d310: 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; p=sqliteHashNe
d320: 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f  xt(p)){.      Co
d330: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28  llSeq *pColl = (
d340: 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65  CollSeq *)sqlite
d350: 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20  HashData(p);.   
d360: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d370: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
d380: 65 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20 20 20  er, i++, 1);.   
d390: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d3a0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
d3b0: 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f  g8, 0, 2, 0, pCo
d3c0: 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  ll->zName, 0);. 
d3d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d3e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
d3f0: 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20  ultRow, 1, 2);. 
d400: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
d410: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
d420: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
d430: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
d440: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
d450: 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73  OREIGN_KEY.  cas
d460: 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47  e PragTyp_FOREIG
d470: 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28 20  N_KEY_LIST: if( 
d480: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46 4b  zRight ){.    FK
d490: 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62  ey *pFK;.    Tab
d4a0: 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54  le *pTab;.    pT
d4b0: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
d4c0: 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74  Table(db, zRight
d4d0: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
d4e0: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20  pTab ){.      v 
d4f0: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
d500: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
d510: 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65  pFK = pTab->pFKe
d520: 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b  y;.      if( pFK
d530: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   ){.        int 
d540: 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20  i = 0; .        
d550: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
d560: 6d 43 6f 6c 73 28 76 2c 20 38 29 3b 0a 20 20 20  mCols(v, 8);.   
d570: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
d580: 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 73  m = 8;.        s
d590: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
d5a0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
d5b0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
d5c0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
d5d0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
d5e0: 5f 4e 41 4d 45 2c 20 22 69 64 22 2c 20 53 51 4c  _NAME, "id", SQL
d5f0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d600: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d610: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
d620: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d630: 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  seq", SQLITE_STA
d640: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
d650: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d660: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
d670: 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c  E_NAME, "table",
d680: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
d690: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d6a0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
d6b0: 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 3, COLNAME_NAM
d6c0: 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49 54  E, "from", SQLIT
d6d0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
d6e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d6f0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43  tColName(v, 4, C
d700: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 6f  OLNAME_NAME, "to
d710: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d720: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
d730: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d740: 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 5, COLNAME_N
d750: 41 4d 45 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22  AME, "on_update"
d760: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d770: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d780: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d790: 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 6, COLNAME_NA
d7a0: 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c  ME, "on_delete",
d7b0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
d7c0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d7d0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
d7e0: 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 7, COLNAME_NAM
d7f0: 45 2c 20 22 6d 61 74 63 68 22 2c 20 53 51 4c 49  E, "match", SQLI
d800: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d810: 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a      while(pFK){.
d820: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b            int j;
d830: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a  .          for(j
d840: 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b  =0; j<pFK->nCol;
d850: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
d860: 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d 20     char *zCol = 
d870: 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f  pFK->aCol[j].zCo
d880: 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  l;.            c
d890: 68 61 72 20 2a 7a 4f 6e 44 65 6c 65 74 65 20 3d  har *zOnDelete =
d8a0: 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e   (char *)actionN
d8b0: 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e  ame(pFK->aAction
d8c0: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [0]);.          
d8d0: 20 20 63 68 61 72 20 2a 7a 4f 6e 55 70 64 61 74    char *zOnUpdat
d8e0: 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69  e = (char *)acti
d8f0: 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74  onName(pFK->aAct
d900: 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20  ion[1]);.       
d910: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d920: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
d930: 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20  eger, i, 1);.   
d940: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d950: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d960: 5f 49 6e 74 65 67 65 72 2c 20 6a 2c 20 32 29 3b  _Integer, j, 2);
d970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d980: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
d990: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
d9a0: 20 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c   3, 0, pFK->zTo,
d9b0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
d9c0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d9d0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
d9e0: 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20  , 0, 4, 0,.     
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da00: 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61           pTab->a
da10: 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  Col[pFK->aCol[j]
da20: 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30  .iFrom].zName, 0
da30: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
da40: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
da50: 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53 74  (v, zCol ? OP_St
da60: 72 69 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c 2c  ring8 : OP_Null,
da70: 20 30 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c 20   0, 5, 0, zCol, 
da80: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
da90: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
daa0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
dab0: 20 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55 70 64   0, 6, 0, zOnUpd
dac0: 61 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ate, 0);.       
dad0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
dae0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
daf0: 69 6e 67 38 2c 20 30 2c 20 37 2c 20 30 2c 20 7a  ing8, 0, 7, 0, z
db00: 4f 6e 44 65 6c 65 74 65 2c 20 30 29 3b 0a 20 20  OnDelete, 0);.  
db10: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
db20: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
db30: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 38 2c  P_String8, 0, 8,
db40: 20 30 2c 20 22 4e 4f 4e 45 22 2c 20 30 29 3b 0a   0, "NONE", 0);.
db50: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
db60: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
db70: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
db80: 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 8);.          
db90: 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b  }.          ++i;
dba0: 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d  .          pFK =
dbb0: 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b   pFK->pNextFrom;
dbc0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
dbd0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
dbe0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
dbf0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
dc00: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
dc10: 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  ) */..#ifndef SQ
dc20: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
dc30: 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51  N_KEY.#ifndef SQ
dc40: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
dc50: 52 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  R.  case PragTyp
dc60: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45  _FOREIGN_KEY_CHE
dc70: 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a  CK: {.    FKey *
dc80: 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20  pFK;            
dc90: 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65   /* A foreign ke
dca0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  y constraint */.
dcb0: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
dcc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68             /* Ch
dcd0: 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ild table contai
dce0: 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b  n "REFERENCES" k
dcf0: 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61  eyword */.    Ta
dd00: 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20  ble *pParent;   
dd10: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74       /* Parent t
dd20: 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20  able that child 
dd30: 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20  points to */.   
dd40: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20   Index *pIdx;   
dd50: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
dd60: 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74   in the parent t
dd70: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
dd80: 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
dd90: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
dda0: 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79  er:  Foreign key
ddb0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62   number for pTab
ddc0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20   */.    int j;  
ddd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dde0: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20  * Loop counter: 
ddf0: 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f   Field of the fo
de00: 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20  reign key */.   
de10: 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20   HashElem *k;   
de20: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
de30: 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74  counter:  Next t
de40: 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a  able in schema *
de50: 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20  /.    int x;    
de60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
de70: 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20  result variable 
de80: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
de90: 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  sult;         /*
dea0: 20 33 20 72 65 67 69 73 74 65 72 73 20 74 6f 20   3 registers to 
deb0: 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f  hold a result ro
dec0: 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  w */.    int reg
ded0: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  Key;            
dee0: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 68  /* Register to h
def0: 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63  old key for chec
df00: 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20  king the FK */. 
df10: 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20     int regRow;  
df20: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
df30: 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61  isters to hold a
df40: 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a   row from pTab *
df50: 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f  /.    int addrTo
df60: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
df70: 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68  Top of a loop ch
df80: 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b  ecking foreign k
df90: 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  eys */.    int a
dfa0: 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20  ddrOk;          
dfb0: 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69    /* Jump here i
dfc0: 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20  f the key is OK 
dfd0: 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
dfe0: 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ls;           /*
dff0: 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74   child to parent
e000: 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20   column mapping 
e010: 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c  */..    regResul
e020: 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  t = pParse->nMem
e030: 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  +1;.    pParse->
e040: 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72  nMem += 4;.    r
e050: 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65  egKey = ++pParse
e060: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52  ->nMem;.    regR
e070: 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  ow = ++pParse->n
e080: 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c  Mem;.    v = sql
e090: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
e0a0: 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  se);.    sqlite3
e0b0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
e0c0: 2c 20 34 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 4);.    sqlite
e0d0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
e0e0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
e0f0: 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c  ME, "table", SQL
e100: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
e110: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
e120: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
e130: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f 77 69  NAME_NAME, "rowi
e140: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
e150: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
e160: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
e170: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
e180: 2c 20 22 70 61 72 65 6e 74 22 2c 20 53 51 4c 49  , "parent", SQLI
e190: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
e1a0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
e1b0: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
e1c0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b 69 64 22  AME_NAME, "fkid"
e1d0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
e1e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64  ;.    sqlite3Cod
e1f0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
e200: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
e210: 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46 69  k = sqliteHashFi
e220: 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44 62  rst(&db->aDb[iDb
e230: 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61  ].pSchema->tblHa
e240: 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  sh);.    while( 
e250: 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a  k ){.      if( z
e260: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 20  Right ){.       
e270: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 4c   pTab = sqlite3L
e280: 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72 73  ocateTable(pPars
e290: 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e, 0, zRight, zD
e2a0: 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20  b);.        k = 
e2b0: 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
e2c0: 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 28          pTab = (
e2d0: 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61 73  Table*)sqliteHas
e2e0: 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20 20  hData(k);.      
e2f0: 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68    k = sqliteHash
e300: 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d  Next(k);.      }
e310: 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62 3d  .      if( pTab=
e320: 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65  =0 || pTab->pFKe
e330: 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  y==0 ) continue;
e340: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 61  .      sqlite3Ta
e350: 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20  bleLock(pParse, 
e360: 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c  iDb, pTab->tnum,
e370: 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29   0, pTab->zName)
e380: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62  ;.      if( pTab
e390: 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50  ->nCol+regRow>pP
e3a0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61  arse->nMem ) pPa
e3b0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62  rse->nMem = pTab
e3c0: 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b  ->nCol + regRow;
e3d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70  .      sqlite3Op
e3e0: 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  enTable(pParse, 
e3f0: 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f 50  0, iDb, pTab, OP
e400: 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20  _OpenRead);.    
e410: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e420: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
e430: 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2c  8, 0, regResult,
e440: 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c   0, pTab->zName,
e450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e460: 20 20 20 20 20 20 20 20 20 50 34 5f 54 52 41 4e           P4_TRAN
e470: 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 66 6f  SIENT);.      fo
e480: 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d  r(i=1, pFK=pTab-
e490: 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b  >pFKey; pFK; i++
e4a0: 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74  , pFK=pFK->pNext
e4b0: 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70  From){.        p
e4c0: 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33  Parent = sqlite3
e4d0: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46  FindTable(db, pF
e4e0: 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20  K->zTo, zDb);.  
e4f0: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e        if( pParen
e500: 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  t==0 ) continue;
e510: 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20  .        pIdx = 
e520: 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  0;.        sqlit
e530: 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72  e3TableLock(pPar
e540: 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74  se, iDb, pParent
e550: 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65  ->tnum, 0, pPare
e560: 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  nt->zName);.    
e570: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46      x = sqlite3F
e580: 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61  kLocateIndex(pPa
e590: 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46  rse, pParent, pF
e5a0: 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20  K, &pIdx, 0);.  
e5b0: 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29        if( x==0 )
e5c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
e5d0: 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20  pIdx==0 ){.     
e5e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70         sqlite3Op
e5f0: 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  enTable(pParse, 
e600: 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c  i, iDb, pParent,
e610: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
e620: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
e630: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e640: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
e650: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c   OP_OpenRead, i,
e660: 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62   pIdx->tnum, iDb
e670: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
e680: 71 6c 69 74 65 33 56 64 62 65 53 65 74 50 34 4b  qlite3VdbeSetP4K
e690: 65 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70  eyInfo(pParse, p
e6a0: 49 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Idx);.          
e6b0: 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  }.        }else{
e6c0: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30  .          k = 0
e6d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ;.          brea
e6e0: 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  k;.        }.   
e6f0: 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
e700: 74 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e  t( pParse->nErr>
e710: 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20  0 || pFK==0 );. 
e720: 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 20 62       if( pFK ) b
e730: 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20  reak;.      if( 
e740: 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29  pParse->nTab<i )
e750: 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20   pParse->nTab = 
e760: 69 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70  i;.      addrTop
e770: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
e780: 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e  dOp1(v, OP_Rewin
e790: 64 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72  d, 0); VdbeCover
e7a0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f  age(v);.      fo
e7b0: 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d  r(i=1, pFK=pTab-
e7c0: 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b  >pFKey; pFK; i++
e7d0: 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74  , pFK=pFK->pNext
e7e0: 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70  From){.        p
e7f0: 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33  Parent = sqlite3
e800: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46  FindTable(db, pF
e810: 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20  K->zTo, zDb);.  
e820: 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a        pIdx = 0;.
e830: 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d          aiCols =
e840: 20 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   0;.        if( 
e850: 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20  pParent ){.     
e860: 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
e870: 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50  FkLocateIndex(pP
e880: 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70  arse, pParent, p
e890: 46 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f  FK, &pIdx, &aiCo
e8a0: 6c 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61  ls);.          a
e8b0: 73 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20  ssert( x==0 );. 
e8c0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e8d0: 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65   addrOk = sqlite
e8e0: 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76  3VdbeMakeLabel(v
e8f0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
e900: 50 61 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d  Parent && pIdx==
e910: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  0 ){.          i
e920: 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61  nt iKey = pFK->a
e930: 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20  Col[0].iFrom;.  
e940: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
e950: 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c  iKey>=0 && iKey<
e960: 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20  pTab->nCol );.  
e970: 20 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79          if( iKey
e980: 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b  !=pTab->iPKey ){
e990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e9a0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
e9b0: 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20  , OP_Column, 0, 
e9c0: 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20  iKey, regRow);. 
e9d0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e9e0: 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
e9f0: 76 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72  v, pTab, iKey, r
ea00: 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20  egRow);.        
ea10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ea20: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp2(v, OP_IsNu
ea30: 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72  ll, regRow, addr
ea40: 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  Ok); VdbeCoverag
ea50: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
ea60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ea70: 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65  Op2(v, OP_MustBe
ea80: 49 6e 74 2c 20 72 65 67 52 6f 77 2c 20 0a 20 20  Int, regRow, .  
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
eaa0: 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
eab0: 64 64 72 28 76 29 2b 33 29 3b 20 56 64 62 65 43  ddr(v)+3); VdbeC
eac0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
ead0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
eae0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
eaf0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
eb00: 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f  _Rowid, 0, regRo
eb10: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  w);.          }.
eb20: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
eb30: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
eb40: 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20  P_NotExists, i, 
eb50: 30 2c 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65  0, regRow); Vdbe
eb60: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
eb70: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
eb80: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47  beAddOp2(v, OP_G
eb90: 6f 74 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29 3b  oto, 0, addrOk);
eba0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
ebb0: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
ebc0: 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  , sqlite3VdbeCur
ebd0: 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a  rentAddr(v)-2);.
ebe0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
ebf0: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30           for(j=0
ec00: 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a  ; j<pFK->nCol; j
ec10: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
ec20: 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
ec30: 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
ec40: 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20  (v, pTab, 0,.   
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec60: 20 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20           aiCols 
ec70: 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46  ? aiCols[j] : pF
ec80: 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d  K->aCol[j].iFrom
ec90: 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20  , regRow+j);.   
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 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b  _IsNull, regRow+
ecd0: 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65  j, addrOk); Vdbe
ece0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
ecf0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ed00: 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29     if( pParent )
ed10: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
ed20: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
ed30: 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  v, OP_MakeRecord
ed40: 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e  , regRow, pFK->n
ed50: 43 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20  Col, regKey,.   
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed70: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ed80: 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53  e3IndexAffinityS
ed90: 74 72 28 76 2c 70 49 64 78 29 2c 20 70 46 4b 2d  tr(v,pIdx), pFK-
eda0: 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20  >nCol);.        
edb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
edc0: 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46  ddOp4Int(v, OP_F
edd0: 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c  ound, i, addrOk,
ede0: 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20   regKey, 0);.   
edf0: 20 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76           VdbeCov
ee00: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
ee10: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
ee20: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ee30: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
ee40: 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 65 73  Rowid, 0, regRes
ee50: 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20 20 20  ult+1);.        
ee60: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ee70: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
ee80: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c   0, regResult+2,
ee90: 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20   0, .           
eea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
eeb0: 46 4b 2d 3e 7a 54 6f 2c 20 50 34 5f 54 52 41 4e  FK->zTo, P4_TRAN
eec0: 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20  SIENT);.        
eed0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
eee0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
eef0: 20 69 2d 31 2c 20 72 65 67 52 65 73 75 6c 74 2b   i-1, regResult+
ef00: 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  3);.        sqli
ef10: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ef20: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72   OP_ResultRow, r
ef30: 65 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20  egResult, 4);.  
ef40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ef50: 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c  eResolveLabel(v,
ef60: 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20   addrOk);.      
ef70: 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
ef80: 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20  db, aiCols);.   
ef90: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
efa0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
efb0: 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64 72  OP_Next, 0, addr
efc0: 54 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f 76 65  Top+1); VdbeCove
efd0: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73  rage(v);.      s
efe0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
eff0: 72 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a  re(v, addrTop);.
f000: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
f010: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  k;.#endif /* !de
f020: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
f030: 54 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65  T_TRIGGER) */.#e
f040: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
f050: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
f060: 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69  EIGN_KEY) */..#i
f070: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63  fndef NDEBUG.  c
f080: 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 52 53  ase PragTyp_PARS
f090: 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20  ER_TRACE: {.    
f0a0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
f0b0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
f0c0: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
f0d0: 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  , 0) ){.        
f0e0: 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
f0f0: 63 65 28 73 74 64 65 72 72 2c 20 22 70 61 72 73  ce(stderr, "pars
f100: 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65  er: ");.      }e
f110: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
f120: 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
f130: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  0, 0);.      }. 
f140: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
f150: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52  ;.#endif..  /* R
f160: 65 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b  einstall the LIK
f170: 45 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74  E and GLOB funct
f180: 69 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61  ions.  The varia
f190: 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20  nt of LIKE.  ** 
f1a0: 75 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73  used will be cas
f1b0: 65 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e  e sensitive or n
f1c0: 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ot depending on 
f1d0: 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20  the RHS..  */.  
f1e0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 53  case PragTyp_CAS
f1f0: 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45  E_SENSITIVE_LIKE
f200: 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
f210: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
f220: 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
f230: 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c  unctions(db, sql
f240: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
f250: 52 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20  Right, 0));.    
f260: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  }.  }.  break;..
f270: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49  #ifndef SQLITE_I
f280: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
f290: 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e  RROR_MAX.# defin
f2a0: 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  e SQLITE_INTEGRI
f2b0: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
f2c0: 41 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23  AX 100.#endif..#
f2d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f2e0: 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
f2f0: 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20 22  CK.  /* Pragma "
f300: 71 75 69 63 6b 5f 63 68 65 63 6b 22 20 69 73 20  quick_check" is 
f310: 72 65 64 75 63 65 64 20 76 65 72 73 69 6f 6e 20  reduced version 
f320: 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69  of .  ** integri
f330: 74 79 5f 63 68 65 63 6b 20 64 65 73 69 67 6e 65  ty_check designe
f340: 64 20 74 6f 20 64 65 74 65 63 74 20 6d 6f 73 74  d to detect most
f350: 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
f360: 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75  tion.  ** withou
f370: 74 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f 76  t most of the ov
f380: 65 72 68 65 61 64 20 6f 66 20 61 20 66 75 6c 6c  erhead of a full
f390: 20 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b   integrity-check
f3a0: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
f3b0: 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f  agTyp_INTEGRITY_
f3c0: 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74  CHECK: {.    int
f3d0: 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45   i, j, addr, mxE
f3e0: 72 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65  rr;..    /* Code
f3f0: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 61 74   that appears at
f400: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
f410: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 2e  integrity check.
f420: 20 20 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20 20    If no error.  
f430: 20 20 2a 2a 20 6d 65 73 73 61 67 65 73 20 68 61    ** messages ha
f440: 76 65 20 62 65 65 6e 20 67 65 6e 65 72 61 74 65  ve been generate
f450: 64 2c 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20 4f  d, output OK.  O
f460: 74 68 65 72 77 69 73 65 20 6f 75 74 70 75 74 20  therwise output 
f470: 74 68 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f 72  the.    ** error
f480: 20 6d 65 73 73 61 67 65 0a 20 20 20 20 2a 2f 0a   message.    */.
f490: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
f4a0: 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f   int iLn = VDBE_
f4b0: 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29  OFFSET_LINENO(2)
f4c0: 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  ;.    static con
f4d0: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e  st VdbeOpList en
f4e0: 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  dCode[] = {.    
f4f0: 20 20 7b 20 4f 50 5f 49 66 4e 65 67 2c 20 20 20    { OP_IfNeg,   
f500: 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20      1, 0,       
f510: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
f520: 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e        { OP_Strin
f530: 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20  g8,     0, 3,   
f540: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31       0},    /* 1
f550: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52   */.      { OP_R
f560: 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31  esultRow,   3, 1
f570: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
f580: 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73 51   };..    int isQ
f590: 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33 54  uick = (sqlite3T
f5a0: 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29  olower(zLeft[0])
f5b0: 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20  =='q');..    /* 
f5c0: 49 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f  If the PRAGMA co
f5d0: 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68 65  mmand was of the
f5e0: 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c 64   form "PRAGMA <d
f5f0: 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65  b>.integrity_che
f600: 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e  ck",.    ** then
f610: 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 74   iDb is set to t
f620: 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
f630: 64 61 74 61 62 61 73 65 20 69 64 65 6e 74 69 66  database identif
f640: 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20  ied by <db>..   
f650: 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73 65   ** In this case
f660: 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20  , the integrity 
f670: 6f 66 20 64 61 74 61 62 61 73 65 20 69 44 62 20  of database iDb 
f680: 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65 64  only is verified
f690: 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20 56   by.    ** the V
f6a0: 44 42 45 20 63 72 65 61 74 65 64 20 62 65 6c 6f  DBE created belo
f6b0: 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  w..    **.    **
f6c0: 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74   Otherwise, if t
f6d0: 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73  he command was s
f6e0: 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69 6e  imply "PRAGMA in
f6f0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20 28  tegrity_check" (
f700: 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47 4d  or.    ** "PRAGM
f710: 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c  A quick_check"),
f720: 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74   then iDb is set
f730: 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20 63   to 0. In this c
f740: 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20 20  ase, set iDb.   
f750: 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c 20   ** to -1 here, 
f760: 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
f770: 20 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c 64   the VDBE should
f780: 20 76 65 72 69 66 79 20 74 68 65 20 69 6e 74 65   verify the inte
f790: 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20  grity.    ** of 
f7a0: 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74  all attached dat
f7b0: 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20  abases.  */.    
f7c0: 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 29  assert( iDb>=0 )
f7d0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  ;.    assert( iD
f7e0: 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20  b==0 || pId2->z 
f7f0: 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d  );.    if( pId2-
f800: 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d 31  >z==0 ) iDb = -1
f810: 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
f820: 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20 70 72  lize the VDBE pr
f830: 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61  ogram */.    pPa
f840: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20  rse->nMem = 6;. 
f850: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
f860: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
f870: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
f880: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
f890: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69  COLNAME_NAME, "i
f8a0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c  ntegrity_check",
f8b0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
f8c0: 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65  ..    /* Set the
f8d0: 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63   maximum error c
f8e0: 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72  ount */.    mxEr
f8f0: 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  r = SQLITE_INTEG
f900: 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
f910: 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52  _MAX;.    if( zR
f920: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
f930: 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52  lite3GetInt32(zR
f940: 69 67 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20  ight, &mxErr);. 
f950: 20 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d       if( mxErr<=
f960: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45  0 ){.        mxE
f970: 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rr = SQLITE_INTE
f980: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
f990: 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20  R_MAX;.      }. 
f9a0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
f9b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
f9c0: 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c  _Integer, mxErr,
f9d0: 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20   1);  /* reg[1] 
f9e0: 68 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66  holds errors lef
f9f0: 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20  t */..    /* Do 
fa00: 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  an integrity che
fa10: 63 6b 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62  ck on each datab
fa20: 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  ase file */.    
fa30: 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
fa40: 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
fa50: 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20  HashElem *x;.   
fa60: 20 20 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a     Hash *pTbls;.
fa70: 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20        int cnt = 
fa80: 30 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 4f 4d  0;..      if( OM
fa90: 49 54 5f 54 45 4d 50 44 42 20 26 26 20 69 3d 3d  IT_TEMPDB && i==
faa0: 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  1 ) continue;.  
fab0: 20 20 20 20 69 66 28 20 69 44 62 3e 3d 30 20 26      if( iDb>=0 &
fac0: 26 20 69 21 3d 69 44 62 20 29 20 63 6f 6e 74 69  & i!=iDb ) conti
fad0: 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69  nue;..      sqli
fae0: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
faf0: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a  ema(pParse, i);.
fb00: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
fb10: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
fb20: 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20  , OP_IfPos, 1); 
fb30: 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75 74 20 6f  /* Halt if out o
fb40: 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20  f errors */.    
fb50: 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76    VdbeCoverage(v
fb60: 29 3b 0a 20 20 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 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20  _Halt, 0, 0);.  
fb90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
fba0: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
fbb0: 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61  ;..      /* Do a
fbc0: 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  n integrity chec
fbd0: 6b 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a  k of the B-Tree.
fbe0: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
fbf0: 2a 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69  * Begin by filli
fc00: 6e 67 20 72 65 67 69 73 74 65 72 73 20 32 2c 20  ng registers 2, 
fc10: 33 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20  3, ... with the 
fc20: 72 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65  root pages numbe
fc30: 72 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20  rs.      ** for 
fc40: 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69  all tables and i
fc50: 6e 64 69 63 65 73 20 69 6e 20 74 68 65 20 64 61  ndices in the da
fc60: 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  tabase..      */
fc70: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
fc80: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
fc90: 78 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20  xHeld(db, i, 0) 
fca0: 29 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d  );.      pTbls =
fcb0: 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63   &db->aDb[i].pSc
fcc0: 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20  hema->tblHash;. 
fcd0: 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74       for(x=sqlit
fce0: 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73  eHashFirst(pTbls
fcf0: 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61  ); x; x=sqliteHa
fd00: 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20  shNext(x)){.    
fd10: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20      Table *pTab 
fd20: 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  = sqliteHashData
fd30: 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  (x);.        Ind
fd40: 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20  ex *pIdx;.      
fd50: 20 20 69 66 28 20 48 61 73 52 6f 77 69 64 28 70    if( HasRowid(p
fd60: 54 61 62 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Tab) ){.        
fd70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
fd80: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
fd90: 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32  r, pTab->tnum, 2
fda0: 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  +cnt);.         
fdb0: 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c   VdbeComment((v,
fdc0: 20 22 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61   "%s", pTab->zNa
fdd0: 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  me));.          
fde0: 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  cnt++;.        }
fdf0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 49 64  .        for(pId
fe00: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
fe10: 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
fe20: 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20  >pNext){.       
fe30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
fe40: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
fe50: 65 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20  er, pIdx->tnum, 
fe60: 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  2+cnt);.        
fe70: 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76    VdbeComment((v
fe80: 2c 20 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a 4e  , "%s", pIdx->zN
fe90: 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20  ame));.         
fea0: 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20   cnt++;.        
feb0: 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  }.      }..     
fec0: 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75   /* Make sure su
fed0: 66 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20  fficient number 
fee0: 6f 66 20 72 65 67 69 73 74 65 72 73 20 68 61 76  of registers hav
fef0: 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64  e been allocated
ff00: 20 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65   */.      pParse
ff10: 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50  ->nMem = MAX( pP
ff20: 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b  arse->nMem, cnt+
ff30: 38 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  8 );..      /* D
ff40: 6f 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74  o the b-tree int
ff50: 65 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f  egrity checks */
ff60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
ff70: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49  beAddOp3(v, OP_I
ff80: 6e 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63  ntegrityCk, 2, c
ff90: 6e 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  nt, 1);.      sq
ffa0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
ffb0: 35 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20  5(v, (u8)i);.   
ffc0: 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
ffd0: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
ffe0: 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56 64  P_IsNull, 2); Vd
fff0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
10000 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10010 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
10020 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20  ing8, 0, 3, 0,. 
10030 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d          sqlite3M
10040 50 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20  Printf(db, "*** 
10050 69 6e 20 64 61 74 61 62 61 73 65 20 25 73 20 2a  in database %s *
10060 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69  **\n", db->aDb[i
10070 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20  ].zName),.      
10080 20 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a     P4_DYNAMIC);.
10090 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
100a0 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f  eAddOp3(v, OP_Mo
100b0 76 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20  ve, 2, 4, 1);.  
100c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
100d0 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
100e0 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20  at, 4, 3, 2);.  
100f0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10100 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
10110 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20  ltRow, 2, 1);.  
10120 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
10130 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
10140 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65  ;..      /* Make
10150 20 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e   sure all the in
10160 64 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72  dices are constr
10170 75 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e  ucted correctly.
10180 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
10190 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68  for(x=sqliteHash
101a0 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20  First(pTbls); x 
101b0 26 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73  && !isQuick; x=s
101c0 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29  qliteHashNext(x)
101d0 29 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65  ){.        Table
101e0 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48   *pTab = sqliteH
101f0 61 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20  ashData(x);.    
10200 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c      Index *pIdx,
10210 20 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49   *pPk;.        I
10220 6e 64 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30  ndex *pPrior = 0
10230 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f  ;.        int lo
10240 6f 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69  opTop;.        i
10250 6e 74 20 69 44 61 74 61 43 75 72 2c 20 69 49 64  nt iDataCur, iId
10260 78 43 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e  xCur;.        in
10270 74 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20  t r1 = -1;..    
10280 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49      if( pTab->pI
10290 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  ndex==0 ) contin
102a0 75 65 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20  ue;.        pPk 
102b0 3d 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29  = HasRowid(pTab)
102c0 20 3f 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72   ? 0 : sqlite3Pr
102d0 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54  imaryKeyIndex(pT
102e0 61 62 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64  ab);.        add
102f0 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
10300 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp1(v, OP_IfPo
10310 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20  s, 1);  /* Stop 
10320 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73  if out of errors
10330 20 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65   */.        Vdbe
10340 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
10350 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10360 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c  AddOp2(v, OP_Hal
10370 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  t, 0, 0);.      
10380 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
10390 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
103a0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
103b0 78 70 72 43 61 63 68 65 43 6c 65 61 72 28 70 50  xprCacheClear(pP
103c0 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73  arse);.        s
103d0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41  qlite3OpenTableA
103e0 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72 73 65  ndIndices(pParse
103f0 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52  , pTab, OP_OpenR
10400 65 61 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ead,.           
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10420 20 20 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69          1, 0, &i
10430 44 61 74 61 43 75 72 2c 20 26 69 49 64 78 43 75  DataCur, &iIdxCu
10440 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  r);.        sqli
10450 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10460 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20   OP_Integer, 0, 
10470 37 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  7);.        for(
10480 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
10490 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
104a0 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
104b0 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
104c0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
104d0 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
104e0 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64   0, 8+j); /* ind
104f0 65 78 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74  ex entries count
10500 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  er */.        }.
10510 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e          pParse->
10520 6e 4d 65 6d 20 3d 20 4d 41 58 28 70 50 61 72 73  nMem = MAX(pPars
10530 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20  e->nMem, 8+j);. 
10540 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10550 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
10560 65 77 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c  ewind, iDataCur,
10570 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   0); VdbeCoverag
10580 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f  e(v);.        lo
10590 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56  opTop = sqlite3V
105a0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
105b0 41 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20  AddImm, 7, 1);. 
105c0 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79         /* Verify
105d0 20 74 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55   that all NOT NU
105e0 4c 4c 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c  LL columns reall
105f0 79 20 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a  y are NOT NULL *
10600 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  /.        for(j=
10610 30 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b  0; j<pTab->nCol;
10620 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
10630 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20   char *zErr;.   
10640 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c         int jmp2,
10650 20 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20   jmp3;.         
10660 20 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50   if( j==pTab->iP
10670 4b 65 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  Key ) continue;.
10680 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 54            if( pT
10690 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e  ab->aCol[j].notN
106a0 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  ull==0 ) continu
106b0 65 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e;.          sql
106c0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
106d0 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20  olumnOfTable(v, 
106e0 70 54 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20  pTab, iDataCur, 
106f0 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  j, 3);.         
10700 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
10710 67 65 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54  geP5(v, OPFLAG_T
10720 59 50 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20  YPEOFARG);.     
10730 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69       jmp2 = sqli
10740 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
10750 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b   OP_NotNull, 3);
10760 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
10770 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10780 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10790 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
107a0 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74  1); /* Decrement
107b0 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a   error limit */.
107c0 20 20 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d            zErr =
107d0 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
107e0 64 62 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20  db, "NULL value 
107f0 69 6e 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d  in %s.%s", pTab-
10800 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10820 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c        pTab->aCol
10830 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  [j].zName);.    
10840 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10850 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
10860 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20  ring8, 0, 3, 0, 
10870 7a 45 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43  zErr, P4_DYNAMIC
10880 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10890 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
108a0 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
108b0 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 1);.         
108c0 20 6a 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56   jmp3 = sqlite3V
108d0 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
108e0 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43  IfPos, 1); VdbeC
108f0 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
10900 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10910 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61  eAddOp0(v, OP_Ha
10920 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  lt);.          s
10930 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
10940 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20  re(v, jmp2);.   
10950 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10960 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
10970 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  p3);.        }. 
10980 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61         /* Valida
10990 74 65 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73  te index entries
109a0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
109b0 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20   row */.        
109c0 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
109d0 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
109e0 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
109f0 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
10a00 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d      int jmp2, jm
10a10 70 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a  p3, jmp4, jmp5;.
10a20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b            int ck
10a30 55 6e 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64  Uniq = sqlite3Vd
10a40 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
10a50 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
10a60 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e  k==pIdx ) contin
10a70 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31  ue;.          r1
10a80 20 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61   = sqlite3Genera
10a90 74 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73  teIndexKey(pPars
10aa0 65 2c 20 70 49 64 78 2c 20 69 44 61 74 61 43 75  e, pIdx, iDataCu
10ab0 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a  r, 0, 0, &jmp3,.
10ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ae0 20 20 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72         pPrior, r
10af0 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50  1);.          pP
10b00 72 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20  rior = pIdx;.   
10b10 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10b20 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
10b30 64 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20  ddImm, 8+j, 1); 
10b40 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e   /* increment en
10b50 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20  try count */.   
10b60 20 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79         /* Verify
10b70 20 74 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65   that an index e
10b80 6e 74 72 79 20 65 78 69 73 74 73 20 66 6f 72 20  ntry exists for 
10b90 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
10ba0 65 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20  e row */.       
10bb0 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65     jmp2 = sqlite
10bc0 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76  3VdbeAddOp4Int(v
10bd0 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78  , OP_Found, iIdx
10be0 43 75 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72  Cur+j, ckUniq, r
10bf0 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  1,.             
10c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c10 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e           pIdx->n
10c20 43 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76  Column); VdbeCov
10c30 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
10c40 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10c50 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49  ddOp2(v, OP_AddI
10c60 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44  mm, 1, -1); /* D
10c70 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c  ecrement error l
10c80 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  imit */.        
10c90 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10ca0 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
10cb0 38 2c 20 30 2c 20 33 2c 20 30 2c 20 22 72 6f 77  8, 0, 3, 0, "row
10cc0 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a   ", P4_STATIC);.
10cd0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10ce0 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
10cf0 50 5f 43 6f 6e 63 61 74 2c 20 37 2c 20 33 2c 20  P_Concat, 7, 3, 
10d00 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  3);.          sq
10d10 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
10d20 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
10d30 2c 20 34 2c 20 30 2c 20 0a 20 20 20 20 20 20 20  , 4, 0, .       
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d50 20 20 20 20 20 22 20 6d 69 73 73 69 6e 67 20 66       " missing f
10d60 72 6f 6d 20 69 6e 64 65 78 20 22 2c 20 50 34 5f  rom index ", P4_
10d70 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
10d80 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10d90 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
10da0 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20  t, 4, 3, 3);.   
10db0 20 20 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71         jmp5 = sq
10dc0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
10dd0 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
10de0 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 4, 0,.        
10df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e00 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
10e10 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53  >zName, P4_TRANS
10e20 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20  IENT);.         
10e30 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10e40 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
10e50 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   4, 3, 3);.     
10e60 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10e70 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
10e80 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20  ultRow, 3, 1);. 
10e90 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20           jmp4 = 
10ea0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10eb0 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
10ec0 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
10ed0 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
10ee0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28  lite3VdbeAddOp0(
10ef0 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20  v, OP_Halt);.   
10f00 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10f10 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
10f20 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f  p2);.          /
10f30 2a 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64  * For UNIQUE ind
10f40 65 78 65 73 2c 20 76 65 72 69 66 79 20 74 68 61  exes, verify tha
10f50 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79  t only one entry
10f60 20 65 78 69 73 74 73 20 77 69 74 68 20 74 68 65   exists with the
10f70 0a 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75  .          ** cu
10f80 72 72 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20  rrent key.  The 
10f90 65 6e 74 72 79 20 69 73 20 75 6e 69 71 75 65 20  entry is unique 
10fa0 69 66 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d  if (1) any colum
10fb0 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20  n is NULL.      
10fc0 20 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68      ** or (2) th
10fd0 65 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73  e next entry has
10fe0 20 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79   a different key
10ff0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66   */.          if
11000 28 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  ( IsUniqueIndex(
11010 70 49 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20  pIdx) ){.       
11020 20 20 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20       int uniqOk 
11030 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b  = sqlite3VdbeMak
11040 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20  eLabel(v);.     
11050 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b         int jmp6;
11060 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
11070 20 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20   kk;.           
11080 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49   for(kk=0; kk<pI
11090 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b  dx->nKeyCol; kk+
110a0 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
110b0 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64    int iCol = pId
110c0 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b  x->aiColumn[kk];
110d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61  .              a
110e0 73 73 65 72 74 28 20 69 43 6f 6c 3e 3d 30 20 26  ssert( iCol>=0 &
110f0 26 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f  & iCol<pTab->nCo
11100 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  l );.           
11110 20 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43 6f     if( pTab->aCo
11120 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20  l[iCol].notNull 
11130 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
11140 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11150 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
11160 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c  P_IsNull, r1+kk,
11170 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20   uniqOk);.      
11180 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65          VdbeCove
11190 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
111a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
111b0 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65     jmp6 = sqlite
111c0 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
111d0 50 5f 4e 65 78 74 2c 20 69 49 64 78 43 75 72 2b  P_Next, iIdxCur+
111e0 6a 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  j); VdbeCoverage
111f0 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
11200 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11210 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30  p2(v, OP_Goto, 0
11220 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20  , uniqOk);.     
11230 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11240 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
11250 70 36 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  p6);.           
11260 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11270 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64 78 47  p4Int(v, OP_IdxG
11280 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 75 6e  T, iIdxCur+j, un
11290 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20 20 20  iqOk, r1,.      
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112b0 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d             pIdx-
112c0 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56 64 62 65 43  >nKeyCol); VdbeC
112d0 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
112e0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
112f0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
11300 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20  AddImm, 1, -1); 
11310 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72  /* Decrement err
11320 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20  or limit */.    
11330 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11340 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
11350 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
11360 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11380 22 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72  "non-unique entr
11390 79 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34  y in index ", P4
113a0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
113b0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
113c0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f  eAddOp2(v, OP_Go
113d0 74 6f 2c 20 30 2c 20 6a 6d 70 35 29 3b 0a 20 20  to, 0, jmp5);.  
113e0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
113f0 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65  3VdbeResolveLabe
11400 6c 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  l(v, uniqOk);.  
11410 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
11420 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
11430 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29  umpHere(v, jmp4)
11440 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11450 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
11460 78 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a  xLabel(pParse, j
11470 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  mp3);.        }.
11480 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11490 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
114a0 4e 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20  Next, iDataCur, 
114b0 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f  loopTop); VdbeCo
114c0 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
114d0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
114e0 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f  mpHere(v, loopTo
114f0 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  p-1);.#ifndef SQ
11500 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
11510 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c  OUNT.        sql
11520 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
11530 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
11540 20 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20   2, 0, .        
11550 20 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72               "wr
11560 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73  ong # of entries
11570 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f   in index ", P4_
11580 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
11590 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70   for(j=0, pIdx=p
115a0 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
115b0 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
115c0 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ext, j++){.     
115d0 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49       if( pPk==pI
115e0 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  dx ) continue;. 
115f0 20 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20           addr = 
11600 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
11610 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20  ntAddr(v);.     
11620 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11630 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50  AddOp2(v, OP_IfP
11640 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20  os, 1, addr+2); 
11650 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
11660 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11670 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
11680 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a  OP_Halt, 0, 0);.
11690 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
116a0 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
116b0 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72  P_Count, iIdxCur
116c0 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20  +j, 3);.        
116d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
116e0 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b  Op3(v, OP_Eq, 8+
116f0 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56  j, addr+8, 3); V
11700 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
11710 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11720 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c  3VdbeChangeP5(v,
11730 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29   SQLITE_NOTNULL)
11740 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11750 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
11760 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
11770 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  1);.          sq
11780 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
11790 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
117a0 2c 20 33 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e  , 3, 0, pIdx->zN
117b0 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e  ame, P4_TRANSIEN
117c0 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  T);.          sq
117d0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
117e0 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c  v, OP_Concat, 3,
117f0 20 32 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20   2, 7);.        
11800 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11810 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
11820 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20  Row, 7, 1);.    
11830 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
11840 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
11850 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20  ECOUNT */.      
11860 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20 61 64 64  } .    }.    add
11870 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
11880 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
11890 79 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20  ySize(endCode), 
118a0 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20  endCode, iLn);. 
118b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
118c0 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2c 20  angeP3(v, addr, 
118d0 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73 71 6c  -mxErr);.    sql
118e0 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
118f0 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 73  (v, addr);.    s
11900 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
11910 50 34 28 76 2c 20 61 64 64 72 2b 31 2c 20 22 6f  P4(v, addr+1, "o
11920 6b 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a  k", P4_STATIC);.
11930 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
11940 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
11950 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
11960 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  CK */..#ifndef S
11970 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
11980 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
11990 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a  GMA encoding.  *
119a0 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64  *   PRAGMA encod
119b0 69 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75  ing = "utf-8"|"u
119c0 74 66 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65  tf-16"|"utf-16le
119d0 22 7c 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a  "|"utf-16be".  *
119e0 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69  *.  ** In its fi
119f0 72 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70  rst form, this p
11a00 72 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68  ragma returns th
11a10 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68  e encoding of th
11a20 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61  e main.  ** data
11a30 62 61 73 65 2e 20 49 66 20 74 68 65 20 64 61 74  base. If the dat
11a40 61 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69  abase is not ini
11a50 74 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20  tialized, it is 
11a60 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e  initialized now.
11a70 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73  .  **.  ** The s
11a80 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68  econd form of th
11a90 69 73 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e  is pragma is a n
11aa0 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e  o-op if the main
11ab0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20   database file. 
11ac0 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65   ** has not alre
11ad0 61 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c  ady been initial
11ae0 69 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ized. In this ca
11af0 73 65 20 69 74 20 73 65 74 73 20 74 68 65 20 64  se it sets the d
11b00 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f  efault.  ** enco
11b10 64 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62  ding that will b
11b20 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d  e used for the m
11b30 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
11b40 65 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a  e if a new file.
11b50 20 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e    ** is created.
11b60 20 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   If an existing 
11b70 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
11b80 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68  le is opened, th
11b90 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61  en the.  ** defa
11ba0 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ult text encodin
11bb0 67 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69  g for the existi
11bc0 6e 67 20 64 61 74 61 62 61 73 65 20 69 73 20 75  ng database is u
11bd0 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20  sed..  ** .  ** 
11be0 49 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77  In all cases new
11bf0 20 64 61 74 61 62 61 73 65 73 20 63 72 65 61 74   databases creat
11c00 65 64 20 75 73 69 6e 67 20 74 68 65 20 41 54 54  ed using the ATT
11c10 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a  ACH command are.
11c20 20 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20    ** created to 
11c30 75 73 65 20 74 68 65 20 73 61 6d 65 20 64 65 66  use the same def
11c40 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69  ault text encodi
11c50 6e 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64  ng as the main d
11c60 61 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a  atabase. If.  **
11c70 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
11c80 73 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20  se has not been 
11c90 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f  initialized and/
11ca0 6f 72 20 63 72 65 61 74 65 64 20 77 68 65 6e 20  or created when 
11cb0 41 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65  ATTACH.  ** is e
11cc0 78 65 63 75 74 65 64 2c 20 74 68 69 73 20 69 73  xecuted, this is
11cd0 20 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65   done before the
11ce0 20 41 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f   ATTACH operatio
11cf0 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  n..  **.  ** In 
11d00 74 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  the second form 
11d10 74 68 69 73 20 70 72 61 67 6d 61 20 73 65 74 73  this pragma sets
11d20 20 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69   the text encodi
11d30 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e  ng to be used in
11d40 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61  .  ** new databa
11d50 73 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64  se files created
11d60 20 75 73 69 6e 67 20 74 68 69 73 20 64 61 74 61   using this data
11d70 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20  base handle. It 
11d80 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65  is only.  ** use
11d90 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69  ful if invoked i
11da0 6d 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72  mmediately after
11db0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
11dc0 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73 65  se i.  */.  case
11dd0 20 50 72 61 67 54 79 70 5f 45 4e 43 4f 44 49 4e   PragTyp_ENCODIN
11de0 47 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20  G: {.    static 
11df0 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63  const struct Enc
11e00 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61  Name {.      cha
11e10 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20  r *zName;.      
11e20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e  u8 enc;.    } en
11e30 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20  cnames[] = {.   
11e40 20 20 20 7b 20 22 55 54 46 38 22 2c 20 20 20 20     { "UTF8",    
11e50 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20   SQLITE_UTF8    
11e60 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22      },.      { "
11e70 55 54 46 2d 38 22 2c 20 20 20 20 53 51 4c 49 54  UTF-8",    SQLIT
11e80 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c  E_UTF8        },
11e90 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65    /* Must be ele
11ea0 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20  ment [1] */.    
11eb0 20 20 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c 20    { "UTF-16le", 
11ec0 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20  SQLITE_UTF16LE  
11ed0 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
11ee0 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f  e element [2] */
11ef0 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
11f00 62 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  be", SQLITE_UTF1
11f10 36 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d  6BE     },  /* M
11f20 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
11f30 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  3] */.      { "U
11f40 54 46 31 36 6c 65 22 2c 20 20 53 51 4c 49 54 45  TF16le",  SQLITE
11f50 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a  _UTF16LE     },.
11f60 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 62 65        { "UTF16be
11f70 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ",  SQLITE_UTF16
11f80 42 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  BE     },.      
11f90 7b 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20  { "UTF-16",   0 
11fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fb0 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54   }, /* SQLITE_UT
11fc0 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20  F16NATIVE */.   
11fd0 20 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20 20     { "UTF16",   
11fe0 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
11ff0 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45      }, /* SQLITE
12000 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a  _UTF16NATIVE */.
12010 20 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20        { 0, 0 }. 
12020 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20     };.    const 
12030 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a  struct EncName *
12040 70 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21 7a  pEnc;.    if( !z
12050 52 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20 22  Right ){    /* "
12060 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22  PRAGMA encoding"
12070 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73 71   */.      if( sq
12080 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
12090 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
120a0 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
120b0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
120c0 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
120d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
120e0 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
120f0 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 65  COLNAME_NAME, "e
12100 6e 63 6f 64 69 6e 67 22 2c 20 53 51 4c 49 54 45  ncoding", SQLITE
12110 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
12120 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
12130 32 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  2(v, OP_String8,
12140 20 30 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73   0, 1);.      as
12150 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
12160 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d  QLITE_UTF8].enc=
12170 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a  =SQLITE_UTF8 );.
12180 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e        assert( en
12190 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54  cnames[SQLITE_UT
121a0 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49  F16LE].enc==SQLI
121b0 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20  TE_UTF16LE );.  
121c0 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e      assert( encn
121d0 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31  ames[SQLITE_UTF1
121e0 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45  6BE].enc==SQLITE
121f0 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20 20 20  _UTF16BE );.    
12200 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
12210 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20 65 6e 63  ngeP4(v, -1, enc
12220 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65  names[ENC(pParse
12230 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20 50 34  ->db)].zName, P4
12240 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
12250 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
12260 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
12270 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 65  w, 1, 1);.    }e
12280 6c 73 65 7b 20 20 20 20 20 20 20 20 20 20 20 20  lse{            
12290 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22              /* "
122a0 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20  PRAGMA encoding 
122b0 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20  = XXX" */.      
122c0 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74  /* Only change t
122d0 68 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69  he value of sqli
122e0 74 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61  te.enc if the da
122f0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73  tabase handle is
12300 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e   not.      ** in
12310 69 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68  itialized. If th
12320 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
12330 65 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20  exists, the new 
12340 73 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65  sqlite.enc value
12350 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62  .      ** will b
12360 65 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68  e overwritten wh
12370 65 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69 73  en the schema is
12380 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66   next loaded. If
12390 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20   it does not.   
123a0 20 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78     ** already ex
123b0 69 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65  ists, it will be
123c0 20 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20   created to use 
123d0 74 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67  the new encoding
123e0 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f   value..      */
123f0 0a 20 20 20 20 20 20 69 66 28 20 0a 20 20 20 20  .      if( .    
12400 20 20 20 20 21 28 44 62 48 61 73 50 72 6f 70 65      !(DbHasPrope
12410 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63  rty(db, 0, DB_Sc
12420 68 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20  hemaLoaded)) || 
12430 0a 20 20 20 20 20 20 20 20 44 62 48 61 73 50 72  .        DbHasPr
12440 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42  operty(db, 0, DB
12450 5f 45 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29  _Empty) .      )
12460 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 45  {.        for(pE
12470 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b  nc=&encnames[0];
12480 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45   pEnc->zName; pE
12490 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  nc++){.         
124a0 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
124b0 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70  trICmp(zRight, p
124c0 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20  Enc->zName) ){. 
124d0 20 20 20 20 20 20 20 20 20 20 20 53 43 48 45 4d             SCHEM
124e0 41 5f 45 4e 43 28 64 62 29 20 3d 20 45 4e 43 28  A_ENC(db) = ENC(
124f0 64 62 29 20 3d 0a 20 20 20 20 20 20 20 20 20 20  db) =.          
12500 20 20 20 20 20 20 70 45 6e 63 2d 3e 65 6e 63 20        pEnc->enc 
12510 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51  ? pEnc->enc : SQ
12520 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
12530 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72  ;.            br
12540 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  eak;.          }
12550 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
12560 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e     if( !pEnc->zN
12570 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ame ){.         
12580 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
12590 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70  (pParse, "unsupp
125a0 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20  orted encoding: 
125b0 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  %s", zRight);.  
125c0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
125d0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
125e0 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
125f0 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a  ITE_OMIT_UTF16 *
12600 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
12610 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45  E_OMIT_SCHEMA_VE
12620 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20  RSION_PRAGMAS.  
12630 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
12640 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65   [database.]sche
12650 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20  ma_version.  ** 
12660 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
12670 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69  se.]schema_versi
12680 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  on = <integer>. 
12690 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
126a0 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65  A [database.]use
126b0 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20  r_version.  **  
126c0 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
126d0 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20  e.]user_version 
126e0 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a  = <integer>.  **
126f0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
12700 64 61 74 61 62 61 73 65 2e 5d 66 72 65 65 6c 69  database.]freeli
12710 73 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74 65  st_count = <inte
12720 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ger>.  **.  **  
12730 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
12740 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69  e.]application_i
12750 64 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  d.  **   PRAGMA 
12760 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69  [database.]appli
12770 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74  cation_id = <int
12780 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
12790 54 68 65 20 70 72 61 67 6d 61 27 73 20 73 63 68  The pragma's sch
127a0 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema_version and 
127b0 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72 65  user_version are
127c0 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72 20   used to set or 
127d0 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  get.  ** the val
127e0 75 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ue of the schema
127f0 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65  -version and use
12800 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70 65  r-version, respe
12810 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20  ctively. Both.  
12820 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65  ** the schema-ve
12830 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75 73  rsion and the us
12840 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20 33  er-version are 3
12850 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74  2-bit signed int
12860 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65  egers.  ** store
12870 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
12880 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20  e header..  **. 
12890 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d 63   ** The schema-c
128a0 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c 79  ookie is usually
128b0 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65   only manipulate
128c0 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20  d internally by 
128d0 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20  SQLite. It.  ** 
128e0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  is incremented b
128f0 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76 65  y SQLite wheneve
12900 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73  r the database s
12910 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69 65  chema is modifie
12920 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61 74  d (by.  ** creat
12930 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67 20  ing or dropping 
12940 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  a table or index
12950 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76 65  ). The schema ve
12960 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79  rsion is used by
12970 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61 63  .  ** SQLite eac
12980 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69  h time a query i
12990 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e  s executed to en
129a0 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e  sure that the in
129b0 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a  ternal cache.  *
129c0 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20  * of the schema 
129d0 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c  used when compil
129e0 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65 72  ing the SQL quer
129f0 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73 63  y matches the sc
12a00 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65  hema of.  ** the
12a10 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e 73   database agains
12a20 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70  t which the comp
12a30 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61 63  iled query is ac
12a40 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e  tually executed.
12a50 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e 67  .  ** Subverting
12a60 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20   this mechanism 
12a70 62 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d 41  by using "PRAGMA
12a80 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22   schema_version"
12a90 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20   to modify.  ** 
12aa0 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
12ab0 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c  on is potentiall
12ac0 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64 20  y dangerous and 
12ad0 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f 67  may lead to prog
12ae0 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65 73  ram.  ** crashes
12af0 20 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f 72   or database cor
12b00 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69 74  ruption. Use wit
12b10 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a  h caution!.  **.
12b20 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76 65    ** The user-ve
12b30 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65  rsion is not use
12b40 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20  d internally by 
12b50 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20 62  SQLite. It may b
12b60 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 61  e used by.  ** a
12b70 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20  pplications for 
12b80 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a  any purpose..  *
12b90 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
12ba0 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a 20 7b  _HEADER_VALUE: {
12bb0 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  .    int iCookie
12bc0 3b 20 20 20 2f 2a 20 43 6f 6f 6b 69 65 20 69 6e  ;   /* Cookie in
12bd0 64 65 78 2e 20 31 20 66 6f 72 20 73 63 68 65 6d  dex. 1 for schem
12be0 61 2d 63 6f 6f 6b 69 65 2c 20 36 20 66 6f 72 20  a-cookie, 6 for 
12bf0 75 73 65 72 2d 63 6f 6f 6b 69 65 2e 20 2a 2f 0a  user-cookie. */.
12c00 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
12c10 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29  sesBtree(v, iDb)
12c20 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 7a 4c  ;.    switch( zL
12c30 65 66 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  eft[0] ){.      
12c40 63 61 73 65 20 27 61 27 3a 20 63 61 73 65 20 27  case 'a': case '
12c50 41 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f  A':.        iCoo
12c60 6b 69 65 20 3d 20 42 54 52 45 45 5f 41 50 50 4c  kie = BTREE_APPL
12c70 49 43 41 54 49 4f 4e 5f 49 44 3b 0a 20 20 20 20  ICATION_ID;.    
12c80 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
12c90 20 63 61 73 65 20 27 66 27 3a 20 63 61 73 65 20   case 'f': case 
12ca0 27 46 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f  'F':.        iCo
12cb0 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 46 52 45  okie = BTREE_FRE
12cc0 45 5f 50 41 47 45 5f 43 4f 55 4e 54 3b 0a 20 20  E_PAGE_COUNT;.  
12cd0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
12ce0 20 20 20 63 61 73 65 20 27 73 27 3a 20 63 61 73     case 's': cas
12cf0 65 20 27 53 27 3a 0a 20 20 20 20 20 20 20 20 69  e 'S':.        i
12d00 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 53  Cookie = BTREE_S
12d10 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 3b 0a 20  CHEMA_VERSION;. 
12d20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
12d30 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20      default:.   
12d40 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42       iCookie = B
12d50 54 52 45 45 5f 55 53 45 52 5f 56 45 52 53 49 4f  TREE_USER_VERSIO
12d60 4e 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  N;.        break
12d70 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28  ;.    }..    if(
12d80 20 7a 52 69 67 68 74 20 26 26 20 69 43 6f 6f 6b   zRight && iCook
12d90 69 65 21 3d 42 54 52 45 45 5f 46 52 45 45 5f 50  ie!=BTREE_FREE_P
12da0 41 47 45 5f 43 4f 55 4e 54 20 29 7b 0a 20 20 20  AGE_COUNT ){.   
12db0 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20     /* Write the 
12dc0 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65  specified cookie
12dd0 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20   value */.      
12de0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
12df0 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69  eOpList setCooki
12e00 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  e[] = {.        
12e10 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e  { OP_Transaction
12e20 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c  ,    0,  1,  0},
12e30 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
12e40 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
12e50 2c 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c 20  ,        0,  1, 
12e60 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a   0},    /* 1 */.
12e70 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74          { OP_Set
12e80 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20  Cookie,      0, 
12e90 20 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32   0,  1},    /* 2
12ea0 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20   */.      };.   
12eb0 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71     int addr = sq
12ec0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
12ed0 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
12ee0 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43  setCookie), setC
12ef0 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20  ookie, 0);.     
12f00 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
12f10 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44  geP1(v, addr, iD
12f20 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
12f30 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
12f40 20 61 64 64 72 2b 31 2c 20 73 71 6c 69 74 65 33   addr+1, sqlite3
12f50 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
12f60 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12f70 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
12f80 2b 32 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  +2, iDb);.      
12f90 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
12fa0 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 69  eP2(v, addr+2, i
12fb0 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c  Cookie);.    }el
12fc0 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61  se{.      /* Rea
12fd0 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  d the specified 
12fe0 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a  cookie value */.
12ff0 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
13000 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65  st VdbeOpList re
13010 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20  adCookie[] = {. 
13020 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e         { OP_Tran
13030 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20  saction,     0, 
13040 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30   0,  0},    /* 0
13050 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50   */.        { OP
13060 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20  _ReadCookie,    
13070 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20    0,  1,  0},   
13080 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20   /* 1 */.       
13090 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
130a0 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20 30         1,  1,  0
130b0 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20  }.      };.     
130c0 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69   int addr = sqli
130d0 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
130e0 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65  (v, ArraySize(re
130f0 61 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43  adCookie), readC
13100 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20 20  ookie, 0);.     
13110 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
13120 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44  geP1(v, addr, iD
13130 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
13140 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
13150 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20   addr+1, iDb);. 
13160 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13170 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64 72  ChangeP3(v, addr
13180 2b 31 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20  +1, iCookie);.  
13190 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
131a0 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
131b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
131c0 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
131d0 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
131e0 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
131f0 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d  RANSIENT);.    }
13200 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
13210 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
13220 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  MIT_SCHEMA_VERSI
13230 4f 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  ON_PRAGMAS */..#
13240 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
13250 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
13260 5f 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a  _DIAGS.  /*.  **
13270 20 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c     PRAGMA compil
13280 65 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20  e_options.  **. 
13290 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
132a0 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70  ames of all comp
132b0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
132c0 20 75 73 65 64 20 69 6e 20 74 68 69 73 20 62 75   used in this bu
132d0 69 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70  ild,.  ** one op
132e0 74 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20  tion per row..  
132f0 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
13300 70 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e  p_COMPILE_OPTION
13310 53 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d  S: {.    int i =
13320 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68   0;.    const ch
13330 61 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 73 71  ar *zOpt;.    sq
13340 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
13350 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 70  ols(v, 1);.    p
13360 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b  Parse->nMem = 1;
13370 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
13380 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
13390 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
133a0 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22 2c  compile_option",
133b0 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
133c0 0a 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f 70  .    while( (zOp
133d0 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70  t = sqlite3_comp
133e0 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 2b  ileoption_get(i+
133f0 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  +))!=0 ){.      
13400 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
13410 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
13420 20 30 2c 20 31 2c 20 30 2c 20 7a 4f 70 74 2c 20   0, 1, 0, zOpt, 
13430 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
13440 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
13450 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
13460 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  1);.    }.  }.  
13470 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
13480 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
13490 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
134a0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
134b0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f  ITE_OMIT_WAL.  /
134c0 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
134d0 5b 64 61 74 61 62 61 73 65 2e 5d 77 61 6c 5f 63  [database.]wal_c
134e0 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73 73  heckpoint = pass
134f0 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72 74  ive|full|restart
13500 7c 74 72 75 6e 63 61 74 65 0a 20 20 2a 2a 0a 20  |truncate.  **. 
13510 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 74   ** Checkpoint t
13520 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a  he database..  *
13530 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
13540 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a  _WAL_CHECKPOINT:
13550 20 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20 3d   {.    int iBt =
13560 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51   (pId2->z?iDb:SQ
13570 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
13580 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  D);.    int eMod
13590 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b  e = SQLITE_CHECK
135a0 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20  POINT_PASSIVE;. 
135b0 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
135c0 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
135d0 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
135e0 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  , "full")==0 ){.
135f0 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
13600 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
13610 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65  T_FULL;.      }e
13620 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
13630 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
13640 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a  restart")==0 ){.
13650 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
13660 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
13670 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20 20  T_RESTART;.     
13680 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
13690 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
136a0 2c 20 22 74 72 75 6e 63 61 74 65 22 29 3d 3d 30  , "truncate")==0
136b0 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64   ){.        eMod
136c0 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b  e = SQLITE_CHECK
136d0 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 3b 0a  POINT_TRUNCATE;.
136e0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
136f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
13700 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20  NumCols(v, 3);. 
13710 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
13720 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 3;.    sqlite3
13730 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
13740 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
13750 45 2c 20 22 62 75 73 79 22 2c 20 53 51 4c 49 54  E, "busy", SQLIT
13760 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
13770 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
13780 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
13790 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 67 22 2c 20  ME_NAME, "log", 
137a0 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
137b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
137c0 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
137d0 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
137e0 68 65 63 6b 70 6f 69 6e 74 65 64 22 2c 20 53 51  heckpointed", SQ
137f0 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20  LITE_STATIC);.. 
13800 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
13810 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b  dOp3(v, OP_Check
13820 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64  point, iBt, eMod
13830 65 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74  e, 1);.    sqlit
13840 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
13850 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
13860 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   3);.  }.  break
13870 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  ;..  /*.  **   P
13880 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68  RAGMA wal_autoch
13890 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20  eckpoint.  **   
138a0 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63  PRAGMA wal_autoc
138b0 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20  heckpoint = N.  
138c0 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72  **.  ** Configur
138d0 65 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e a database con
138e0 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d  nection to autom
138f0 61 74 69 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f  atically checkpo
13900 69 6e 74 20 61 20 64 61 74 61 62 61 73 65 0a 20  int a database. 
13910 20 2a 2a 20 61 66 74 65 72 20 61 63 63 75 6d 75   ** after accumu
13920 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d 65 73 20  lating N frames 
13930 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71  in the log. Or q
13940 75 65 72 79 20 66 6f 72 20 74 68 65 20 63 75 72  uery for the cur
13950 72 65 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20  rent value.  ** 
13960 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  of N..  */.  cas
13970 65 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55  e PragTyp_WAL_AU
13980 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a  TOCHECKPOINT: {.
13990 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
139a0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
139b0 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
139c0 6e 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74  nt(db, sqlite3At
139d0 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
139e0 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
139f0 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
13a00 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
13a10 6e 74 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d  nt", .       db-
13a20 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73  >xWalCallback==s
13a30 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
13a40 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20  Hook ? .        
13a50 20 20 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f     SQLITE_PTR_TO
13a60 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67  _INT(db->pWalArg
13a70 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  ) : 0);.  }.  br
13a80 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  eak;.#endif..  /
13a90 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73  *.  **  PRAGMA s
13aa0 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a  hrink_memory.  *
13ab0 2a 0a 20 20 2a 2a 20 54 68 69 73 20 70 72 61 67  *.  ** This prag
13ac0 6d 61 20 61 74 74 65 6d 70 74 73 20 74 6f 20 66  ma attempts to f
13ad0 72 65 65 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f  ree as much memo
13ae0 72 79 20 61 73 20 70 6f 73 73 69 62 6c 65 20 66  ry as possible f
13af0 72 6f 6d 20 74 68 65 0a 20 20 2a 2a 20 63 75 72  rom the.  ** cur
13b00 72 65 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f  rent database co
13b10 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20  nnection..  */. 
13b20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 48   case PragTyp_SH
13b30 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20  RINK_MEMORY: {. 
13b40 20 20 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65     sqlite3_db_re
13b50 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29  lease_memory(db)
13b60 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
13b70 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
13b80 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75  AGMA busy_timeou
13b90 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  t.  **   PRAGMA 
13ba0 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e  busy_timeout = N
13bb0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20  .  **.  ** Call 
13bc0 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
13bd0 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20 20 52 65  eout(db, N).  Re
13be0 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
13bf0 20 74 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20   timeout value. 
13c00 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73 20 73 65   ** if one is se
13c10 74 2e 20 20 49 66 20 6e 6f 20 62 75 73 79 20 68  t.  If no busy h
13c20 61 6e 64 6c 65 72 20 6f 72 20 61 20 64 69 66 66  andler or a diff
13c30 65 72 65 6e 74 20 62 75 73 79 20 68 61 6e 64 6c  erent busy handl
13c40 65 72 20 69 73 20 73 65 74 0a 20 20 2a 2a 20 74  er is set.  ** t
13c50 68 65 6e 20 30 20 69 73 20 72 65 74 75 72 6e 65  hen 0 is returne
13c60 64 2e 20 20 53 65 74 74 69 6e 67 20 74 68 65 20  d.  Setting the 
13c70 62 75 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20  busy_timeout to 
13c80 30 20 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20  0 or negative.  
13c90 2a 2a 20 64 69 73 61 62 6c 65 73 20 74 68 65 20  ** disables the 
13ca0 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20  timeout..  */.  
13cb0 2f 2a 63 61 73 65 20 50 72 61 67 54 79 70 5f 42  /*case PragTyp_B
13cc0 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65  USY_TIMEOUT*/ de
13cd0 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73  fault: {.    ass
13ce0 65 72 74 28 20 61 50 72 61 67 6d 61 4e 61 6d 65  ert( aPragmaName
13cf0 73 5b 6d 69 64 5d 2e 65 50 72 61 67 54 79 70 3d  s[mid].ePragTyp=
13d00 3d 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49  =PragTyp_BUSY_TI
13d10 4d 45 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28  MEOUT );.    if(
13d20 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
13d30 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69   sqlite3_busy_ti
13d40 6d 65 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65  meout(db, sqlite
13d50 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
13d60 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
13d70 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
13d80 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20 20 64 62  , "timeout",  db
13d90 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a  ->busyTimeout);.
13da0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
13db0 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
13dc0 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  MA soft_heap_lim
13dd0 69 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  it.  **   PRAGMA
13de0 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74   soft_heap_limit
13df0 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43   = N.  **.  ** C
13e00 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 6f 66 74  all sqlite3_soft
13e10 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29  _heap_limit64(N)
13e20 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 72 65  .  Return the re
13e30 73 75 6c 74 2e 20 20 49 66 20 4e 20 69 73 20 6f  sult.  If N is o
13e40 6d 69 74 74 65 64 2c 0a 20 20 2a 2a 20 75 73 65  mitted,.  ** use
13e50 20 2d 31 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65   -1..  */.  case
13e60 20 50 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45   PragTyp_SOFT_HE
13e70 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20  AP_LIMIT: {.    
13e80 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b  sqlite3_int64 N;
13e90 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
13ea0 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48  && sqlite3DecOrH
13eb0 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
13ec0 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  &N)==SQLITE_OK )
13ed0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
13ee0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36  soft_heap_limit6
13ef0 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  4(N);.    }.    
13f00 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
13f10 70 50 61 72 73 65 2c 20 22 73 6f 66 74 5f 68 65  pParse, "soft_he
13f20 61 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69  ap_limit",  sqli
13f30 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
13f40 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20 20 20 20  mit64(-1));.    
13f50 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
13f60 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
13f70 68 72 65 61 64 73 0a 20 20 2a 2a 20 20 20 50 52  hreads.  **   PR
13f80 41 47 4d 41 20 74 68 72 65 61 64 73 20 3d 20 4e  AGMA threads = N
13f90 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69  .  **.  ** Confi
13fa0 67 75 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  gure the maximum
13fb0 20 6e 75 6d 62 65 72 20 6f 66 20 77 6f 72 6b 65   number of worke
13fc0 72 20 74 68 72 65 61 64 73 2e 20 20 52 65 74 75  r threads.  Retu
13fd0 72 6e 20 74 68 65 20 6e 65 77 0a 20 20 2a 2a 20  rn the new.  ** 
13fe0 6d 61 78 69 6d 75 6d 2c 20 77 68 69 63 68 20 6d  maximum, which m
13ff0 69 67 68 74 20 62 65 20 6c 65 73 73 20 74 68 61  ight be less tha
14000 6e 20 72 65 71 75 65 73 74 65 64 2e 0a 20 20 2a  n requested..  *
14010 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
14020 5f 54 48 52 45 41 44 53 3a 20 7b 0a 20 20 20 20  _THREADS: {.    
14030 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b  sqlite3_int64 N;
14040 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 0a  .    if( zRight.
14050 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 44       && sqlite3D
14060 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69  ecOrHexToI64(zRi
14070 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45  ght, &N)==SQLITE
14080 5f 4f 4b 0a 20 20 20 20 20 26 26 20 4e 3e 3d 30  _OK.     && N>=0
14090 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 73 71  .    ){.      sq
140a0 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20  lite3_limit(db, 
140b0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52  SQLITE_LIMIT_WOR
140c0 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 28 69 6e  KER_THREADS, (in
140d0 74 29 28 4e 26 30 78 37 66 66 66 66 66 66 66 29  t)(N&0x7fffffff)
140e0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
140f0 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
14100 72 73 65 2c 20 22 74 68 72 65 61 64 73 22 2c 0a  rse, "threads",.
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69      sqlite3_limi
14130 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d  t(db, SQLITE_LIM
14140 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
14150 53 2c 20 2d 31 29 29 3b 0a 20 20 20 20 62 72 65  S, -1));.    bre
14160 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66  ak;.  }..#if def
14170 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
14180 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
14190 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a  LITE_TEST).  /*.
141a0 20 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20    ** Report the 
141b0 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66  current state of
141c0 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61   file logs for a
141d0 6c 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a  ll databases.  *
141e0 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
141f0 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a  _LOCK_STATUS: {.
14200 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
14210 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c   char *const azL
14220 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20  ockName[] = {.  
14230 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20      "unlocked", 
14240 22 73 68 61 72 65 64 22 2c 20 22 72 65 73 65 72  "shared", "reser
14250 76 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c  ved", "pending",
14260 20 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20   "exclusive".   
14270 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   };.    int i;. 
14280 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
14290 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a  tNumCols(v, 2);.
142a0 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
142b0 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
142c0 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
142d0 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
142e0 4d 45 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20  ME, "database", 
142f0 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
14300 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
14310 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
14320 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
14330 74 61 74 75 73 22 2c 20 53 51 4c 49 54 45 5f 53  tatus", SQLITE_S
14340 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
14350 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
14360 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65  i++){.      Btre
14370 65 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f  e *pBt;.      co
14380 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65  nst char *zState
14390 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20   = "unknown";.  
143a0 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20      int j;.     
143b0 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
143c0 7a 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69  zName==0 ) conti
143d0 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
143e0 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
143f0 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
14400 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  , 0, db->aDb[i].
14410 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43  zName, P4_STATIC
14420 29 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64  );.      pBt = d
14430 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20  b->aDb[i].pBt;. 
14440 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20       if( pBt==0 
14450 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  || sqlite3BtreeP
14460 61 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a  ager(pBt)==0 ){.
14470 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d          zState =
14480 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20   "closed";.     
14490 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
144a0 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
144b0 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b  db, i ? db->aDb[
144c0 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20  i].zName : 0, . 
144d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 20 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c      SQLITE_FCNTL
14500 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d  _LOCKSTATE, &j)=
14510 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
14520 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
14530 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20  azLockName[j];. 
14540 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
14550 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
14560 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
14570 20 32 2c 20 30 2c 20 7a 53 74 61 74 65 2c 20 50   2, 0, zState, P
14580 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
14590 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
145a0 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
145b0 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d  ow, 1, 2);.    }
145c0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
145d0 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
145e0 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
145f0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b    case PragTyp_K
14600 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
14610 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b  ight ) sqlite3_k
14620 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a  ey_v2(db, zDb, z
14630 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74  Right, sqlite3St
14640 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b  rlen30(zRight));
14650 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
14660 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 52    case PragTyp_R
14670 45 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20  EKEY: {.    if( 
14680 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33  zRight ) sqlite3
14690 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44  _rekey_v2(db, zD
146a0 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74  b, zRight, sqlit
146b0 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68  e3Strlen30(zRigh
146c0 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  t));.    break;.
146d0 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54    }.  case PragT
146e0 79 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20  yp_HEXKEY: {.   
146f0 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
14700 20 20 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20       u8 iByte;. 
14710 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
14720 20 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b    char zKey[40];
14730 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20  .      for(i=0, 
14740 69 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f  iByte=0; i<sizeo
14750 66 28 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c  f(zKey)*2 && sql
14760 69 74 65 33 49 73 78 64 69 67 69 74 28 7a 52 69  ite3Isxdigit(zRi
14770 67 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20  ght[i]); i++){. 
14780 20 20 20 20 20 20 20 69 42 79 74 65 20 3d 20 28         iByte = (
14790 69 42 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69  iByte<<4) + sqli
147a0 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67  te3HexToInt(zRig
147b0 68 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  ht[i]);.        
147c0 69 66 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a  if( (i&1)!=0 ) z
147d0 4b 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65  Key[i/2] = iByte
147e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
147f0 69 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20  if( (zLeft[3] & 
14800 30 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20  0xf)==0xb ){.   
14810 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79       sqlite3_key
14820 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65  _v2(db, zDb, zKe
14830 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d  y, i/2);.      }
14840 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
14850 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64  lite3_rekey_v2(d
14860 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f  b, zDb, zKey, i/
14870 32 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  2);.      }.    
14880 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
14890 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
148a0 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43  ned(SQLITE_HAS_C
148b0 4f 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64  ODEC) || defined
148c0 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43  (SQLITE_ENABLE_C
148d0 45 52 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61  EROD).  case Pra
148e0 67 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58  gTyp_ACTIVATE_EX
148f0 54 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52  TENSIONS: if( zR
14900 69 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53  ight ){.#ifdef S
14910 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
14920 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
14930 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  trNICmp(zRight, 
14940 22 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b  "see-", 4)==0 ){
14950 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61  .      sqlite3_a
14960 63 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69  ctivate_see(&zRi
14970 67 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23  ght[4]);.    }.#
14980 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
14990 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44  ITE_ENABLE_CEROD
149a0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
149b0 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c  StrNICmp(zRight,
149c0 20 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30   "cerod-", 6)==0
149d0 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
149e0 33 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64  3_activate_cerod
149f0 28 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20  (&zRight[6]);.  
14a00 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
14a10 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a   break;.#endif..
14a20 20 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68    } /* End of th
14a30 65 20 50 52 41 47 4d 41 20 73 77 69 74 63 68 20  e PRAGMA switch 
14a40 2a 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a  */..pragma_out:.
14a50 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
14a60 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71  db, zLeft);.  sq
14a70 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
14a80 7a 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64  zRight);.}..#end
14a90 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
14aa0 54 5f 50 52 41 47 4d 41 20 2a 2f 0a              T_PRAGMA */.