/ Hex Artifact Content
Login

Artifact d10ef67c4de79f78188b965b4b7988aff1d66f2e:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20  e next block of 
02e0: 63 6f 64 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20  code, including 
02f0: 74 68 65 20 50 72 61 67 54 79 70 5f 58 58 58 58  the PragTyp_XXXX
0300: 20 6d 61 63 72 6f 20 64 65 66 69 6e 69 74 69 6f   macro definitio
0310: 6e 73 20 61 6e 64 0a 2a 2a 20 74 68 65 20 61 50  ns and.** the aP
0320: 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 6f 62 6a 65  ragmaName[] obje
0330: 63 74 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f  ct is composed o
0340: 66 20 67 65 6e 65 72 61 74 65 64 20 63 6f 64 65  f generated code
0350: 2e 20 44 4f 20 4e 4f 54 20 45 44 49 54 2e 0a 2a  . DO NOT EDIT..*
0360: 2a 0a 2a 2a 20 54 6f 20 61 64 64 20 6e 65 77 20  *.** To add new 
0370: 70 72 61 67 6d 61 73 2c 20 65 64 69 74 20 74 68  pragmas, edit th
0380: 65 20 63 6f 64 65 20 69 6e 20 2e 2e 2f 74 6f 6f  e code in ../too
0390: 6c 2f 6d 6b 70 72 61 67 6d 61 74 61 62 2e 74 63  l/mkpragmatab.tc
03a0: 6c 20 61 6e 64 20 72 65 72 75 6e 0a 2a 2a 20 74  l and rerun.** t
03b0: 68 61 74 20 73 63 72 69 70 74 2e 20 20 54 68 65  hat script.  The
03c0: 6e 20 63 6f 70 79 2f 70 61 73 74 65 20 74 68 65  n copy/paste the
03d0: 20 6f 75 74 70 75 74 20 69 6e 20 70 6c 61 63 65   output in place
03e0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
03f0: 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 72  g:.*/.#define Pr
0400: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
0410: 55 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UE              
0420: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50       0.#define P
0430: 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55  ragTyp_AUTO_VACU
0440: 55 4d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UM              
0450: 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20        1.#define 
0460: 50 72 61 67 54 79 70 5f 46 4c 41 47 20 20 20 20  PragTyp_FLAG    
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0480: 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65         2.#define
0490: 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49   PragTyp_BUSY_TI
04a0: 4d 45 4f 55 54 20 20 20 20 20 20 20 20 20 20 20  MEOUT           
04b0: 20 20 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e          3.#defin
04c0: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
04d0: 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 20  SIZE            
04e0: 20 20 20 20 20 20 20 20 20 34 0a 23 64 65 66 69           4.#defi
04f0: 6e 65 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f  ne PragTyp_CASE_
0500: 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 20 20  SENSITIVE_LIKE  
0510: 20 20 20 20 20 20 20 20 20 20 35 0a 23 64 65 66            5.#def
0520: 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c  ine PragTyp_COLL
0530: 41 54 49 4f 4e 5f 4c 49 53 54 20 20 20 20 20 20  ATION_LIST      
0540: 20 20 20 20 20 20 20 20 20 20 20 36 0a 23 64 65             6.#de
0550: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4d  fine PragTyp_COM
0560: 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 20 20 20 20  PILE_OPTIONS    
0570: 20 20 20 20 20 20 20 20 20 20 20 20 37 0a 23 64              7.#d
0580: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44 41  efine PragTyp_DA
0590: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
05a0: 52 59 20 20 20 20 20 20 20 20 20 20 20 38 0a 23  RY           8.#
05b0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44  define PragTyp_D
05c0: 41 54 41 42 41 53 45 5f 4c 49 53 54 20 20 20 20  ATABASE_LIST    
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 39 0a                9.
05e0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
05f0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
0600: 5a 45 20 20 20 20 20 20 20 20 20 20 20 20 31 30  ZE            10
0610: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0620: 5f 45 4e 43 4f 44 49 4e 47 20 20 20 20 20 20 20  _ENCODING       
0630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
0640: 31 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  1.#define PragTy
0650: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48  p_FOREIGN_KEY_CH
0660: 45 43 4b 20 20 20 20 20 20 20 20 20 20 20 20 20  ECK             
0670: 31 32 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  12.#define PragT
0680: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c  yp_FOREIGN_KEY_L
0690: 49 53 54 20 20 20 20 20 20 20 20 20 20 20 20 20  IST             
06a0: 20 31 33 0a 23 64 65 66 69 6e 65 20 50 72 61 67   13.#define Prag
06b0: 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f  Typ_INCREMENTAL_
06c0: 56 41 43 55 55 4d 20 20 20 20 20 20 20 20 20 20  VACUUM          
06d0: 20 20 31 34 0a 23 64 65 66 69 6e 65 20 50 72 61    14.#define Pra
06e0: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 20  gTyp_INDEX_INFO 
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0700: 20 20 20 31 35 0a 23 64 65 66 69 6e 65 20 50 72     15.#define Pr
0710: 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54  agTyp_INDEX_LIST
0720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0730: 20 20 20 20 31 36 0a 23 64 65 66 69 6e 65 20 50      16.#define P
0740: 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59  ragTyp_INTEGRITY
0750: 5f 43 48 45 43 4b 20 20 20 20 20 20 20 20 20 20  _CHECK          
0760: 20 20 20 20 20 31 37 0a 23 64 65 66 69 6e 65 20       17.#define 
0770: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
0780: 4d 4f 44 45 20 20 20 20 20 20 20 20 20 20 20 20  MODE            
0790: 20 20 20 20 20 20 31 38 0a 23 64 65 66 69 6e 65        18.#define
07a0: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
07b0: 5f 53 49 5a 45 5f 4c 49 4d 49 54 20 20 20 20 20  _SIZE_LIMIT     
07c0: 20 20 20 20 20 20 20 31 39 0a 23 64 65 66 69 6e         19.#defin
07d0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
07e0: 52 4f 58 59 5f 46 49 4c 45 20 20 20 20 20 20 20  ROXY_FILE       
07f0: 20 20 20 20 20 20 20 20 32 30 0a 23 64 65 66 69          20.#defi
0800: 6e 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49  ne PragTyp_LOCKI
0810: 4e 47 5f 4d 4f 44 45 20 20 20 20 20 20 20 20 20  NG_MODE         
0820: 20 20 20 20 20 20 20 20 20 32 31 0a 23 64 65 66           21.#def
0830: 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41 47 45  ine PragTyp_PAGE
0840: 5f 43 4f 55 4e 54 20 20 20 20 20 20 20 20 20 20  _COUNT          
0850: 20 20 20 20 20 20 20 20 20 20 32 32 0a 23 64 65            22.#de
0860: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4d 4d 41  fine PragTyp_MMA
0870: 50 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  P_SIZE          
0880: 20 20 20 20 20 20 20 20 20 20 20 32 33 0a 23 64             23.#d
0890: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41  efine PragTyp_PA
08a0: 47 45 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20  GE_SIZE         
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 32 34 0a 23              24.#
08c0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 53  define PragTyp_S
08d0: 45 43 55 52 45 5f 44 45 4c 45 54 45 20 20 20 20  ECURE_DELETE    
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 0a               25.
08f0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
0900: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 20 20 20  SHRINK_MEMORY   
0910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 36                26
0920: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0930: 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54  _SOFT_HEAP_LIMIT
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
0950: 37 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  7.#define PragTy
0960: 70 5f 53 54 41 54 53 20 20 20 20 20 20 20 20 20  p_STATS         
0970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0980: 32 38 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  28.#define PragT
0990: 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20  yp_SYNCHRONOUS  
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 32 39 0a 23 64 65 66 69 6e 65 20 50 72 61 67   29.#define Prag
09c0: 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 20 20  Typ_TABLE_INFO  
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 20 20 33 30 0a 23 64 65 66 69 6e 65 20 50 72 61    30.#define Pra
09f0: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 20  gTyp_TEMP_STORE 
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 20 20 20 33 31 0a 23 64 65 66 69 6e 65 20 50 72     31.#define Pr
0a20: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
0a30: 5f 44 49 52 45 43 54 4f 52 59 20 20 20 20 20 20  _DIRECTORY      
0a40: 20 20 20 20 33 32 0a 23 64 65 66 69 6e 65 20 50      32.#define P
0a50: 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43  ragTyp_WAL_AUTOC
0a60: 48 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20  HECKPOINT       
0a70: 20 20 20 20 20 33 33 0a 23 64 65 66 69 6e 65 20       33.#define 
0a80: 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43  PragTyp_WAL_CHEC
0a90: 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20 20 20  KPOINT          
0aa0: 20 20 20 20 20 20 33 34 0a 23 64 65 66 69 6e 65        34.#define
0ab0: 20 50 72 61 67 54 79 70 5f 41 43 54 49 56 41 54   PragTyp_ACTIVAT
0ac0: 45 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20 20 20  E_EXTENSIONS    
0ad0: 20 20 20 20 20 20 20 33 35 0a 23 64 65 66 69 6e         35.#defin
0ae0: 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45 59  e PragTyp_HEXKEY
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b00: 20 20 20 20 20 20 20 20 33 36 0a 23 64 65 66 69          36.#defi
0b10: 6e 65 20 50 72 61 67 54 79 70 5f 4b 45 59 20 20  ne PragTyp_KEY  
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b30: 20 20 20 20 20 20 20 20 20 33 37 0a 23 64 65 66           37.#def
0b40: 69 6e 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45  ine PragTyp_REKE
0b50: 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Y               
0b60: 20 20 20 20 20 20 20 20 20 20 33 38 0a 23 64 65            38.#de
0b70: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4c 4f 43  fine PragTyp_LOC
0b80: 4b 5f 53 54 41 54 55 53 20 20 20 20 20 20 20 20  K_STATUS        
0b90: 20 20 20 20 20 20 20 20 20 20 20 33 39 0a 23 64             39.#d
0ba0: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41  efine PragTyp_PA
0bb0: 52 53 45 52 5f 54 52 41 43 45 20 20 20 20 20 20  RSER_TRACE      
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 34 30 0a 23              40.#
0bd0: 64 65 66 69 6e 65 20 50 72 61 67 46 6c 61 67 5f  define PragFlag_
0be0: 4e 65 65 64 53 63 68 65 6d 61 20 20 20 20 20 20  NeedSchema      
0bf0: 20 20 20 20 20 30 78 30 31 0a 73 74 61 74 69 63       0x01.static
0c00: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50   const struct sP
0c10: 72 61 67 6d 61 4e 61 6d 65 73 20 7b 0a 20 20 63  ragmaNames {.  c
0c20: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
0c30: 20 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65   zName;  /* Name
0c40: 20 6f 66 20 70 72 61 67 6d 61 20 2a 2f 0a 20 20   of pragma */.  
0c50: 75 38 20 65 50 72 61 67 54 79 70 3b 20 20 20 20  u8 ePragTyp;    
0c60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 61            /* Pra
0c70: 67 54 79 70 5f 58 58 58 20 76 61 6c 75 65 20 2a  gTyp_XXX value *
0c80: 2f 0a 20 20 75 38 20 6d 50 72 61 67 46 6c 61 67  /.  u8 mPragFlag
0c90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
0ca0: 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 50 72   Zero or more Pr
0cb0: 61 67 46 6c 61 67 5f 58 58 58 20 76 61 6c 75 65  agFlag_XXX value
0cc0: 73 20 2a 2f 0a 20 20 75 33 32 20 69 41 72 67 3b  s */.  u32 iArg;
0cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ce0: 20 2f 2a 20 45 78 74 72 61 20 61 72 67 75 6d 65   /* Extra argume
0cf0: 6e 74 20 2a 2f 0a 7d 20 61 50 72 61 67 6d 61 4e  nt */.} aPragmaN
0d00: 61 6d 65 73 5b 5d 20 3d 20 7b 0a 23 69 66 20 64  ames[] = {.#if d
0d10: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
0d20: 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69  S_CODEC) || defi
0d30: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
0d40: 45 5f 43 45 52 4f 44 29 0a 20 20 7b 20 2f 2a 20  E_CEROD).  { /* 
0d50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 61  zName:     */ "a
0d60: 63 74 69 76 61 74 65 5f 65 78 74 65 6e 73 69 6f  ctivate_extensio
0d70: 6e 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ns",.    /* ePra
0d80: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0d90: 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e  p_ACTIVATE_EXTEN
0da0: 53 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20 65 50  SIONS,.    /* eP
0db0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
0dc0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
0dd0: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
0de0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
0df0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
0e00: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29  VERSION_PRAGMAS)
0e10: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
0e20: 20 20 20 2a 2f 20 22 61 70 70 6c 69 63 61 74 69     */ "applicati
0e30: 6f 6e 5f 69 64 22 2c 0a 20 20 20 20 2f 2a 20 65  on_id",.    /* e
0e40: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
0e50: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
0e60: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
0e70: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
0e80: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
0e90: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
0ea0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0eb0: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
0ec0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
0ed0: 20 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63 75     */ "auto_vacu
0ee0: 75 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  um",.    /* ePra
0ef0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0f00: 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a 20  p_AUTO_VACUUM,. 
0f10: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
0f20: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
0f30: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
0f40: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
0f50: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
0f60: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0f70: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
0f80: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
0f90: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d 41  LITE_OMIT_AUTOMA
0fa0: 54 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b 20 2f  TIC_INDEX).  { /
0fb0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
0fc0: 22 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78  "automatic_index
0fd0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
0fe0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
0ff0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
1000: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1010: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1020: 2a 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  */ SQLITE_AutoIn
1030: 64 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65  dex },.#endif.#e
1040: 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ndif.  { /* zNam
1050: 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79 5f  e:     */ "busy_
1060: 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f 2a  timeout",.    /*
1070: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1080: 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
1090: 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  OUT,.    /* ePra
10a0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
10b0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
10c0: 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66 69  / 0 },.#if !defi
10d0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
10e0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
10f0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1100: 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65 22   */ "cache_size"
1110: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1120: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43  p:  */ PragTyp_C
1130: 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  ACHE_SIZE,.    /
1140: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1150: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1160: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1170: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1180: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1190: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
11a0: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
11b0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
11c0: 2f 20 22 63 61 63 68 65 5f 73 70 69 6c 6c 22 2c  / "cache_spill",
11d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
11e0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
11f0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1200: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1210: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1220: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
1230: 6c 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b  ll },.#endif.  {
1240: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1250: 2f 20 22 63 61 73 65 5f 73 65 6e 73 69 74 69 76  / "case_sensitiv
1260: 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f 2a 20  e_like",.    /* 
1270: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1280: 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49  agTyp_CASE_SENSI
1290: 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20 20 2f  TIVE_LIKE,.    /
12a0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
12b0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
12c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66       */ 0 },.#if
12d0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
12e0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
12f0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1300: 3a 20 20 20 20 20 2a 2f 20 22 63 68 65 63 6b 70  :     */ "checkp
1310: 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63 22 2c  oint_fullfsync",
1320: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1330: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1340: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1350: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1360: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1370: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
1380: 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66 0a  FSync },.#endif.
1390: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
13a0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
13b0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
13c0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
13d0: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22 2c 0a  ollation_list",.
13e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
13f0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f 4c    */ PragTyp_COL
1400: 4c 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20 20 20  LATION_LIST,.   
1410: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1420: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
1430: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1440: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1450: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
1460: 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
1470: 47 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  GS).  { /* zName
1480: 3a 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70 69 6c  :     */ "compil
1490: 65 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20 20 20  e_options",.    
14a0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
14b0: 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45   PragTyp_COMPILE
14c0: 5f 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a  _OPTIONS,.    /*
14d0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
14e0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
14f0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1500: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1510: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
1520: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
1530: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1540: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a  count_changes",.
1550: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1560: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1570: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1580: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1590: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
15a0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
15b0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
15c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
15d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
15e0: 53 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f  S) && SQLITE_OS_
15f0: 57 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  WIN.  { /* zName
1600: 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61 5f 73  :     */ "data_s
1610: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c  tore_directory",
1620: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1630: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44 41  :  */ PragTyp_DA
1640: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
1650: 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  RY,.    /* ePrag
1660: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1670: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1680: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1690: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
16a0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
16b0: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
16c0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61  me:     */ "data
16d0: 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20  base_list",.    
16e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
16f0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53   PragTyp_DATABAS
1700: 45 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a 20 65  E_LIST,.    /* e
1710: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
1720: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
1730: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1740: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1750: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1760: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
1770: 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21 64  R_PRAGMAS) && !d
1780: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1790: 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20  IT_DEPRECATED). 
17a0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
17b0: 20 2a 2f 20 22 64 65 66 61 75 6c 74 5f 63 61 63   */ "default_cac
17c0: 68 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f 2a  he_size",.    /*
17d0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
17e0: 72 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43  ragTyp_DEFAULT_C
17f0: 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  ACHE_SIZE,.    /
1800: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1810: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1820: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1830: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1840: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1850: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
1860: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66  LAG_PRAGMAS).#if
1870: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1880: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
1890: 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
18a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
18b0: 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  ER).  { /* zName
18c0: 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65 72 5f  :     */ "defer_
18d0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20  foreign_keys",. 
18e0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
18f0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
1900: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1910: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1920: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1930: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 7d  QLITE_DeferFKs }
1940: 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ,.#endif.#endif.
1950: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1960: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
1970: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
1980: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65 6d 70  ame:     */ "emp
1990: 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61  ty_result_callba
19a0: 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  cks",.    /* ePr
19b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
19c0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
19d0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
19e0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
19f0: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e 75 6c     */ SQLITE_Nul
1a00: 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23 65 6e  lCallback },.#en
1a10: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1a20: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46  (SQLITE_OMIT_UTF
1a30: 31 36 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  16).  { /* zName
1a40: 3a 20 20 20 20 20 2a 2f 20 22 65 6e 63 6f 64 69  :     */ "encodi
1a50: 6e 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ng",.    /* ePra
1a60: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1a70: 70 5f 45 4e 43 4f 44 49 4e 47 2c 0a 20 20 20 20  p_ENCODING,.    
1a80: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1a90: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1aa0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
1ab0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1ac0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
1ad0: 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
1ae0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1af0: 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 7b 20  IT_TRIGGER).  { 
1b00: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1b10: 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68   "foreign_key_ch
1b20: 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  eck",.    /* ePr
1b30: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1b40: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43  yp_FOREIGN_KEY_C
1b50: 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50 72  HECK,.    /* ePr
1b60: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
1b70: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
1b80: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
1b90: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
1ba0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
1bc0: 4e 5f 4b 45 59 29 0a 20 20 7b 20 2f 2a 20 7a 4e  N_KEY).  { /* zN
1bd0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72  ame:     */ "for
1be0: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 2c 0a  eign_key_list",.
1bf0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1c00: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f 52    */ PragTyp_FOR
1c10: 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 2c 0a 20  EIGN_KEY_LIST,. 
1c20: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1c30: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
1c40: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
1c50: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
1c60: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
1c70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1c80: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
1c90: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1ca0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
1cb0: 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
1cc0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
1cd0: 52 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a  RIGGER).  { /* z
1ce0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f  Name:     */ "fo
1cf0: 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20 20 20  reign_keys",.   
1d00: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1d10: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
1d20: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1d30: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
1d40: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
1d50: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
1d60: 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  },.#endif.#endif
1d70: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1d80: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
1d90: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
1da0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1db0: 20 20 20 20 2a 2f 20 22 66 72 65 65 6c 69 73 74      */ "freelist
1dc0: 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a 20  _count",.    /* 
1dd0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1de0: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
1df0: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
1e00: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1e10: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1e20: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1e30: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1e40: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
1e50: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1e60: 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 5f 63  :     */ "full_c
1e70: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20  olumn_names",.  
1e80: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1e90: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
1ea0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1eb0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
1ec0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
1ed0: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
1ee0: 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  s },.  { /* zNam
1ef0: 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 66  e:     */ "fullf
1f00: 73 79 6e 63 22 2c 0a 20 20 20 20 2f 2a 20 65 50  sync",.    /* eP
1f10: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1f20: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
1f30: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1f40: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1f50: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46 75      */ SQLITE_Fu
1f60: 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69  llFSync },.#endi
1f70: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
1f80: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a  LITE_HAS_CODEC).
1f90: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1fa0: 20 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a 20    */ "hexkey",. 
1fb0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1fc0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 58 4b   */ PragTyp_HEXK
1fd0: 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  EY,.    /* ePrag
1fe0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1ff0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2000: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
2010: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 68 65 78 72  me:     */ "hexr
2020: 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ekey",.    /* eP
2030: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2040: 54 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20 20  Typ_HEXKEY,.    
2050: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2060: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2070: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
2080: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
2090: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
20a0: 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20  AG_PRAGMAS).#if 
20b0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
20c0: 4f 4d 49 54 5f 43 48 45 43 4b 29 0a 20 20 7b 20  OMIT_CHECK).  { 
20d0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
20e0: 20 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f 63   "ignore_check_c
20f0: 6f 6e 73 74 72 61 69 6e 74 73 22 2c 0a 20 20 20  onstraints",.   
2100: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2110: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
2120: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2130: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
2140: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
2150: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
2160: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69   },.#endif.#endi
2170: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2180: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
2190: 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20 7a 4e  ACUUM).  { /* zN
21a0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 63  ame:     */ "inc
21b0: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 22  remental_vacuum"
21c0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
21d0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
21e0: 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55  NCREMENTAL_VACUU
21f0: 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  M,.    /* ePragF
2200: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2210: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2220: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2230: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
2240: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2250: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
2260: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
2270: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64  ame:     */ "ind
2280: 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a  ex_info",.    /*
2290: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
22a0: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46  ragTyp_INDEX_INF
22b0: 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  O,.    /* ePragF
22c0: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
22d0: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
22e0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
22f0: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2300: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64  ame:     */ "ind
2310: 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f 2a  ex_list",.    /*
2320: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2330: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53  ragTyp_INDEX_LIS
2340: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
2350: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2360: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2370: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2380: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
2390: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
23a0: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
23b0: 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a  _CHECK).  { /* z
23c0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
23d0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
23e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
23f0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54    */ PragTyp_INT
2400: 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20  EGRITY_CHECK,.  
2410: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2420: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
2430: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
2440: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
2450: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
2460: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2470: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
2480: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2490: 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f 6d     */ "journal_m
24a0: 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ode",.    /* ePr
24b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
24c0: 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 2c  yp_JOURNAL_MODE,
24d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
24e0: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
24f0: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2500: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2510: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
2520: 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e  e:     */ "journ
2530: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 0a  al_size_limit",.
2540: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2550: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f 55    */ PragTyp_JOU
2560: 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 2c  RNAL_SIZE_LIMIT,
2570: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2580: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2590: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
25a0: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  },.#endif.#if de
25b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
25c0: 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20 7a  _CODEC).  { /* z
25d0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6b 65  Name:     */ "ke
25e0: 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  y",.    /* ePrag
25f0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2600: 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72  _KEY,.    /* ePr
2610: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2620: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2630: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2640: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2650: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
2660: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
2670: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 65 67 61  me:     */ "lega
2680: 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 22 2c  cy_file_format",
2690: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
26a0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
26b0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
26c0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
26d0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
26e0: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
26f0: 6c 65 46 6d 74 20 7d 2c 0a 23 65 6e 64 69 66 0a  leFmt },.#endif.
2700: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2710: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
2720: 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c 49 54  RAGMAS) && SQLIT
2730: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
2740: 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a 20 7a 4e  _STYLE.  { /* zN
2750: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
2760: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 0a 20  k_proxy_file",. 
2770: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2780: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b   */ PragTyp_LOCK
2790: 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a 20 20 20  _PROXY_FILE,.   
27a0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
27b0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
27c0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
27d0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
27e0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
27f0: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2800: 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f 2a 20 7a  E_TEST).  { /* z
2810: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f  Name:     */ "lo
2820: 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20 20 20 20  ck_status",.    
2830: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2840: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54   PragTyp_LOCK_ST
2850: 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ATUS,.    /* ePr
2860: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2870: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2880: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2890: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
28a0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
28b0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
28c0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
28d0: 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20 20 20  king_mode",.    
28e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
28f0: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47   PragTyp_LOCKING
2900: 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _MODE,.    /* eP
2910: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2920: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2930: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2940: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6d  zName:     */ "m
2950: 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a  ax_page_count",.
2960: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2970: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47    */ PragTyp_PAG
2980: 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20  E_COUNT,.    /* 
2990: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
29a0: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
29b0: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
29c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b       */ 0 },.  {
29d0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
29e0: 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 0a 20  / "mmap_size",. 
29f0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2a00: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d 4d 41 50   */ PragTyp_MMAP
2a10: 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _SIZE,.    /* eP
2a20: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2a30: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2a40: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2a50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2a60: 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  age_count",.    
2a70: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2a80: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f   PragTyp_PAGE_CO
2a90: 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  UNT,.    /* ePra
2aa0: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2ab0: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2ac0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2ad0: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2ae0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2af0: 61 67 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f  age_size",.    /
2b00: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2b10: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
2b20: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
2b30: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2b40: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2b50: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2b60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
2b70: 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  EBUG).  { /* zNa
2b80: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 72 73  me:     */ "pars
2b90: 65 72 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f  er_trace",.    /
2ba0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2bb0: 50 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54  PragTyp_PARSER_T
2bc0: 52 41 43 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  RACE,.    /* ePr
2bd0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2be0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2bf0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2c00: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2c10: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
2c20: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
2c30: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 71 75 65 72  me:     */ "quer
2c40: 79 5f 6f 6e 6c 79 22 2c 0a 20 20 20 20 2f 2a 20  y_only",.    /* 
2c50: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2c60: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
2c70: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2c80: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2c90: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
2ca0: 51 75 65 72 79 4f 6e 6c 79 20 7d 2c 0a 23 65 6e  QueryOnly },.#en
2cb0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
2cc0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54  (SQLITE_OMIT_INT
2cd0: 45 47 52 49 54 59 5f 43 48 45 43 4b 29 0a 20 20  EGRITY_CHECK).  
2ce0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2cf0: 2a 2f 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22  */ "quick_check"
2d00: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2d10: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
2d20: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a  NTEGRITY_CHECK,.
2d30: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2d40: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
2d50: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
2d60: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
2d70: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
2d80: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2d90: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
2da0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2db0: 20 20 20 20 2a 2f 20 22 72 65 61 64 5f 75 6e 63      */ "read_unc
2dc0: 6f 6d 6d 69 74 74 65 64 22 2c 0a 20 20 20 20 2f  ommitted",.    /
2dd0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2de0: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
2df0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2e00: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
2e10: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
2e20: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
2e30: 64 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  d },.  { /* zNam
2e40: 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 63 75 72  e:     */ "recur
2e50: 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 2c 0a  sive_triggers",.
2e60: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2e70: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
2e80: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
2e90: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2ea0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2eb0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
2ec0: 72 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  rs },.#endif.#if
2ed0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2ee0: 48 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f  HAS_CODEC).  { /
2ef0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2f00: 22 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20  "rekey",.    /* 
2f10: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2f20: 61 67 54 79 70 5f 52 45 4b 45 59 2c 0a 20 20 20  agTyp_REKEY,.   
2f30: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2f40: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
2f50: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
2f60: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
2f70: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
2f80: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
2f90: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2fa0: 2f 20 22 72 65 76 65 72 73 65 5f 75 6e 6f 72 64  / "reverse_unord
2fb0: 65 72 65 64 5f 73 65 6c 65 63 74 73 22 2c 0a 20  ered_selects",. 
2fc0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2fd0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2fe0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2ff0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3000: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
3010: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
3020: 65 72 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  er },.#endif.#if
3030: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3040: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
3050: 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20  SION_PRAGMAS).  
3060: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3070: 2a 2f 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69  */ "schema_versi
3080: 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  on",.    /* ePra
3090: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
30a0: 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a  p_HEADER_VALUE,.
30b0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
30c0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
30d0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
30e0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
30f0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3100: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
3110: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3120: 20 20 20 2a 2f 20 22 73 65 63 75 72 65 5f 64 65     */ "secure_de
3130: 6c 65 74 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  lete",.    /* eP
3140: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3150: 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45 54  Typ_SECURE_DELET
3160: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
3170: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3180: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3190: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
31a0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
31b0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
31c0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
31d0: 20 20 20 20 20 2a 2f 20 22 73 68 6f 72 74 5f 63       */ "short_c
31e0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20  olumn_names",.  
31f0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3200: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
3210: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
3220: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3230: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
3240: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
3250: 65 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b  es },.#endif.  {
3260: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3270: 2f 20 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79  / "shrink_memory
3280: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3290: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
32a0: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 2c 0a 20  SHRINK_MEMORY,. 
32b0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
32c0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
32d0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
32e0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
32f0: 20 20 20 2a 2f 20 22 73 6f 66 74 5f 68 65 61 70     */ "soft_heap
3300: 5f 6c 69 6d 69 74 22 2c 0a 20 20 20 20 2f 2a 20  _limit",.    /* 
3310: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3320: 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f  agTyp_SOFT_HEAP_
3330: 4c 49 4d 49 54 2c 0a 20 20 20 20 2f 2a 20 65 50  LIMIT,.    /* eP
3340: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3350: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3360: 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65   */ 0 },.#if !de
3370: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3380: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
3390: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
33a0: 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a  TE_DEBUG).  { /*
33b0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
33c0: 73 71 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  sql_trace",.    
33d0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
33e0: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
33f0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3400: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3410: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
3420: 54 45 5f 53 71 6c 54 72 61 63 65 20 7d 2c 0a 23  TE_SqlTrace },.#
3430: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3440: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3450: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
3460: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
3470: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 74 61 74  me:     */ "stat
3480: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
3490: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
34a0: 5f 53 54 41 54 53 2c 0a 20 20 20 20 2f 2a 20 65  _STATS,.    /* e
34b0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
34c0: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
34d0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
34e0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
34f0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
3500: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3510: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  R_PRAGMAS).  { /
3520: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3530: 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a 20  "synchronous",. 
3540: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3550: 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 59 4e 43   */ PragTyp_SYNC
3560: 48 52 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a 20  HRONOUS,.    /* 
3570: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3580: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3590: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
35a0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
35b0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
35c0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48  (SQLITE_OMIT_SCH
35d0: 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  EMA_PRAGMAS).  {
35e0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
35f0: 2f 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c 0a  / "table_info",.
3600: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3610: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 41 42    */ PragTyp_TAB
3620: 4c 45 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20  LE_INFO,.    /* 
3630: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3640: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3650: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
3660: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3670: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
3680: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
3690: 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  ER_PRAGMAS).  { 
36a0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
36b0: 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a 20   "temp_store",. 
36c0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
36d0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d 50   */ PragTyp_TEMP
36e0: 5f 53 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20 65  _STORE,.    /* e
36f0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3700: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3710: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
3720: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3730: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
3740: 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  tory",.    /* eP
3750: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3760: 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44  Typ_TEMP_STORE_D
3770: 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f 2a  IRECTORY,.    /*
3780: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3790: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
37a0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
37b0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
37c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
37d0: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
37e0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
37f0: 3a 20 20 20 20 20 2a 2f 20 22 75 73 65 72 5f 76  :     */ "user_v
3800: 65 72 73 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20  ersion",.    /* 
3810: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3820: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
3830: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
3840: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3850: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3860: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
3870: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3880: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
3890: 41 53 29 0a 23 69 66 20 64 65 66 69 6e 65 64 28  AS).#if defined(
38a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
38b0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
38c0: 2a 2f 20 22 76 64 62 65 5f 61 64 64 6f 70 74 72  */ "vdbe_addoptr
38d0: 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ace",.    /* ePr
38e0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
38f0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3900: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3910: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3920: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62     */ SQLITE_Vdb
3930: 65 41 64 64 6f 70 54 72 61 63 65 20 7d 2c 0a 20  eAddopTrace },. 
3940: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
3950: 20 2a 2f 20 22 76 64 62 65 5f 64 65 62 75 67 22   */ "vdbe_debug"
3960: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3970: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
3980: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
3990: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
39a0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
39b0: 2f 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  / SQLITE_SqlTrac
39c0: 65 7c 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e|SQLITE_VdbeLis
39d0: 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65  ting|SQLITE_Vdbe
39e0: 54 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20  Trace },.  { /* 
39f0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76  zName:     */ "v
3a00: 64 62 65 5f 65 71 70 22 2c 0a 20 20 20 20 2f 2a  dbe_eqp",.    /*
3a10: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3a20: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3a30: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3a40: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3a50: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3a60: 5f 56 64 62 65 45 51 50 20 7d 2c 0a 20 20 7b 20  _VdbeEQP },.  { 
3a70: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3a80: 20 22 76 64 62 65 5f 6c 69 73 74 69 6e 67 22 2c   "vdbe_listing",
3a90: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3aa0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
3ab0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
3ac0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3ad0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3ae0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
3af0: 69 6e 67 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  ing },.  { /* zN
3b00: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62  ame:     */ "vdb
3b10: 65 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a  e_trace",.    /*
3b20: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3b30: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3b40: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3b50: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3b60: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3b70: 5f 56 64 62 65 54 72 61 63 65 20 7d 2c 0a 23 65  _VdbeTrace },.#e
3b80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20  ndif.#endif.#if 
3b90: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3ba0: 4f 4d 49 54 5f 57 41 4c 29 0a 20 20 7b 20 2f 2a  OMIT_WAL).  { /*
3bb0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3bc0: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
3bd0: 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  nt",.    /* ePra
3be0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3bf0: 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50  p_WAL_AUTOCHECKP
3c00: 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  OINT,.    /* ePr
3c10: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3c20: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3c30: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
3c40: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61  Name:     */ "wa
3c50: 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20  l_checkpoint",. 
3c60: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3c70: 20 2a 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f   */ PragTyp_WAL_
3c80: 43 48 45 43 4b 50 4f 49 4e 54 2c 0a 20 20 20 20  CHECKPOINT,.    
3c90: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
3ca0: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
3cb0: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
3cc0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
3cd0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
3ce0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
3cf0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20  FLAG_PRAGMAS).  
3d00: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3d10: 2a 2f 20 22 77 72 69 74 61 62 6c 65 5f 73 63 68  */ "writable_sch
3d20: 65 6d 61 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ema",.    /* ePr
3d30: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3d40: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3d50: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3d60: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3d70: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 57 72 69     */ SQLITE_Wri
3d80: 74 65 53 63 68 65 6d 61 7c 53 51 4c 49 54 45 5f  teSchema|SQLITE_
3d90: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 7d 2c 0a  RecoveryMode },.
3da0: 23 65 6e 64 69 66 0a 7d 3b 0a 2f 2a 20 4e 75 6d  #endif.};./* Num
3db0: 62 65 72 20 6f 66 20 70 72 61 67 6d 61 73 3a 20  ber of pragmas: 
3dc0: 35 36 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  56 on by default
3dd0: 2c 20 36 39 20 74 6f 74 61 6c 2e 20 2a 2f 0a 2f  , 69 total. */./
3de0: 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 61 75 74  * End of the aut
3df0: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
3e00: 61 74 65 64 20 70 72 61 67 6d 61 20 74 61 62 6c  ated pragma tabl
3e10: 65 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..*************
3e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
3e60: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
3e70: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
3e80: 67 20 61 73 20 61 20 73 61 66 65 74 79 20 6c 65  g as a safety le
3e90: 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30 20 66  vel.  Return 0 f
3ea0: 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72  or OFF,.** 1 for
3eb0: 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e   ON or NORMAL an
3ec0: 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52  d 2 for FULL.  R
3ed0: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
3ee0: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
3ef0: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
3f00: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46  argument.  The F
3f10: 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20 64 69  ULL option is di
3f20: 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74  sallowed.** if t
3f30: 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61  he omitFull para
3f40: 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a  meter it 1..**.*
3f50: 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  * Note that the 
3f60: 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20  values returned 
3f70: 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74 68 61  are one less tha
3f80: 74 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61  t the values tha
3f90: 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 70  t.** should be p
3fa0: 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c 69 74  assed into sqlit
3fb0: 65 33 42 74 72 65 65 53 65 74 53 61 66 65 74 79  e3BtreeSetSafety
3fc0: 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20 69 73  Level().  The is
3fd0: 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70   done.** to supp
3fe0: 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c 20 63  ort legacy SQL c
3ff0: 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65 74 79  ode.  The safety
4000: 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f 20 62   level used to b
4010: 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64  e boolean.** and
4020: 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73 20 6d   older scripts m
4030: 61 79 20 68 61 76 65 20 75 73 65 64 20 6e 75 6d  ay have used num
4040: 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46 20 61  bers 0 for OFF a
4050: 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a  nd 1 for ON..*/.
4060: 73 74 61 74 69 63 20 75 38 20 67 65 74 53 61 66  static u8 getSaf
4070: 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63  etyLevel(const c
4080: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74  har *z, int omit
4090: 46 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29 7b 0a  Full, u8 dflt){.
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
40c0: 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35 36  123456789 123456
40d0: 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69 63 20  789 */.  static 
40e0: 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74  const char zText
40f0: 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79  [] = "onoffalsey
4100: 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20 73  estruefull";.  s
4110: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69  tatic const u8 i
4120: 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20 31  Offset[] = {0, 1
4130: 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20 31  , 2, 4, 9, 12, 1
4140: 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e  6};.  static con
4150: 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20  st u8 iLength[] 
4160: 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20 33  = {2, 2, 3, 5, 3
4170: 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74 69  , 4, 4};.  stati
4180: 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61 6c 75  c const u8 iValu
4190: 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30 2c  e[] =  {1, 0, 0,
41a0: 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20 20   0, 1, 1, 2};.  
41b0: 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20  int i, n;.  if( 
41c0: 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a  sqlite3Isdigit(*
41d0: 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  z) ){.    return
41e0: 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69   (u8)sqlite3Atoi
41f0: 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73  (z);.  }.  n = s
4200: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
4210: 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  );.  for(i=0; i<
4220: 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74  ArraySize(iLengt
4230: 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b 2b  h)-omitFull; i++
4240: 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65 6e 67  ){.    if( iLeng
4250: 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c 69  th[i]==n && sqli
4260: 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a 54 65  te3StrNICmp(&zTe
4270: 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c 7a  xt[iOffset[i]],z
4280: 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ,n)==0 ){.      
4290: 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d  return iValue[i]
42a0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65  ;.    }.  }.  re
42b0: 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a  turn dflt;.}../*
42c0: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
42d0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
42e0: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
42f0: 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33  e..*/.u8 sqlite3
4300: 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74  GetBoolean(const
4310: 20 63 68 61 72 20 2a 7a 2c 20 75 38 20 64 66 6c   char *z, u8 dfl
4320: 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74  t){.  return get
4330: 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c  SafetyLevel(z,1,
4340: 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20  dflt)!=0;.}../* 
4350: 54 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f  The sqlite3GetBo
4360: 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e  olean() function
4370: 20 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65   is used by othe
4380: 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68  r modules but th
4390: 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f  e.** remainder o
43a0: 66 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73  f this file is s
43b0: 70 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d  pecific to PRAGM
43c0: 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53  A processing.  S
43d0: 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65  o omit.** the re
43e0: 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69  st of the file i
43f0: 66 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d  f PRAGMAs are om
4400: 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62  itted from the b
4410: 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  uild..*/.#if !de
4420: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
4430: 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a  T_PRAGMA)../*.**
4440: 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67   Interpret the g
4450: 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61  iven string as a
4460: 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61   locking mode va
4470: 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  lue..*/.static i
4480: 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64  nt getLockingMod
4490: 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29  e(const char *z)
44a0: 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20  {.  if( z ){.   
44b0: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
44c0: 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75  trICmp(z, "exclu
44d0: 73 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20  sive") ) return 
44e0: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
44f0: 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20  E_EXCLUSIVE;.   
4500: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
4510: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61  trICmp(z, "norma
4520: 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47  l") ) return PAG
4530: 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e  ER_LOCKINGMODE_N
4540: 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74  ORMAL;.  }.  ret
4550: 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e  urn PAGER_LOCKIN
4560: 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a  GMODE_QUERY;.}..
4570: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4580: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f  MIT_AUTOVACUUM./
4590: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
45a0: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
45b0: 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  as an auto-vacuu
45c0: 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a  m mode value..**
45d0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
45e0: 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65  g strings, "none
45f0: 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69  ", "full" and "i
4600: 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20  ncremental" are 
4610: 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20  .** acceptable, 
4620: 61 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d  as are their num
4630: 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73  eric equivalents
4640: 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73  : 0, 1 and 2 res
4650: 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74  pectively..*/.st
4660: 61 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f  atic int getAuto
4670: 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61  Vacuum(const cha
4680: 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a  r *z){.  int i;.
4690: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
46a0: 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65  StrICmp(z, "none
46b0: 22 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45  ") ) return BTRE
46c0: 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e  E_AUTOVACUUM_NON
46d0: 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69  E;.  if( 0==sqli
46e0: 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66  te3StrICmp(z, "f
46f0: 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42  ull") ) return B
4700: 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f  TREE_AUTOVACUUM_
4710: 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73  FULL;.  if( 0==s
4720: 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c  qlite3StrICmp(z,
4730: 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20   "incremental") 
4740: 29 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41  ) return BTREE_A
4750: 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a  UTOVACUUM_INCR;.
4760: 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f    i = sqlite3Ato
4770: 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28  i(z);.  return (
4780: 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29  u8)((i>=0&&i<=2)
4790: 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20  ?i:0);.}.#endif 
47a0: 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /* ifndef SQLITE
47b0: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
47c0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
47d0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
47e0: 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74  RAGMAS./*.** Int
47f0: 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e  erpret the given
4800: 20 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d   string as a tem
4810: 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52  p db location. R
4820: 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65  eturn 1 for file
4830: 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f  .** backed tempo
4840: 72 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20  rary databases, 
4850: 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c  2 for the Red-Bl
4860: 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f  ack tree in memo
4870: 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61  ry database.** a
4880: 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20  nd 0 to use the 
4890: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66  compile-time def
48a0: 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  ault..*/.static 
48b0: 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65  int getTempStore
48c0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
48d0: 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27  .  if( z[0]>='0'
48e0: 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b   && z[0]<='2' ){
48f0: 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d  .    return z[0]
4900: 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20   - '0';.  }else 
4910: 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
4920: 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30  mp(z, "file")==0
4930: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31   ){.    return 1
4940: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71  ;.  }else if( sq
4950: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
4960: 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a  "memory")==0 ){.
4970: 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20      return 2;.  
4980: 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72  }else{.    retur
4990: 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69  n 0;.  }.}.#endi
49a0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45  f /* SQLITE_PAGE
49b0: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  R_PRAGMAS */..#i
49c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
49d0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
49e0: 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65  /*.** Invalidate
49f0: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65   temp storage, e
4a00: 69 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74  ither when the t
4a10: 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63  emp storage is c
4a20: 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64  hanged.** from d
4a30: 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20  efault, or when 
4a40: 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74  'file' and the t
4a50: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
4a60: 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a  ory has changed.
4a70: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e  */.static int in
4a80: 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72  validateTempStor
4a90: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
4aa0: 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e){.  sqlite3 *d
4ab0: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a  b = pParse->db;.
4ac0: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d    if( db->aDb[1]
4ad0: 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69  .pBt!=0 ){.    i
4ae0: 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
4af0: 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  it || sqlite3Btr
4b00: 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28  eeIsInReadTrans(
4b10: 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20  db->aDb[1].pBt) 
4b20: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
4b30: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
4b40: 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72   "temporary stor
4b50: 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68  age cannot be ch
4b60: 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20  anged ".        
4b70: 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74  "from within a t
4b80: 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20  ransaction");.  
4b90: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
4ba0: 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
4bb0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43     sqlite3BtreeC
4bc0: 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e  lose(db->aDb[1].
4bd0: 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44  pBt);.    db->aD
4be0: 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20  b[1].pBt = 0;.  
4bf0: 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c    sqlite3ResetAl
4c00: 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
4c10: 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20  tion(db);.  }.  
4c20: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
4c30: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
4c40: 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d  LITE_PAGER_PRAGM
4c50: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
4c60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
4c70: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
4c80: 66 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  f the TEMP datab
4c90: 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f  ase is open, clo
4ca0: 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74  se it and mark t
4cb0: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
4cc0: 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67  ma.** as needing
4cd0: 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69   reloading.  Thi
4ce0: 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77  s must be done w
4cf0: 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51  hen using the SQ
4d00: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a  LITE_TEMP_STORE.
4d10: 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45  ** or DEFAULT_TE
4d20: 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73  MP_STORE pragmas
4d30: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
4d40: 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67  changeTempStorag
4d50: 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  e(Parse *pParse,
4d60: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
4d70: 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e  orageType){.  in
4d80: 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74  t ts = getTempSt
4d90: 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65  ore(zStorageType
4da0: 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  );.  sqlite3 *db
4db0: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
4dc0: 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74   if( db->temp_st
4dd0: 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e  ore==ts ) return
4de0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66   SQLITE_OK;.  if
4df0: 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70  ( invalidateTemp
4e00: 53 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20  Storage( pParse 
4e10: 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29  ) != SQLITE_OK )
4e20: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c  {.    return SQL
4e30: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20  ITE_ERROR;.  }. 
4e40: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20   db->temp_store 
4e50: 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75  = (u8)ts;.  retu
4e60: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
4e70: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
4e80: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a  _PAGER_PRAGMAS *
4e90: 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74  /../*.** Generat
4ea0: 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e  e code to return
4eb0: 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65   a single intege
4ec0: 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74  r value..*/.stat
4ed0: 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69  ic void returnSi
4ee0: 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20 2a 70  ngleInt(Parse *p
4ef0: 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
4f00: 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34 20 76  r *zLabel, i64 v
4f10: 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20 2a 76  alue){.  Vdbe *v
4f20: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
4f30: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69 6e 74  e(pParse);.  int
4f40: 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d   mem = ++pParse-
4f50: 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a 70 49  >nMem;.  i64 *pI
4f60: 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  64 = sqlite3DbMa
4f70: 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65 2d 3e  llocRaw(pParse->
4f80: 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75 65  db, sizeof(value
4f90: 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34 20 29  ));.  if( pI64 )
4fa0: 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 49 36  {.    memcpy(pI6
4fb0: 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a 65 6f  4, &value, sizeo
4fc0: 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d 0a 20  f(value));.  }. 
4fd0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
4fe0: 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20  p4(v, OP_Int64, 
4ff0: 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68 61 72  0, mem, 0, (char
5000: 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54 36 34  *)pI64, P4_INT64
5010: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
5020: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
5030: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  ;.  sqlite3VdbeS
5040: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
5050: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c  COLNAME_NAME, zL
5060: 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53 54 41  abel, SQLITE_STA
5070: 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  TIC);.  sqlite3V
5080: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
5090: 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20  ResultRow, mem, 
50a0: 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65  1);.}.../*.** Se
50b0: 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76  t the safety_lev
50c0: 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66 6c 61  el and pager fla
50d0: 67 73 20 66 6f 72 20 70 61 67 65 72 20 69 44 62  gs for pager iDb
50e0: 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30 0a 2a  .  Or if iDb<0.*
50f0: 2a 20 73 65 74 20 74 68 65 73 65 20 76 61 6c 75  * set these valu
5100: 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67 65 72  es for all pager
5110: 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  s..*/.#ifndef SQ
5120: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
5130: 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63 20 76  PRAGMAS.static v
5140: 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65 72 46  oid setAllPagerF
5150: 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a 64 62  lags(sqlite3 *db
5160: 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75 74  ){.  if( db->aut
5170: 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 44  oCommit ){.    D
5180: 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61 44 62  b *pDb = db->aDb
5190: 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 64 62  ;.    int n = db
51a0: 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73 65 72  ->nDb;.    asser
51b0: 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53  t( SQLITE_FullFS
51c0: 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c 4c 46  ync==PAGER_FULLF
51d0: 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65  SYNC );.    asse
51e0: 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  rt( SQLITE_CkptF
51f0: 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f  ullFSync==PAGER_
5200: 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 29  CKPT_FULLFSYNC )
5210: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51  ;.    assert( SQ
5220: 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3d  LITE_CacheSpill=
5230: 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c  =PAGER_CACHESPIL
5240: 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  L );.    assert(
5250: 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e   (PAGER_FULLFSYN
5260: 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54 5f 46  C | PAGER_CKPT_F
5270: 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52  ULLFSYNC | PAGER
5280: 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20 20 20  _CACHESPILL).   
5290: 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20 50 41            ==  PA
52a0: 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 20 29  GER_FLAGS_MASK )
52b0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
52c0: 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c  Db->safety_level
52d0: 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f   & PAGER_SYNCHRO
52e0: 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44 62 2d  NOUS_MASK)==pDb-
52f0: 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 29 3b  >safety_level );
5300: 0a 20 20 20 20 77 68 69 6c 65 28 20 28 6e 2d 2d  .    while( (n--
5310: 29 20 3e 20 30 20 29 7b 0a 20 20 20 20 20 20 69  ) > 0 ){.      i
5320: 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20  f( pDb->pBt ){. 
5330: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
5340: 72 65 65 53 65 74 50 61 67 65 72 46 6c 61 67 73  reeSetPagerFlags
5350: 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20 20 20  (pDb->pBt,.     
5360: 20 20 20 20 20 20 20 20 20 20 20 20 70 44 62 2d              pDb-
5370: 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 7c 20  >safety_level | 
5380: 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50 41 47  (db->flags & PAG
5390: 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29 20 29  ER_FLAGS_MASK) )
53a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
53b0: 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  pDb++;.    }.  }
53c0: 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  .}.#else.# defin
53d0: 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61  e setAllPagerFla
53e0: 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20  gs(X)  /* no-op 
53f0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  */.#endif.../*.*
5400: 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d 61 6e  * Return a human
5410: 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65 20 66  -readable name f
5420: 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  or a constraint 
5430: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74 69 6f  resolution actio
5440: 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  n..*/.#ifndef SQ
5450: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
5460: 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63 6f 6e  N_KEY.static con
5470: 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f 6e 4e  st char *actionN
5480: 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29 7b 0a  ame(u8 action){.
5490: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e    const char *zN
54a0: 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28 20 61  ame;.  switch( a
54b0: 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63 61 73  ction ){.    cas
54c0: 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20 20 7a  e OE_SetNull:  z
54d0: 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55 4c 4c  Name = "SET NULL
54e0: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
54f0: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74  .    case OE_Set
5500: 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  Dflt:  zName = "
5510: 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20 20 20  SET DEFAULT";   
5520: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
5530: 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20 20 7a  e OE_Cascade:  z
5540: 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44 45 22  Name = "CASCADE"
5550: 3b 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;         break;
5560: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52 65 73  .    case OE_Res
5570: 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d 20 22  trict: zName = "
5580: 52 45 53 54 52 49 43 54 22 3b 20 20 20 20 20 20  RESTRICT";      
5590: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
55a0: 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20 7a  ault:          z
55b0: 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54 49 4f  Name = "NO ACTIO
55c0: 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20 20 20  N";  .          
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65              asse
55e0: 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45 5f 4e  rt( action==OE_N
55f0: 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a 20 20  one ); break;.  
5600: 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65  }.  return zName
5610: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a  ;.}.#endif.../*.
5620: 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65 4d 6f  ** Parameter eMo
5630: 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f  de must be one o
5640: 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52  f the PAGER_JOUR
5650: 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73  NALMODE_XXX cons
5660: 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e 65 64  tants.** defined
5670: 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54 68 69   in pager.h. Thi
5680: 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72  s function retur
5690: 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  ns the associate
56a0: 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a 20 6a  d lowercase.** j
56b0: 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61 6d 65  ournal-mode name
56c0: 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20  ..*/.const char 
56d0: 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d  *sqlite3JournalM
56e0: 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d 6f 64  odename(int eMod
56f0: 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63 68 61  e){.  static cha
5700: 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f 64 65  r * const azMode
5710: 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 22  Name[] = {.    "
5720: 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73 69 73  delete", "persis
5730: 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72 75 6e  t", "off", "trun
5740: 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79 22 0a  cate", "memory".
5750: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5760: 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c 20 22  MIT_WAL.     , "
5770: 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20 7d 3b  wal".#endif.  };
5780: 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52  .  assert( PAGER
5790: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c  _JOURNALMODE_DEL
57a0: 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ETE==0 );.  asse
57b0: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
57c0: 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d 3d 31  LMODE_PERSIST==1
57d0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   );.  assert( PA
57e0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
57f0: 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73 73 65  OFF==2 );.  asse
5800: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
5810: 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 3d 3d  LMODE_TRUNCATE==
5820: 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50  3 );.  assert( P
5830: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
5840: 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a 20 20  _MEMORY==4 );.  
5850: 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f  assert( PAGER_JO
5860: 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d 3d 35  URNALMODE_WAL==5
5870: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4d   );.  assert( eM
5880: 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64 65 3c  ode>=0 && eMode<
5890: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64  =ArraySize(azMod
58a0: 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69 66 28  eName) );..  if(
58b0: 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53 69 7a   eMode==ArraySiz
58c0: 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 20  e(azModeName) ) 
58d0: 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75  return 0;.  retu
58e0: 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 65 4d  rn azModeName[eM
58f0: 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50  ode];.}../*.** P
5900: 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d 61 20  rocess a pragma 
5910: 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a 2a 0a  statement.  .**.
5920: 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65 20 6f  ** Pragmas are o
5930: 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a 2a 0a  f this form:.**.
5940: 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41 20 5b  **      PRAGMA [
5950: 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b 3d 20  database.]id [= 
5960: 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  value].**.** The
5970: 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69 67 68   identifier migh
5980: 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74 72 69  t also be a stri
5990: 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69  ng.  The value i
59a0: 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e 64 0a  s a string, and.
59b0: 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c 20 6f  ** identifier, o
59c0: 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20  r a number.  If 
59d0: 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74 72 75  minusFlag is tru
59e0: 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  e, then the valu
59f0: 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62 65 72  e is.** a number
5a00: 20 74 68 61 74 20 77 61 73 20 70 72 65 63 65 64   that was preced
5a10: 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20 73 69  ed by a minus si
5a20: 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  gn..**.** If the
5a30: 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 22 64   left side is "d
5a40: 61 74 61 62 61 73 65 2e 69 64 22 20 74 68 65 6e  atabase.id" then
5a50: 20 70 49 64 31 20 69 73 20 74 68 65 20 64 61 74   pId1 is the dat
5a60: 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20 61 6e  abase name.** an
5a70: 64 20 70 49 64 32 20 69 73 20 74 68 65 20 69 64  d pId2 is the id
5a80: 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74 20 73  .  If the left s
5a90: 69 64 65 20 69 73 20 6a 75 73 74 20 22 69 64 22  ide is just "id"
5aa0: 20 74 68 65 6e 20 70 49 64 31 20 69 73 20 74 68   then pId1 is th
5ab0: 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49 64 32  e.** id and pId2
5ac0: 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20 73 74   is any empty st
5ad0: 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71  ring..*/.void sq
5ae0: 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20 20 50  lite3Pragma(.  P
5af0: 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 0a 20  arse *pParse, . 
5b00: 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20 20 20   Token *pId1,   
5b10: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 70 61       /* First pa
5b20: 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e  rt of [database.
5b30: 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20 54  ]id field */.  T
5b40: 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20 20  oken *pId2,     
5b50: 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61 72     /* Second par
5b60: 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e 5d  t of [database.]
5b70: 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c  id field, or NUL
5b80: 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56  L */.  Token *pV
5b90: 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f  alue,      /* To
5ba0: 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c  ken for <value>,
5bb0: 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e   or NULL */.  in
5bc0: 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20  t minusFlag     
5bd0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27    /* True if a '
5be0: 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64 65 64  -' sign preceded
5bf0: 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20   <value> */.){. 
5c00: 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30   char *zLeft = 0
5c10: 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74  ;       /* Nul-t
5c20: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
5c30: 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20  string <id> */. 
5c40: 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20   char *zRight = 
5c50: 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74  0;      /* Nul-t
5c60: 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20  erminated UTF-8 
5c70: 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20  string <value>, 
5c80: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e  or NULL */.  con
5c90: 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30  st char *zDb = 0
5ca0: 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62  ;   /* The datab
5cb0: 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f  ase name */.  To
5cc0: 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20  ken *pId;       
5cd0: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
5ce0: 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f  to <id> token */
5cf0: 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b  .  char *aFcntl[
5d00: 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67  4];       /* Arg
5d10: 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f  ument to SQLITE_
5d20: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a  FCNTL_PRAGMA */.
5d30: 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
5d40: 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
5d50: 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c  base index for <
5d60: 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69  database> */.  i
5d70: 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64  nt lwr, upr, mid
5d80: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42  ;           /* B
5d90: 69 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f 75  inary search bou
5da0: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  nds */.  int rc;
5db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5dc0: 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20        /* return 
5dd0: 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54  value form SQLIT
5de0: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
5df0: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  /.  sqlite3 *db 
5e00: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20  = pParse->db;   
5e10: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
5e20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
5e30: 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20   Db *pDb;       
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
5e50: 20 54 68 65 20 73 70 65 63 69 66 69 63 20 64 61   The specific da
5e60: 74 61 62 61 73 65 20 62 65 69 6e 67 20 70 72 61  tabase being pra
5e70: 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20  gmaed */.  Vdbe 
5e80: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
5e90: 64 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a  dbe(pParse);  /*
5ea0: 20 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   Prepared statem
5eb0: 65 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20 76 3d  ent */..  if( v=
5ec0: 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 73  =0 ) return;.  s
5ed0: 71 6c 69 74 65 33 56 64 62 65 52 75 6e 4f 6e 6c  qlite3VdbeRunOnl
5ee0: 79 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50 61 72  yOnce(v);.  pPar
5ef0: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 0a 20  se->nMem = 2;.. 
5f00: 20 2f 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68   /* Interpret th
5f10: 65 20 5b 64 61 74 61 62 61 73 65 2e 5d 20 70 61  e [database.] pa
5f20: 72 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61  rt of the pragma
5f30: 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44 62 20   statement. iDb 
5f40: 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65  is the.  ** inde
5f50: 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  x of the databas
5f60: 65 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73  e this pragma is
5f70: 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64 20 74   being applied t
5f80: 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e 20 2a  o in db.aDb[]. *
5f90: 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69 74 65  /.  iDb = sqlite
5fa0: 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70 50 61  3TwoPartName(pPa
5fb0: 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64 32 2c  rse, pId1, pId2,
5fc0: 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20 69 44   &pId);.  if( iD
5fd0: 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  b<0 ) return;.  
5fe0: 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  pDb = &db->aDb[i
5ff0: 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  Db];..  /* If th
6000: 65 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 20  e temp database 
6010: 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69 63 69  has been explici
6020: 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70 61 72  tly named as par
6030: 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 70  t of the .  ** p
6040: 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75 72 65  ragma, make sure
6050: 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a 20 20   it is open. .  
6060: 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d 31 20  */.  if( iDb==1 
6070: 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  && sqlite3OpenTe
6080: 6d 70 44 61 74 61 62 61 73 65 28 70 50 61 72 73  mpDatabase(pPars
6090: 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  e) ){.    return
60a0: 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74 20 3d  ;.  }..  zLeft =
60b0: 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d   sqlite3NameFrom
60c0: 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29 3b 0a  Token(db, pId);.
60d0: 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29 20 72    if( !zLeft ) r
60e0: 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d 69 6e  eturn;.  if( min
60f0: 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20 7a 52  usFlag ){.    zR
6100: 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4d 50  ight = sqlite3MP
6110: 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54 22 2c  rintf(db, "-%T",
6120: 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73   pValue);.  }els
6130: 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20  e{.    zRight = 
6140: 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
6150: 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75 65 29  oken(db, pValue)
6160: 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28  ;.  }..  assert(
6170: 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62 20 3d   pId2 );.  zDb =
6180: 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70 44 62   pId2->n>0 ? pDb
6190: 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20 20 69  ->zName : 0;.  i
61a0: 66 28 20 73 71 6c 69 74 65 33 41 75 74 68 43 68  f( sqlite3AuthCh
61b0: 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51 4c 49  eck(pParse, SQLI
61c0: 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65 66 74  TE_PRAGMA, zLeft
61d0: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 20 29  , zRight, zDb) )
61e0: 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d  {.    goto pragm
61f0: 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  a_out;.  }..  /*
6200: 20 53 65 6e 64 20 61 6e 20 53 51 4c 49 54 45 5f   Send an SQLITE_
6210: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c  FCNTL_PRAGMA fil
6220: 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  e-control to the
6230: 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 0a   underlying VFS.
6240: 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e    ** connection.
6250: 20 20 49 66 20 69 74 20 72 65 74 75 72 6e 73 20    If it returns 
6260: 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65 6e 20  SQLITE_OK, then 
6270: 61 73 73 75 6d 65 20 74 68 61 74 20 74 68 65 20  assume that the 
6280: 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c 65 64  VFS.  ** handled
6290: 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20   the pragma and 
62a0: 67 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d 6f 70  generate a no-op
62b0: 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
62c0: 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63 6e  ent..  */.  aFcn
62d0: 74 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46 63  tl[0] = 0;.  aFc
62e0: 6e 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a  ntl[1] = zLeft;.
62f0: 20 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52    aFcntl[2] = zR
6300: 69 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 33  ight;.  aFcntl[3
6310: 5d 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73  ] = 0;.  db->bus
6320: 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d  yHandler.nBusy =
6330: 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
6340: 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
6350: 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f  db, zDb, SQLITE_
6360: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28 76  FCNTL_PRAGMA, (v
6370: 6f 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20 20  oid*)aFcntl);.  
6380: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
6390: 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63  K ){.    if( aFc
63a0: 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ntl[0] ){.      
63b0: 69 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72  int mem = ++pPar
63c0: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 20 20  se->nMem;.      
63d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
63e0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
63f0: 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46 63 6e   0, mem, 0, aFcn
6400: 74 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20  tl[0], 0);.     
6410: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
6420: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
6430: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6440: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
6450: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72  COLNAME_NAME, "r
6460: 65 73 75 6c 74 22 2c 20 53 51 4c 49 54 45 5f 53  esult", SQLITE_S
6470: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
6480: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
6490: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
64a0: 20 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20 20 20   mem, 1);.      
64b0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63  sqlite3_free(aFc
64c0: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20  ntl[0]);.    }. 
64d0: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
64e0: 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63  ut;.  }.  if( rc
64f0: 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e  !=SQLITE_NOTFOUN
6500: 44 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63  D ){.    if( aFc
6510: 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ntl[0] ){.      
6520: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
6530: 70 50 61 72 73 65 2c 20 22 25 73 22 2c 20 61 46  pParse, "%s", aF
6540: 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20  cntl[0]);.      
6550: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63  sqlite3_free(aFc
6560: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20  ntl[0]);.    }. 
6570: 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b     pParse->nErr+
6580: 2b 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72  +;.    pParse->r
6590: 63 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f 74 6f  c = rc;.    goto
65a0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
65b0: 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68  ..  /* Locate th
65c0: 65 20 70 72 61 67 6d 61 20 69 6e 20 74 68 65 20  e pragma in the 
65d0: 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a 2f 0a  lookup table */.
65e0: 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72    lwr = 0;.  upr
65f0: 20 3d 20 41 72 72 61 79 53 69 7a 65 28 61 50 72   = ArraySize(aPr
6600: 61 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a 20 20  agmaNames)-1;.  
6610: 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70 72 20  while( lwr<=upr 
6620: 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28 6c 77  ){.    mid = (lw
6630: 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20 72 63  r+upr)/2;.    rc
6640: 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63   = sqlite3_stric
6650: 6d 70 28 7a 4c 65 66 74 2c 20 61 50 72 61 67 6d  mp(zLeft, aPragm
6660: 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d  aNames[mid].zNam
6670: 65 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  e);.    if( rc==
6680: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69  0 ) break;.    i
6690: 66 28 20 72 63 3c 30 20 29 7b 0a 20 20 20 20 20  f( rc<0 ){.     
66a0: 20 75 70 72 20 3d 20 6d 69 64 20 2d 20 31 3b 0a   upr = mid - 1;.
66b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
66c0: 20 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31 3b 0a   lwr = mid + 1;.
66d0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
66e0: 6c 77 72 3e 75 70 72 20 29 20 67 6f 74 6f 20 70  lwr>upr ) goto p
66f0: 72 61 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20 2f 2a  ragma_out;..  /*
6700: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64   Make sure the d
6710: 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69  atabase schema i
6720: 73 20 6c 6f 61 64 65 64 20 69 66 20 74 68 65 20  s loaded if the 
6730: 70 72 61 67 6d 61 20 72 65 71 75 69 72 65 73 20  pragma requires 
6740: 74 68 61 74 20 2a 2f 0a 20 20 69 66 28 20 28 61  that */.  if( (a
6750: 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d  PragmaNames[mid]
6760: 2e 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61  .mPragFlag & Pra
6770: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
6780: 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  )!=0 ){.    if( 
6790: 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
67a0: 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f  a(pParse) ) goto
67b0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
67c0: 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74  ..  /* Jump to t
67d0: 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 70  he appropriate p
67e0: 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f  ragma handler */
67f0: 0a 20 20 73 77 69 74 63 68 28 20 61 50 72 61 67  .  switch( aPrag
6800: 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65 50 72  maNames[mid].ePr
6810: 61 67 54 79 70 20 29 7b 0a 20 20 0a 23 69 66 20  agTyp ){.  .#if 
6820: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
6830: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
6840: 41 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  AS) && !defined(
6850: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
6860: 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20 20 2a  ECATED).  /*.  *
6870: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
6880: 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63  ase.]default_cac
6890: 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  he_size.  **  PR
68a0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
68b0: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
68c0: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
68d0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
68e0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
68f0: 74 20 70 65 72 73 69 73 74 65 6e 74 20 73 65 74  t persistent set
6900: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
6910: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
6920: 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72 65  e.  The value re
6930: 74 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d 61  turned is the ma
6940: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a  ximum number of.
6950: 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74 68    ** pages in th
6960: 65 20 70 61 67 65 20 63 61 63 68 65 2e 20 20 54  e page cache.  T
6970: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73  he second form s
6980: 65 74 73 20 62 6f 74 68 20 74 68 65 20 63 75 72  ets both the cur
6990: 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20 63  rent.  ** page c
69a0: 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 20  ache size value 
69b0: 61 6e 64 20 74 68 65 20 70 65 72 73 69 73 74 65  and the persiste
69c0: 6e 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69  nt page cache si
69d0: 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73 74  ze value.  ** st
69e0: 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61  ored in the data
69f0: 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a  base file..  **.
6a00: 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69    ** Older versi
6a10: 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 6f  ons of SQLite wo
6a20: 75 6c 64 20 73 65 74 20 74 68 65 20 64 65 66 61  uld set the defa
6a30: 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20 74  ult cache size t
6a40: 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69 76  o a.  ** negativ
6a50: 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64 69  e number to indi
6a60: 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73  cate synchronous
6a70: 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61 79  =OFF.  These day
6a80: 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20  s, synchronous. 
6a90: 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f 6e   ** is always on
6aa0: 20 62 79 20 64 65 66 61 75 6c 74 20 72 65 67 61   by default rega
6ab0: 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73 69  rdless of the si
6ac0: 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c  gn of the defaul
6ad0: 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a  t cache.  ** siz
6ae0: 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75 65  e.  But continue
6af0: 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62 73   to take the abs
6b00: 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74  olute value of t
6b10: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
6b20: 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68 69  .  ** size of hi
6b30: 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74 69  storical compati
6b40: 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20 63  bility..  */.  c
6b50: 61 73 65 20 50 72 61 67 54 79 70 5f 44 45 46 41  ase PragTyp_DEFA
6b60: 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20  ULT_CACHE_SIZE: 
6b70: 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
6b80: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
6b90: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
6ba0: 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63  2);.    static c
6bb0: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
6bc0: 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d  getCacheSize[] =
6bd0: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54 72   {.      { OP_Tr
6be0: 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30 2c  ansaction, 0, 0,
6bf0: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20          0},     
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c10: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
6c20: 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
6c30: 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20  e,  0, 1,       
6c40: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
6c50: 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20  ACHE_SIZE},  /* 
6c60: 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  1 */.      { OP_
6c70: 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20  IfPos,       1, 
6c80: 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  8,        0},.  
6c90: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
6ca0: 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20 20  ,     0, 2,     
6cb0: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
6cc0: 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20 31  P_Subtract,    1
6cd0: 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c 0a  , 2,        1},.
6ce0: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73        { OP_IfPos
6cf0: 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20  ,       1, 8,   
6d00: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
6d10: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
6d20: 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   0, 1,        0}
6d30: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
6d40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20 2a            /* 6 *
6d50: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f  /.      { OP_Noo
6d60: 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20  p,        0, 0, 
6d70: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
6d80: 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
6d90: 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20 20     1, 1,        
6da0: 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69  0},.    };.    i
6db0: 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 73 71 6c  nt addr;.    sql
6dc0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
6dd0: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  e(v, iDb);.    i
6de0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
6df0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6e00: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
6e10: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
6e20: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
6e30: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
6e40: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 53   "cache_size", S
6e50: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
6e60: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
6e70: 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 61 64  m += 2;.      ad
6e80: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
6e90: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
6ea0: 61 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53  aySize(getCacheS
6eb0: 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53 69  ize), getCacheSi
6ec0: 7a 65 2c 69 4c 6e 29 3b 0a 20 20 20 20 20 20 73  ze,iLn);.      s
6ed0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
6ee0: 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29  P1(v, addr, iDb)
6ef0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6f00: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
6f10: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
6f20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
6f30: 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 36  angeP1(v, addr+6
6f40: 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  , SQLITE_DEFAULT
6f50: 5f 43 41 43 48 45 5f 53 49 5a 45 29 3b 0a 20 20  _CACHE_SIZE);.  
6f60: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
6f70: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
6f80: 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65  3AbsInt32(sqlite
6f90: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
6fa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67        sqlite3Beg
6fb0: 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e  inWriteOperation
6fc0: 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29  (pParse, 0, iDb)
6fd0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6fe0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
6ff0: 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c 20 31  Integer, size, 1
7000: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
7010: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
7020: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c  _SetCookie, iDb,
7030: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
7040: 41 43 48 45 5f 53 49 5a 45 2c 20 31 29 3b 0a 20  ACHE_SIZE, 1);. 
7050: 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
7060: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
7070: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
7080: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53  );.      pDb->pS
7090: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
70a0: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20  e = size;.      
70b0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
70c0: 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42  acheSize(pDb->pB
70d0: 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  t, pDb->pSchema-
70e0: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
70f0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
7100: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51   }.#endif /* !SQ
7110: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
7120: 50 52 41 47 4d 41 53 20 26 26 20 21 53 51 4c 49  PRAGMAS && !SQLI
7130: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
7140: 45 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69  ED */..#if !defi
7150: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
7160: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
7170: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
7180: 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65   [database.]page
7190: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
71a0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61  MA [database.]pa
71b0: 67 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  ge_size=N.  **. 
71c0: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
71d0: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
71e0: 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66  urrent setting f
71f0: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  or the.  ** data
7200: 62 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 69  base page size i
7210: 6e 20 62 79 74 65 73 2e 20 20 54 68 65 20 73 65  n bytes.  The se
7220: 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 74  cond form sets t
7230: 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  he.  ** database
7240: 20 70 61 67 65 20 73 69 7a 65 20 76 61 6c 75 65   page size value
7250: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e  .  The value can
7260: 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 0a   only be set if.
7270: 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73    ** the databas
7280: 65 20 68 61 73 20 6e 6f 74 20 79 65 74 20 62 65  e has not yet be
7290: 65 6e 20 63 72 65 61 74 65 64 2e 0a 20 20 2a 2f  en created..  */
72a0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
72b0: 50 41 47 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20  PAGE_SIZE: {.   
72c0: 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44   Btree *pBt = pD
72d0: 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65  b->pBt;.    asse
72e0: 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20  rt( pBt!=0 );.  
72f0: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
7300: 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20  .      int size 
7310: 3d 20 41 4c 57 41 59 53 28 70 42 74 29 20 3f 20  = ALWAYS(pBt) ? 
7320: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 50  sqlite3BtreeGetP
7330: 61 67 65 53 69 7a 65 28 70 42 74 29 20 3a 20 30  ageSize(pBt) : 0
7340: 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  ;.      returnSi
7350: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
7360: 22 70 61 67 65 5f 73 69 7a 65 22 2c 20 73 69 7a  "page_size", siz
7370: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
7380: 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63 20 6d       /* Malloc m
7390: 61 79 20 66 61 69 6c 20 77 68 65 6e 20 73 65 74  ay fail when set
73a0: 74 69 6e 67 20 74 68 65 20 70 61 67 65 2d 73 69  ting the page-si
73b0: 7a 65 2c 20 61 73 20 74 68 65 72 65 20 69 73 20  ze, as there is 
73c0: 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20 20 20  an internal.    
73d0: 20 20 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74    ** buffer that
73e0: 20 74 68 65 20 70 61 67 65 72 20 6d 6f 64 75 6c   the pager modul
73f0: 65 20 72 65 73 69 7a 65 73 20 75 73 69 6e 67 20  e resizes using 
7400: 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28  sqlite3_realloc(
7410: 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
7420: 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69    db->nextPagesi
7430: 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69  ze = sqlite3Atoi
7440: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
7450: 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  if( SQLITE_NOMEM
7460: 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  ==sqlite3BtreeSe
7470: 74 50 61 67 65 53 69 7a 65 28 70 42 74 2c 20 64  tPageSize(pBt, d
7480: 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 2c  b->nextPagesize,
7490: 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20 20 20 20  -1,0) ){.       
74a0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
74b0: 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  d = 1;.      }. 
74c0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
74d0: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
74e0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
74f0: 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a  .]secure_delete.
7500: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7510: 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64  tabase.]secure_d
7520: 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a  elete=ON/OFF.  *
7530: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
7540: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
7550: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
7560: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73  g for the.  ** s
7570: 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61  ecure_delete fla
7580: 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  g.  The second f
7590: 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20  orm changes the 
75a0: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20  secure_delete.  
75b0: 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20  ** flag setting 
75c0: 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e  and reports then
75d0: 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20  ew value..  */. 
75e0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 45   case PragTyp_SE
75f0: 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20  CURE_DELETE: {. 
7600: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
7610: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e  pDb->pBt;.    in
7620: 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73  t b = -1;.    as
7630: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
7640: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
7650: 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69  {.      b = sqli
7660: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
7670: 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a  ight, 0);.    }.
7680: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
7690: 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20  =0 && b>=0 ){.  
76a0: 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20      int ii;.    
76b0: 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
76c0: 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
76d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
76e0: 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28  reeSecureDelete(
76f0: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
7700: 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   b);.      }.   
7710: 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74   }.    b = sqlit
7720: 65 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c  e3BtreeSecureDel
7730: 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20  ete(pBt, b);.   
7740: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
7750: 28 70 50 61 72 73 65 2c 20 22 73 65 63 75 72 65  (pParse, "secure
7760: 5f 64 65 6c 65 74 65 22 2c 20 62 29 3b 0a 20 20  _delete", b);.  
7770: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
7780: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
7790: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70  [database.]max_p
77a0: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 20 20  age_count.  **  
77b0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
77c0: 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74  .]max_page_count
77d0: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
77e0: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
77f0: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
7800: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
7810: 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d    ** maximum num
7820: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
7830: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
7840: 65 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20 73 65  e.  The .  ** se
7850: 63 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65 6d 70  cond form attemp
7860: 74 73 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69  ts to change thi
7870: 73 20 73 65 74 74 69 6e 67 2e 20 20 42 6f 74 68  s setting.  Both
7880: 0a 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75  .  ** forms retu
7890: 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  rn the current s
78a0: 65 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a  etting..  **.  *
78b0: 2a 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76  * The absolute v
78c0: 61 6c 75 65 20 6f 66 20 4e 20 69 73 20 75 73 65  alue of N is use
78d0: 64 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f  d.  This is undo
78e0: 63 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d 69 67  cumented and mig
78f0: 68 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20  ht.  ** change. 
7900: 20 54 68 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73   The only purpos
7910: 65 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20  e is to provide 
7920: 61 6e 20 65 61 73 79 20 77 61 79 20 74 6f 20 74  an easy way to t
7930: 65 73 74 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c  est.  ** the sql
7940: 69 74 65 33 41 62 73 49 6e 74 33 32 28 29 20 66  ite3AbsInt32() f
7950: 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20  unction..  **.  
7960: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
7970: 62 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75 6e 74  base.]page_count
7980: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
7990: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
79a0: 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 70 65  pages in the spe
79b0: 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 2e  cified database.
79c0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
79d0: 67 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e 54 3a  gTyp_PAGE_COUNT:
79e0: 20 7b 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b   {.    int iReg;
79f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65  .    sqlite3Code
7a00: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
7a10: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  rse, iDb);.    i
7a20: 52 65 67 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Reg = ++pParse->
7a30: 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20 73 71  nMem;.    if( sq
7a40: 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65  lite3Tolower(zLe
7a50: 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b 0a 20  ft[0])=='p' ){. 
7a60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
7a70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50 61 67  AddOp2(v, OP_Pag
7a80: 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69 52 65  ecount, iDb, iRe
7a90: 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  g);.    }else{. 
7aa0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
7ab0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 61 78  AddOp3(v, OP_Max
7ac0: 50 67 63 6e 74 2c 20 69 44 62 2c 20 69 52 65 67  Pgcnt, iDb, iReg
7ad0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
7ae0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
7af0: 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74  e3AbsInt32(sqlit
7b00: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 29  e3Atoi(zRight)))
7b10: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
7b20: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
7b30: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 69   OP_ResultRow, i
7b40: 52 65 67 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  Reg, 1);.    sql
7b50: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
7b60: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71  ls(v, 1);.    sq
7b70: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
7b80: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
7b90: 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53  E_NAME, zLeft, S
7ba0: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
7bb0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
7bc0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
7bd0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c  GMA [database.]l
7be0: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a 2a  ocking_mode.  **
7bf0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
7c00: 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  se.]locking_mode
7c10: 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75   = (normal|exclu
7c20: 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73  sive).  */.  cas
7c30: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e  e PragTyp_LOCKIN
7c40: 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f  G_MODE: {.    co
7c50: 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d  nst char *zRet =
7c60: 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69   "normal";.    i
7c70: 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f  nt eMode = getLo
7c80: 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74  ckingMode(zRight
7c90: 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32  );..    if( pId2
7ca0: 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d  ->n==0 && eMode=
7cb0: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
7cc0: 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20  DE_QUERY ){.    
7cd0: 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41    /* Simple "PRA
7ce0: 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  GMA locking_mode
7cf0: 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  ;" statement. Th
7d00: 69 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f  is is a query fo
7d10: 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63  r.      ** the c
7d20: 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c  urrent default l
7d30: 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69  ocking mode (whi
7d40: 63 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72  ch may be differ
7d50: 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20  ent to.      ** 
7d60: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
7d70: 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   of the main dat
7d80: 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f  abase)..      */
7d90: 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64  .      eMode = d
7da0: 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b  b->dfltLockMode;
7db0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
7dc0: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b    Pager *pPager;
7dd0: 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d  .      if( pId2-
7de0: 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  >n==0 ){.       
7df0: 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74   /* This indicat
7e00: 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62  es that no datab
7e10: 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65  ase name was spe
7e20: 63 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20  cified as part. 
7e30: 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65         ** of the
7e40: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e   PRAGMA command.
7e50: 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68   In this case th
7e60: 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d  e locking-mode m
7e70: 75 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a  ust be.        *
7e80: 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74  * set on all att
7e90: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c  ached databases,
7ea0: 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20   as well as the 
7eb0: 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20  main db file..  
7ec0: 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20        **.       
7ed0: 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71   ** Also, the sq
7ee0: 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f  lite3.dfltLockMo
7ef0: 64 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  de variable is s
7f00: 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20  et so that.     
7f10: 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71     ** any subseq
7f20: 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20  uently attached 
7f30: 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75  databases also u
7f40: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64  se the specified
7f50: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b  .        ** lock
7f60: 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20  ing mode..      
7f70: 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74    */.        int
7f80: 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73   ii;.        ass
7f90: 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44  ert(pDb==&db->aD
7fa0: 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66  b[0]);.        f
7fb0: 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e  or(ii=2; ii<db->
7fc0: 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20  nDb; ii++){.    
7fd0: 20 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73        pPager = s
7fe0: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
7ff0: 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74  (db->aDb[ii].pBt
8000: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
8010: 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67  ite3PagerLocking
8020: 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f  Mode(pPager, eMo
8030: 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  de);.        }. 
8040: 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c         db->dfltL
8050: 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d  ockMode = (u8)eM
8060: 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ode;.      }.   
8070: 20 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69     pPager = sqli
8080: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
8090: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65  b->pBt);.      e
80a0: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61  Mode = sqlite3Pa
80b0: 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70  gerLockingMode(p
80c0: 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20  Pager, eMode);. 
80d0: 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74     }..    assert
80e0: 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  ( eMode==PAGER_L
80f0: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41  OCKINGMODE_NORMA
8100: 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  L.            ||
8110: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
8120: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
8130: 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65  IVE );.    if( e
8140: 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b  Mode==PAGER_LOCK
8150: 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56  INGMODE_EXCLUSIV
8160: 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20  E ){.      zRet 
8170: 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20  = "exclusive";. 
8180: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
8190: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
81a0: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
81b0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
81c0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
81d0: 4d 45 2c 20 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ME, "locking_mod
81e0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
81f0: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
8200: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
8210: 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
8220: 2c 20 7a 52 65 74 2c 20 30 29 3b 0a 20 20 20 20  , zRet, 0);.    
8230: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8240: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
8250: 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72  w, 1, 1);.    br
8260: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
8270: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
8280: 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d  abase.]journal_m
8290: 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ode.  **  PRAGMA
82a0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72   [database.]jour
82b0: 6e 61 6c 5f 6d 6f 64 65 20 3d 0a 20 20 2a 2a 20  nal_mode =.  ** 
82c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82d0: 20 20 20 20 20 28 64 65 6c 65 74 65 7c 70 65 72       (delete|per
82e0: 73 69 73 74 7c 6f 66 66 7c 74 72 75 6e 63 61 74  sist|off|truncat
82f0: 65 7c 6d 65 6d 6f 72 79 7c 77 61 6c 7c 6f 66 66  e|memory|wal|off
8300: 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ).  */.  case Pr
8310: 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f  agTyp_JOURNAL_MO
8320: 44 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 65 4d  DE: {.    int eM
8330: 6f 64 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  ode;        /* O
8340: 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f  ne of the PAGER_
8350: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
8360: 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20 20 20 20 69  symbols */.    i
8370: 6e 74 20 69 69 3b 20 20 20 20 20 20 20 20 20 20  nt ii;          
8380: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
8390: 20 2a 2f 0a 0a 20 20 20 20 73 71 6c 69 74 65 33   */..    sqlite3
83a0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
83b0: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
83c0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
83d0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
83e0: 4d 45 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ME, "journal_mod
83f0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
8400: 43 29 3b 0a 0a 20 20 20 20 69 66 28 20 7a 52 69  C);..    if( zRi
8410: 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ght==0 ){.      
8420: 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  /* If there is n
8430: 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f  o "=MODE" part o
8440: 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f  f the pragma, do
8450: 20 61 20 71 75 65 72 79 20 66 6f 72 20 74 68 65   a query for the
8460: 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e  .      ** curren
8470: 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20  t mode */.      
8480: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
8490: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
84a0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
84b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
84c0: 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e  ode;.      int n
84d0: 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
84e0: 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  30(zRight);.    
84f0: 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28    for(eMode=0; (
8500: 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a  zMode = sqlite3J
8510: 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
8520: 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65  Mode))!=0; eMode
8530: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
8540: 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
8550: 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20  (zRight, zMode, 
8560: 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  n)==0 ) break;. 
8570: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
8580: 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20   !zMode ){.     
8590: 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d     /* If the "=M
85a0: 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e  ODE" part does n
85b0: 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f  ot match any kno
85c0: 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c  wn journal mode,
85d0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e  .        ** then
85e0: 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20   do a query */. 
85f0: 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50         eMode = P
8600: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
8610: 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a  _QUERY;.      }.
8620: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d      }.    if( eM
8630: 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  ode==PAGER_JOURN
8640: 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20  ALMODE_QUERY && 
8650: 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20  pId2->n==0 ){.  
8660: 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22      /* Convert "
8670: 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d  PRAGMA journal_m
8680: 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d  ode" into "PRAGM
8690: 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d  A main.journal_m
86a0: 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44  ode" */.      iD
86b0: 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64  b = 0;.      pId
86c0: 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  2->n = 1;.    }.
86d0: 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e      for(ii=db->n
86e0: 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d  Db-1; ii>=0; ii-
86f0: 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  -){.      if( db
8700: 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26  ->aDb[ii].pBt &&
8710: 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64   (ii==iDb || pId
8720: 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20  2->n==0) ){.    
8730: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55      sqlite3VdbeU
8740: 73 65 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b  sesBtree(v, ii);
8750: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
8760: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
8770: 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69  _JournalMode, ii
8780: 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  , 1, eMode);.   
8790: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
87a0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
87b0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
87c0: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65  , 1, 1);.    bre
87d0: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
87e0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
87f0: 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69  base.]journal_si
8800: 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50  ze_limit.  **  P
8810: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
8820: 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  ]journal_size_li
8830: 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  mit=N.  **.  ** 
8840: 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 73  Get or set the s
8850: 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c  ize limit on rol
8860: 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69  lback journal fi
8870: 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  les..  */.  case
8880: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
8890: 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20  _SIZE_LIMIT: {. 
88a0: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
88b0: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
88c0: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
88d0: 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d      i64 iLimit =
88e0: 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69   -2;.    if( zRi
88f0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
8900: 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
8910: 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69  4(zRight, &iLimi
8920: 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c  t);.      if( iL
8930: 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74  imit<-1 ) iLimit
8940: 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20   = -1;.    }.   
8950: 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65   iLimit = sqlite
8960: 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a  3PagerJournalSiz
8970: 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69  eLimit(pPager, i
8980: 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75  Limit);.    retu
8990: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
89a0: 73 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a  se, "journal_siz
89b0: 65 5f 6c 69 6d 69 74 22 2c 20 69 4c 69 6d 69 74  e_limit", iLimit
89c0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
89d0: 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  }..#endif /* SQL
89e0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
89f0: 52 41 47 4d 41 53 20 2a 2f 0a 0a 20 20 2f 2a 0a  RAGMAS */..  /*.
8a00: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
8a10: 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63  tabase.]auto_vac
8a20: 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  uum.  **  PRAGMA
8a30: 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75 74 6f   [database.]auto
8a40: 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20  _vacuum=N.  **. 
8a50: 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74   ** Get or set t
8a60: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
8a70: 64 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d 76  database 'auto-v
8a80: 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65 72  acuum' parameter
8a90: 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75 65  ..  ** The value
8aa0: 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20 4e   is one of:  0 N
8ab0: 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e 43  ONE 1 FULL 2 INC
8ac0: 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23 69  REMENTAL.  */.#i
8ad0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
8ae0: 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63  T_AUTOVACUUM.  c
8af0: 61 73 65 20 50 72 61 67 54 79 70 5f 41 55 54 4f  ase PragTyp_AUTO
8b00: 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 42  _VACUUM: {.    B
8b10: 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d  tree *pBt = pDb-
8b20: 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74  >pBt;.    assert
8b30: 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ( pBt!=0 );.    
8b40: 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20  if( !zRight ){. 
8b50: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
8b60: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 61 75  eInt(pParse, "au
8b70: 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69  to_vacuum", sqli
8b80: 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56  te3BtreeGetAutoV
8b90: 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20  acuum(pBt));.   
8ba0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
8bb0: 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74  t eAuto = getAut
8bc0: 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b  oVacuum(zRight);
8bd0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
8be0: 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f  Auto>=0 && eAuto
8bf0: 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  <=2 );.      db-
8c00: 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28  >nextAutovac = (
8c10: 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20  u8)eAuto;.      
8c20: 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56  /* Call SetAutoV
8c30: 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69  acuum() to set i
8c40: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e  nitialize the in
8c50: 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a  ternal auto and.
8c60: 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61        ** incr-va
8c70: 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73  cuum flags. This
8c80: 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20   is required in 
8c90: 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63  case this connec
8ca0: 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72  tion.      ** cr
8cb0: 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61  eates the databa
8cc0: 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69  se file. It is i
8cd0: 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74  mportant that it
8ce0: 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20 20   is created.    
8cf0: 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d    ** as an auto-
8d00: 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64  vacuum capable d
8d10: 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  b..      */.    
8d20: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
8d30: 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d  reeSetAutoVacuum
8d40: 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20  (pBt, eAuto);.  
8d50: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
8d60: 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d  TE_OK && (eAuto=
8d70: 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20  =1 || eAuto==2) 
8d80: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ){.        /* Wh
8d90: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61  en setting the a
8da0: 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20  uto_vacuum mode 
8db0: 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22  to either "full"
8dc0: 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20   or .        ** 
8dd0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77  "incremental", w
8de0: 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f  rite the value o
8df0: 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65  f meta[6] in the
8e00: 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
8e10: 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72    ** file. Befor
8e20: 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74  e writing to met
8e30: 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74  a[6], check that
8e40: 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74   meta[3] indicat
8e50: 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  es.        ** th
8e60: 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69  at this really i
8e70: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
8e80: 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61 73   capable databas
8e90: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
8ea0: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
8eb0: 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42  st int iLn = VDB
8ec0: 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28  E_OFFSET_LINENO(
8ed0: 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74  2);.        stat
8ee0: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
8ef0: 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d  ist setMeta6[] =
8f00: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f   {.          { O
8f10: 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
8f20: 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20    0,         1, 
8f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f40: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
8f50: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65           { OP_Re
8f60: 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c  adCookie,     0,
8f70: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
8f80: 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53      BTREE_LARGES
8f90: 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20  T_ROOT_PAGE},.  
8fa0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c          { OP_If,
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
8fc0: 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20          0,      
8fd0: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
8fe0: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
8ff0: 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20      { OP_Halt,  
9000: 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
9010: 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20  OK, OE_Abort,   
9020: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
9030: 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   3 */.          
9040: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
9050: 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20       0,         
9060: 31 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  1,              
9070: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a     0},    /* 4 *
9080: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
9090: 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20  _SetCookie,     
90a0: 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45   0,         BTRE
90b0: 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 31  E_INCR_VACUUM, 1
90c0: 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a 20 20  },    /* 5 */.  
90d0: 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20        };.       
90e0: 20 69 6e 74 20 69 41 64 64 72 3b 0a 20 20 20 20   int iAddr;.    
90f0: 20 20 20 20 69 41 64 64 72 20 3d 20 73 71 6c 69      iAddr = sqli
9100: 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74  te3VdbeAddOpList
9110: 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65  (v, ArraySize(se
9120: 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65 74 61  tMeta6), setMeta
9130: 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20 20  6, iLn);.       
9140: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
9150: 67 65 50 31 28 76 2c 20 69 41 64 64 72 2c 20 69  geP1(v, iAddr, i
9160: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
9170: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
9180: 28 76 2c 20 69 41 64 64 72 2b 31 2c 20 69 44 62  (v, iAddr+1, iDb
9190: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
91a0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  e3VdbeChangeP2(v
91b0: 2c 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64 72  , iAddr+2, iAddr
91c0: 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +4);.        sql
91d0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
91e0: 28 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75  (v, iAddr+4, eAu
91f0: 74 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73  to-1);.        s
9200: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
9210: 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69  P1(v, iAddr+5, i
9220: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
9230: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
9240: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  e(v, iDb);.     
9250: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
9260: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
9270: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
9280: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 6e 63  A [database.]inc
9290: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28  remental_vacuum(
92a0: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20  N).  **.  ** Do 
92b0: 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65  N steps of incre
92c0: 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67  mental vacuuming
92d0: 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a   on a database..
92e0: 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c    */.#ifndef SQL
92f0: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
9300: 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54  UUM.  case PragT
9310: 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56  yp_INCREMENTAL_V
9320: 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74  ACUUM: {.    int
9330: 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20   iLimit, addr;. 
9340: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
9350: 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49   || !sqlite3GetI
9360: 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c  nt32(zRight, &iL
9370: 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c  imit) || iLimit<
9380: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d  =0 ){.      iLim
9390: 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b  it = 0x7fffffff;
93a0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
93b0: 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
93c0: 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c  ation(pParse, 0,
93d0: 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74   iDb);.    sqlit
93e0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
93f0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d  OP_Integer, iLim
9400: 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72  it, 1);.    addr
9410: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
9420: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56  dOp1(v, OP_IncrV
9430: 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62  acuum, iDb); Vdb
9440: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
9450: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9460: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op1(v, OP_Result
9470: 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  Row, 1);.    sql
9480: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
9490: 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
94a0: 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  -1);.    sqlite3
94b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
94c0: 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29  _IfPos, 1, addr)
94d0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
94e0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
94f0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
9500: 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  dr);.    break;.
9510: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e    }.#endif..#ifn
9520: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9530: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20  PAGER_PRAGMAS.  
9540: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
9550: 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65  [database.]cache
9560: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
9570: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61  MA [database.]ca
9580: 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a  che_size=N.  **.
9590: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
95a0: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
95b0: 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65  current local se
95c0: 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20  tting for the.  
95d0: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
95e0: 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66  ze. The second f
95f0: 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63  orm sets the loc
9600: 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  al.  ** page cac
9610: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20  he size value.  
9620: 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65  If N is positive
9630: 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68   then that is th
9640: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
9650: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61   pages in the ca
9660: 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65  che.  If N is ne
9670: 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65  gative, then the
9680: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
9690: 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65  pages is adjuste
96a0: 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61  d so that the ca
96b0: 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69  che uses -N kibi
96c0: 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65  bytes.  ** of me
96d0: 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  mory..  */.  cas
96e0: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
96f0: 53 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65  SIZE: {.    asse
9700: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
9710: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
9720: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
9730: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
9740: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
9750: 6e 74 28 70 50 61 72 73 65 2c 20 22 63 61 63 68  nt(pParse, "cach
9760: 65 5f 73 69 7a 65 22 2c 20 70 44 62 2d 3e 70 53  e_size", pDb->pS
9770: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
9780: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
9790: 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20       int size = 
97a0: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67  sqlite3Atoi(zRig
97b0: 68 74 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e  ht);.      pDb->
97c0: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
97d0: 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20  ize = size;.    
97e0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
97f0: 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e  tCacheSize(pDb->
9800: 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  pBt, pDb->pSchem
9810: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
9820: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
9830: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
9840: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
9850: 65 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29 0a  e.]mmap_size(N).
9860: 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20 74    **.  ** Used t
9870: 6f 20 73 65 74 20 6d 61 70 70 69 6e 67 20 73 69  o set mapping si
9880: 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d 61  ze limit. The ma
9890: 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74  pping size limit
98a0: 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 20 74 6f   is.  ** used to
98b0: 20 6c 69 6d 69 74 20 74 68 65 20 61 67 67 72 65   limit the aggre
98c0: 67 61 74 65 20 73 69 7a 65 20 6f 66 20 61 6c 6c  gate size of all
98d0: 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64 20 72   memory mapped r
98e0: 65 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20 20  egions of the.  
98f0: 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
9900: 2e 20 49 66 20 74 68 69 73 20 70 61 72 61 6d 65  . If this parame
9910: 74 65 72 20 69 73 20 73 65 74 20 74 6f 20 7a 65  ter is set to ze
9920: 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20  ro, then memory 
9930: 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73 20  mapping.  ** is 
9940: 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 2e  not used at all.
9950: 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69    If N is negati
9960: 76 65 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66  ve, then the def
9970: 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70 0a  ault memory map.
9980: 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65 72    ** limit deter
9990: 6d 69 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  mined by sqlite3
99a0: 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43  _config(SQLITE_C
99b0: 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 29  ONFIG_MMAP_SIZE)
99c0: 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54 68   is set..  ** Th
99d0: 65 20 70 61 72 61 6d 65 74 65 72 20 4e 20 69 73  e parameter N is
99e0: 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79 74   measured in byt
99f0: 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  es..  **.  ** Th
9a00: 69 73 20 76 61 6c 75 65 20 69 73 20 61 64 76 69  is value is advi
9a10: 73 6f 72 79 2e 20 20 54 68 65 20 75 6e 64 65 72  sory.  The under
9a20: 6c 79 69 6e 67 20 56 46 53 20 69 73 20 66 72 65  lying VFS is fre
9a30: 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70 0a  e to memory map.
9a40: 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20 6f    ** as little o
9a50: 72 20 61 73 20 6d 75 63 68 20 61 73 20 69 74 20  r as much as it 
9a60: 77 61 6e 74 73 2e 20 20 45 78 63 65 70 74 2c 20  wants.  Except, 
9a70: 69 66 20 4e 20 69 73 20 73 65 74 20 74 6f 20 30  if N is set to 0
9a80: 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 75   then the.  ** u
9a90: 70 70 65 72 20 6c 61 79 65 72 73 20 77 69 6c 6c  pper layers will
9aa0: 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 74 68   never invoke th
9ab0: 65 20 78 46 65 74 63 68 20 69 6e 74 65 72 66 61  e xFetch interfa
9ac0: 63 65 73 20 74 6f 20 74 68 65 20 56 46 53 2e 0a  ces to the VFS..
9ad0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
9ae0: 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b  Typ_MMAP_SIZE: {
9af0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  .    sqlite3_int
9b00: 36 34 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49 54  64 sz;.#if SQLIT
9b10: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e  E_MAX_MMAP_SIZE>
9b20: 30 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  0.    assert( sq
9b30: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
9b40: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
9b50: 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   );.    if( zRig
9b60: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  ht ){.      int 
9b70: 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ii;.      sqlite
9b80: 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a  3DecOrHexToI64(z
9b90: 52 69 67 68 74 2c 20 26 73 7a 29 3b 0a 20 20 20  Right, &sz);.   
9ba0: 20 20 20 69 66 28 20 73 7a 3c 30 20 29 20 73 7a     if( sz<0 ) sz
9bb0: 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c   = sqlite3Global
9bc0: 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20  Config.szMmap;. 
9bd0: 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e       if( pId2->n
9be0: 3d 3d 30 20 29 20 64 62 2d 3e 73 7a 4d 6d 61 70  ==0 ) db->szMmap
9bf0: 20 3d 20 73 7a 3b 0a 20 20 20 20 20 20 66 6f 72   = sz;.      for
9c00: 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69  (ii=db->nDb-1; i
9c10: 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20  i>=0; ii--){.   
9c20: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
9c30: 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d  [ii].pBt && (ii=
9c40: 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d  =iDb || pId2->n=
9c50: 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  =0) ){.         
9c60: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
9c70: 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d 3e 61 44  MmapLimit(db->aD
9c80: 62 5b 69 69 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a  b[ii].pBt, sz);.
9c90: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9ca0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 7a 20 3d  }.    }.    sz =
9cb0: 20 2d 31 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   -1;.    rc = sq
9cc0: 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
9cd0: 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49  ol(db, zDb, SQLI
9ce0: 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49  TE_FCNTL_MMAP_SI
9cf0: 5a 45 2c 20 26 73 7a 29 3b 0a 23 65 6c 73 65 0a  ZE, &sz);.#else.
9d00: 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20      sz = 0;.    
9d10: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
9d20: 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 72  #endif.    if( r
9d30: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
9d40: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
9d50: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6d  leInt(pParse, "m
9d60: 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a  map_size", sz);.
9d70: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
9d80: 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e  !=SQLITE_NOTFOUN
9d90: 44 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73  D ){.      pPars
9da0: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20  e->nErr++;.     
9db0: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63   pParse->rc = rc
9dc0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
9dd0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
9de0: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
9df0: 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41  store.  **   PRA
9e00: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  GMA temp_store =
9e10: 20 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f   "default"|"memo
9e20: 72 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a  ry"|"file".  **.
9e30: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
9e40: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
9e50: 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73  ue of the temp_s
9e60: 74 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  tore flag.  Chan
9e70: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f  ging.  ** the lo
9e80: 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e  cal value does n
9e90: 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20  ot make changes 
9ea0: 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  to the disk file
9eb0: 20 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74   and the default
9ec0: 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c  .  ** value will
9ed0: 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65   be restored the
9ee0: 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64   next time the d
9ef0: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65  atabase is opene
9f00: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74  d..  **.  ** Not
9f10: 65 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73  e that it is pos
9f20: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69  sible for the li
9f30: 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69  brary compile-ti
9f40: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20  me options to.  
9f50: 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  ** override this
9f60: 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20   setting.  */.  
9f70: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
9f80: 50 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69  P_STORE: {.    i
9f90: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
9fa0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
9fb0: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 65 6d  Int(pParse, "tem
9fc0: 70 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65  p_store", db->te
9fd0: 6d 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d  mp_store);.    }
9fe0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e  else{.      chan
9ff0: 67 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50  geTempStorage(pP
a000: 61 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20  arse, zRight);. 
a010: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
a020: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
a030: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
a040: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
a050: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
a060: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
a070: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
a080: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
a090: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
a0a0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
a0b0: 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f   the temp_store_
a0c0: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
a0d0: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
a0e0: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
a0f0: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
a100: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
a110: 72 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  r temporary file
a120: 73 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20  s..  ** Setting 
a130: 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67  to a null string
a140: 20 72 65 76 65 72 74 73 20 74 6f 20 74 68 65 20   reverts to the 
a150: 64 65 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72  default temporar
a160: 79 20 64 69 72 65 63 74 6f 72 79 20 73 65 61 72  y directory sear
a170: 63 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70  ch..  ** If temp
a180: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory 
a190: 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e  is changed, then
a1a0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
a1b0: 74 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a  torage..  **.  *
a1c0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
a1d0: 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45  _TEMP_STORE_DIRE
a1e0: 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28  CTORY: {.    if(
a1f0: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
a200: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74 65    if( sqlite3_te
a210: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a  mp_directory ){.
a220: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a230: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
a240: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
a250: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a260: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
a270: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
a280: 20 20 20 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f      "temp_store_
a290: 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49  directory", SQLI
a2a0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
a2b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a2c0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
a2d0: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71  ng8, 0, 1, 0, sq
a2e0: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
a2f0: 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  tory, 0);.      
a300: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a310: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
a320: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
a330: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23    }.    }else{.#
a340: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a350: 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28  IT_WSD.      if(
a360: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
a370: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
a380: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
a390: 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e  te3OsAccess(db->
a3a0: 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51  pVfs, zRight, SQ
a3b0: 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44  LITE_ACCESS_READ
a3c0: 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20  WRITE, &res);.  
a3d0: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
a3e0: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
a3f0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
a400: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
a410: 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72  Parse, "not a wr
a420: 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79  itable directory
a430: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  ");.          go
a440: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
a450: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
a460: 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54  .      if( SQLIT
a470: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a  E_TEMP_STORE==0.
a480: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
a490: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20  E_TEMP_STORE==1 
a4a0: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
a4b0: 65 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20  e<=1).       || 
a4c0: 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f  (SQLITE_TEMP_STO
a4d0: 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d  RE==2 && db->tem
a4e0: 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20  p_store==1).    
a4f0: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76    ){.        inv
a500: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
a510: 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ge(pParse);.    
a520: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
a530: 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74  3_free(sqlite3_t
a540: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  emp_directory);.
a550: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
a560: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  [0] ){.        s
a570: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
a580: 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  ctory = sqlite3_
a590: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52  mprintf("%s", zR
a5a0: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ight);.      }el
a5b0: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
a5c0: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
a5d0: 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ry = 0;.      }.
a5e0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
a5f0: 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20  _OMIT_WSD */.   
a600: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
a610: 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53  }..#if SQLITE_OS
a620: 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  _WIN.  /*.  **  
a630: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
a640: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
a650: 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f  *   PRAGMA data_
a660: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
a670: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
a680: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
a690: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
a6a0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
a6b0: 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f   the data_store_
a6c0: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
a6d0: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
a6e0: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
a6f0: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
a700: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
a710: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
a720: 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20   that.  ** were 
a730: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
a740: 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61   relative pathna
a750: 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20  me.  Setting to 
a760: 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65  a null string re
a770: 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68  verts.  ** to th
a780: 65 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61  e default databa
a790: 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68  se directory, wh
a7a0: 69 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65  ich for database
a7b0: 20 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64   files specified
a7c0: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c   with.  ** a rel
a7d0: 61 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20  ative path will 
a7e0: 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65  probably be base
a7f0: 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d on the current
a800: 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
a810: 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e  he.  ** process.
a820: 20 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20    Database file 
a830: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
a840: 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20  n absolute path 
a850: 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64  are not impacted
a860: 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65  .  ** by this se
a870: 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73  tting, regardles
a880: 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a  s of its value..
a890: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
a8a0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54   PragTyp_DATA_ST
a8b0: 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b  ORE_DIRECTORY: {
a8c0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
a8d0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
a8e0: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
a8f0: 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20  tory ){.        
a900: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
a910: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
a920: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a930: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
a940: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a   COLNAME_NAME, .
a950: 20 20 20 20 20 20 20 20 20 20 20 20 22 64 61 74              "dat
a960: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
a970: 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  y", SQLITE_STATI
a980: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
a990: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
a9a0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
a9b0: 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f 64 61  1, 0, sqlite3_da
a9c0: 74 61 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29  ta_directory, 0)
a9d0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
a9e0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
a9f0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
aa00: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1);.      }.    
aa10: 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53  }else{.#ifndef S
aa20: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
aa30: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
aa40: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  0] ){.        in
aa50: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72  t res;.        r
aa60: 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63  c = sqlite3OsAcc
aa70: 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52  ess(db->pVfs, zR
aa80: 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43  ight, SQLITE_ACC
aa90: 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26  ESS_READWRITE, &
aaa0: 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
aab0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
aac0: 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  || res==0 ){.   
aad0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
aae0: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
aaf0: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
ab00: 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20  irectory");.    
ab10: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
ab20: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d  a_out;.        }
ab30: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
ab40: 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69  qlite3_free(sqli
ab50: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
ab60: 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ry);.      if( z
ab70: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
ab80: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61      sqlite3_data
ab90: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c  _directory = sql
aba0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
abb0: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
abc0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
abd0: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
abe0: 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20  rectory = 0;.   
abf0: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
ac00: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a  QLITE_OMIT_WSD *
ac10: 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  /.    }.    brea
ac20: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  k;.  }.#endif..#
ac30: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
ac40: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20  _LOCKING_STYLE. 
ac50: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
ac60: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
ac70: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a  k_proxy_file.  *
ac80: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
ac90: 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79  base.]lock_proxy
aca0: 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22  _file = ":auto:"
acb0: 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68  |"lock_file_path
acc0: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
acd0: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  rn or set the va
ace0: 6c 75 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f  lue of the lock_
acf0: 70 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e  proxy_file flag.
ad00: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
ad10: 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61  the value sets a
ad20: 20 73 70 65 63 69 66 69 63 20 66 69 6c 65 20 74   specific file t
ad30: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
ad40: 74 61 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f  tabase access lo
ad50: 63 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  cks..  **.  */. 
ad60: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
ad70: 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b  CK_PROXY_FILE: {
ad80: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
ad90: 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20   ){.      Pager 
ada0: 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65  *pPager = sqlite
adb0: 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d  3BtreePager(pDb-
adc0: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 63 68 61  >pBt);.      cha
add0: 72 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61  r *proxy_file_pa
ade0: 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20  th = NULL;.     
adf0: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70   sqlite3_file *p
ae00: 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61  File = sqlite3Pa
ae10: 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b  gerFile(pPager);
ae20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73  .      sqlite3Os
ae30: 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28  FileControlHint(
ae40: 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45  pFile, SQLITE_GE
ae50: 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c  T_LOCKPROXYFILE,
ae60: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70 72               &pr
ae80: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a  oxy_file_path);.
ae90: 20 20 20 20 20 20 0a 20 20 20 20 20 20 69 66 28        .      if(
aea0: 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68   proxy_file_path
aeb0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
aec0: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
aed0: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  s(v, 1);.       
aee0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
aef0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
af00: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20  NAME_NAME, .    
af10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af20: 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63 6b 5f            "lock_
af30: 70 72 6f 78 79 5f 66 69 6c 65 22 2c 20 53 51 4c  proxy_file", SQL
af40: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
af50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
af60: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
af70: 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70  ing8, 0, 1, 0, p
af80: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 2c 20  roxy_file_path, 
af90: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
afa0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
afb0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
afc0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
afd0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50    }else{.      P
afe0: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
aff0: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
b000: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
b010: 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a    sqlite3_file *
b020: 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50  pFile = sqlite3P
b030: 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29  agerFile(pPager)
b040: 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b  ;.      int res;
b050: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
b060: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
b070: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
b080: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
b090: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
b0a0: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
b0e0: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
b0f0: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
b100: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
b110: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
b120: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
b130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b150: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  NULL);.      }. 
b160: 20 20 20 20 20 69 66 28 20 72 65 73 21 3d 53 51       if( res!=SQ
b170: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
b180: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
b190: 73 67 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c  sg(pParse, "fail
b1a0: 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70  ed to set lock p
b1b0: 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20  roxy file");.   
b1c0: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
b1d0: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
b1e0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
b1f0: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
b200: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
b210: 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20  NG_STYLE */     
b220: 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a   .    .  /*.  **
b230: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
b240: 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ase.]synchronous
b250: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
b260: 64 61 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72  database.]synchr
b270: 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52  onous=OFF|ON|NOR
b280: 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20  MAL|FULL.  **.  
b290: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
b2a0: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
b2b0: 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e   of the synchron
b2c0: 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ous flag.  Chang
b2d0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
b2e0: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
b2f0: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
b300: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
b310: 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  and the.  ** def
b320: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will 
b330: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
b340: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
b350: 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f  tabase is.  ** o
b360: 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  pened..  */.  ca
b370: 73 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48  se PragTyp_SYNCH
b380: 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66  RONOUS: {.    if
b390: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
b3a0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
b3b0: 6e 74 28 70 50 61 72 73 65 2c 20 22 73 79 6e 63  nt(pParse, "sync
b3c0: 68 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73  hronous", pDb->s
b3d0: 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a  afety_level-1);.
b3e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b3f0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
b400: 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
b410: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
b420: 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20  pParse, .       
b430: 20 20 20 20 20 22 53 61 66 65 74 79 20 6c 65 76       "Safety lev
b440: 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68  el may not be ch
b450: 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74  anged inside a t
b460: 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20  ransaction");.  
b470: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b480: 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c     pDb->safety_l
b490: 65 76 65 6c 20 3d 20 67 65 74 53 61 66 65 74 79  evel = getSafety
b4a0: 4c 65 76 65 6c 28 7a 52 69 67 68 74 2c 30 2c 31  Level(zRight,0,1
b4b0: 29 2b 31 3b 0a 20 20 20 20 20 20 20 20 73 65 74  )+1;.        set
b4c0: 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62  AllPagerFlags(db
b4d0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
b4e0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
b4f0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
b500: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
b510: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
b520: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
b530: 5f 50 52 41 47 4d 41 53 0a 20 20 63 61 73 65 20  _PRAGMAS.  case 
b540: 50 72 61 67 54 79 70 5f 46 4c 41 47 3a 20 7b 0a  PragTyp_FLAG: {.
b550: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
b560: 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  0 ){.      retur
b570: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
b580: 65 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  e, aPragmaNames[
b590: 6d 69 64 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20  mid].zName,.    
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5b0: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 61 50   (db->flags & aP
b5c0: 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e  ragmaNames[mid].
b5d0: 69 41 72 67 29 21 3d 30 20 29 3b 0a 20 20 20 20  iArg)!=0 );.    
b5e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
b5f0: 20 6d 61 73 6b 20 3d 20 61 50 72 61 67 6d 61 4e   mask = aPragmaN
b600: 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 3b 20  ames[mid].iArg; 
b610: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69     /* Mask of bi
b620: 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65  ts to set or cle
b630: 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ar. */.      if(
b640: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
b650: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
b660: 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70   Foreign key sup
b670: 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20  port may not be 
b680: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
b690: 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20  led while not.  
b6a0: 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f        ** in auto
b6b0: 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a  -commit mode.  *
b6c0: 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26  /.        mask &
b6d0: 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69  = ~(SQLITE_Forei
b6e0: 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d  gnKeys);.      }
b6f0: 0a 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ..      if( sqli
b700: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
b710: 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20  ight, 0) ){.    
b720: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
b730: 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c   mask;.      }el
b740: 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
b750: 66 6c 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a  flags &= ~mask;.
b760: 20 20 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b          if( mask
b770: 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  ==SQLITE_DeferFK
b780: 73 20 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s ) db->nDeferre
b790: 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20  dImmCons = 0;.  
b7a0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
b7b0: 4d 61 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67  Many of the flag
b7c0: 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20  -pragmas modify 
b7d0: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
b7e0: 65 64 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20  ed by the SQL . 
b7f0: 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72       ** compiler
b800: 20 28 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e   (eg. count_chan
b810: 67 65 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20  ges). So add an 
b820: 6f 70 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65  opcode to expire
b830: 20 61 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f   all.      ** co
b840: 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65  mpiled SQL state
b850: 6d 65 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69  ments after modi
b860: 66 79 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76  fying a pragma v
b870: 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  alue..      */. 
b880: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b890: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70  AddOp2(v, OP_Exp
b8a0: 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  ire, 0, 0);.    
b8b0: 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61    setAllPagerFla
b8c0: 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20  gs(db);.    }.  
b8d0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
b8e0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
b8f0: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20  IT_FLAG_PRAGMAS 
b900: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
b910: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
b920: 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a  RAGMAS.  /*.  **
b930: 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f     PRAGMA table_
b940: 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20  info(<table>).  
b950: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61  **.  ** Return a
b960: 20 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20   single row for 
b970: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  each column of t
b980: 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20  he named table. 
b990: 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20  The columns of. 
b9a0: 20 2a 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64   ** the returned
b9b0: 20 64 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20   data set are:. 
b9c0: 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20   **.  ** cid:   
b9d0: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28       Column id (
b9e0: 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65  numbered from le
b9f0: 66 74 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61  ft to right, sta
ba00: 72 74 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a  rting at 0).  **
ba10: 20 6e 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c   name:       Col
ba20: 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79  umn name.  ** ty
ba30: 70 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  pe:       Column
ba40: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
ba50: 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a  e..  ** notnull:
ba60: 20 20 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54      True if 'NOT
ba70: 20 4e 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f   NULL' is part o
ba80: 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61  f column declara
ba90: 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76  tion.  ** dflt_v
baa0: 61 6c 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c  alue: The defaul
bab0: 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  t value for the 
bac0: 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a  column, if any..
bad0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
bae0: 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20  Typ_TABLE_INFO: 
baf0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
bb00: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
bb10: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
bb20: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
bb30: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
bb40: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
bb50: 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20     int i, k;.   
bb60: 20 20 20 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d     int nHidden =
bb70: 20 30 3b 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e   0;.      Column
bb80: 20 2a 70 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e   *pCol;.      In
bb90: 64 65 78 20 2a 70 50 6b 20 3d 20 73 71 6c 69 74  dex *pPk = sqlit
bba0: 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
bbb0: 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20 73  x(pTab);.      s
bbc0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
bbd0: 43 6f 6c 73 28 76 2c 20 36 29 3b 0a 20 20 20 20  Cols(v, 6);.    
bbe0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
bbf0: 20 36 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   6;.      sqlite
bc00: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
bc10: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
bc20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bc30: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
bc40: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
bc50: 22 63 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54  "cid", SQLITE_ST
bc60: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
bc70: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
bc80: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
bc90: 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53  _NAME, "name", S
bca0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
bcb0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bcc0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
bcd0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
bce0: 74 79 70 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  type", SQLITE_ST
bcf0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
bd00: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
bd10: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
bd20: 5f 4e 41 4d 45 2c 20 22 6e 6f 74 6e 75 6c 6c 22  _NAME, "notnull"
bd30: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
bd40: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
bd50: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
bd60: 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   4, COLNAME_NAME
bd70: 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20  , "dflt_value", 
bd80: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
bd90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bda0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35  eSetColName(v, 5
bdb0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
bdc0: 22 70 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  "pk", SQLITE_STA
bdd0: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
bde0: 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
bdf0: 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54  Names(pParse, pT
be00: 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  ab);.      for(i
be10: 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61  =0, pCol=pTab->a
be20: 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f  Col; i<pTab->nCo
be30: 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b  l; i++, pCol++){
be40: 0a 20 20 20 20 20 20 20 20 69 66 28 20 49 73 48  .        if( IsH
be50: 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c  iddenColumn(pCol
be60: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e  ) ){.          n
be70: 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20  Hidden++;.      
be80: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
be90: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
bea0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
beb0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
bec0: 20 69 2d 6e 48 69 64 64 65 6e 2c 20 31 29 3b 0a   i-nHidden, 1);.
bed0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bee0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
bef0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
bf00: 2c 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 30  , pCol->zName, 0
bf10: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
bf20: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
bf30: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
bf40: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
bf50: 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43  pCol->zType ? pC
bf60: 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c 20  ol->zType : "", 
bf70: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
bf80: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bf90: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 28 70 43   OP_Integer, (pC
bfa0: 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20  ol->notNull ? 1 
bfb0: 3a 20 30 29 2c 20 34 29 3b 0a 20 20 20 20 20 20  : 0), 4);.      
bfc0: 20 20 69 66 28 20 70 43 6f 6c 2d 3e 7a 44 66 6c    if( pCol->zDfl
bfd0: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  t ){.          s
bfe0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
bff0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
c000: 30 2c 20 35 2c 20 30 2c 20 28 63 68 61 72 2a 29  0, 5, 0, (char*)
c010: 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 20 30 29 3b  pCol->zDflt, 0);
c020: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
c030: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c040: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c050: 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 29 3b 0a 20  P_Null, 0, 5);. 
c060: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
c070: 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46   if( (pCol->colF
c080: 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50  lags & COLFLAG_P
c090: 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20  RIMKEY)==0 ){.  
c0a0: 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
c0b0: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
c0c0: 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20   pPk==0 ){.     
c0d0: 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20       k = 1;.    
c0e0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c0f0: 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b 20 41 4c       for(k=1; AL
c100: 57 41 59 53 28 6b 3c 3d 70 54 61 62 2d 3e 6e 43  WAYS(k<=pTab->nC
c110: 6f 6c 29 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f  ol) && pPk->aiCo
c120: 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b  lumn[k-1]!=i; k+
c130: 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  +){}.        }. 
c140: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c150: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
c160: 6e 74 65 67 65 72 2c 20 6b 2c 20 36 29 3b 0a 20  nteger, k, 6);. 
c170: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c180: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
c190: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b  esultRow, 1, 6);
c1a0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
c1b0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
c1c0: 61 73 65 20 50 72 61 67 54 79 70 5f 53 54 41 54  ase PragTyp_STAT
c1d0: 53 3a 20 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  S: {.    Index *
c1e0: 70 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45 6c  pIdx;.    HashEl
c1f0: 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73  em *i;.    v = s
c200: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
c210: 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  arse);.    sqlit
c220: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
c230: 28 76 2c 20 34 29 3b 0a 20 20 20 20 70 50 61 72  (v, 4);.    pPar
c240: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20  se->nMem = 4;.  
c250: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
c260: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
c270: 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69  , iDb);.    sqli
c280: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c290: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
c2a0: 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53  NAME, "table", S
c2b0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c2c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c2d0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
c2e0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e  OLNAME_NAME, "in
c2f0: 64 65 78 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  dex", SQLITE_STA
c300: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
c310: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
c320: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
c330: 4d 45 2c 20 22 77 69 64 74 68 22 2c 20 53 51 4c  ME, "width", SQL
c340: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c350: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
c360: 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c  olName(v, 3, COL
c370: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 68 65 69 67  NAME_NAME, "heig
c380: 68 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ht", SQLITE_STAT
c390: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 73  IC);.    for(i=s
c3a0: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
c3b0: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 74 62  pDb->pSchema->tb
c3c0: 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d 73 71 6c  lHash); i; i=sql
c3d0: 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b  iteHashNext(i)){
c3e0: 0a 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54  .      Table *pT
c3f0: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
c400: 61 74 61 28 69 29 3b 0a 20 20 20 20 20 20 73 71  ata(i);.      sq
c410: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c420: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c430: 2c 20 31 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e  , 1, 0, pTab->zN
c440: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  ame, 0);.      s
c450: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c460: 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20  (v, OP_Null, 0, 
c470: 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2);.      sqlite
c480: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c490: 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20  P_Integer,.     
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4b0: 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74        (int)sqlit
c4c0: 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54  e3LogEstToInt(pT
c4d0: 61 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 20 33  ab->szTabRow), 3
c4e0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c4f0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c500: 5f 49 6e 74 65 67 65 72 2c 20 0a 20 20 20 20 20  _Integer, .     
c510: 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65       (int)sqlite
c520: 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54 61  3LogEstToInt(pTa
c530: 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73 74 29 2c 20  b->nRowLogEst), 
c540: 34 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  4);.      sqlite
c550: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c560: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
c570: 34 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49  4);.      for(pI
c580: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
c590: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
c5a0: 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20  ->pNext){.      
c5b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c5c0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
c5d0: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64 78  8, 0, 2, 0, pIdx
c5e0: 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ->zName, 0);.   
c5f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c600: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c610: 65 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  eger,.          
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c630: 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c     (int)sqlite3L
c640: 6f 67 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d  ogEstToInt(pIdx-
c650: 3e 73 7a 49 64 78 52 6f 77 29 2c 20 33 29 3b 0a  >szIdxRow), 3);.
c660: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c670: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c680: 49 6e 74 65 67 65 72 2c 20 0a 20 20 20 20 20 20  Integer, .      
c690: 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74        (int)sqlit
c6a0: 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 49  e3LogEstToInt(pI
c6b0: 64 78 2d 3e 61 69 52 6f 77 4c 6f 67 45 73 74 5b  dx->aiRowLogEst[
c6c0: 30 5d 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 20  0]), 4);.       
c6d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c6e0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
c6f0: 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20  ow, 1, 4);.     
c700: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
c710: 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72  reak;..  case Pr
c720: 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f  agTyp_INDEX_INFO
c730: 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
c740: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
c750: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
c760: 3b 0a 20 20 20 20 70 49 64 78 20 3d 20 73 71 6c  ;.    pIdx = sql
c770: 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 64 62  ite3FindIndex(db
c780: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
c790: 20 20 20 20 69 66 28 20 70 49 64 78 20 29 7b 0a      if( pIdx ){.
c7a0: 20 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20        int i;.   
c7b0: 20 20 20 70 54 61 62 20 3d 20 70 49 64 78 2d 3e     pTab = pIdx->
c7c0: 70 54 61 62 6c 65 3b 0a 20 20 20 20 20 20 73 71  pTable;.      sq
c7d0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
c7e0: 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 20  ols(v, 3);.     
c7f0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
c800: 33 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  3;.      sqlite3
c810: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
c820: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
c830: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c840: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
c850: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
c860: 73 65 71 6e 6f 22 2c 20 53 51 4c 49 54 45 5f 53  seqno", SQLITE_S
c870: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
c880: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
c890: 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
c8a0: 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20 53  E_NAME, "cid", S
c8b0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c8c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c8d0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
c8e0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
c8f0: 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  name", SQLITE_ST
c900: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 66 6f 72  ATIC);.      for
c910: 28 69 3d 30 3b 20 69 3c 70 49 64 78 2d 3e 6e 4b  (i=0; i<pIdx->nK
c920: 65 79 43 6f 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  eyCol; i++){.   
c930: 20 20 20 20 20 69 31 36 20 63 6e 75 6d 20 3d 20       i16 cnum = 
c940: 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69  pIdx->aiColumn[i
c950: 5d 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ];.        sqlit
c960: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c970: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31  OP_Integer, i, 1
c980: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c990: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c9a0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 63 6e 75 6d  OP_Integer, cnum
c9b0: 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 61 73  , 2);.        as
c9c0: 73 65 72 74 28 20 70 54 61 62 2d 3e 6e 43 6f 6c  sert( pTab->nCol
c9d0: 3e 63 6e 75 6d 20 29 3b 0a 20 20 20 20 20 20 20  >cnum );.       
c9e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c9f0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
ca00: 2c 20 30 2c 20 33 2c 20 30 2c 20 70 54 61 62 2d  , 0, 3, 0, pTab-
ca10: 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d  >aCol[cnum].zNam
ca20: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  e, 0);.        s
ca30: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ca40: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
ca50: 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 7d  , 1, 3);.      }
ca60: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
ca70: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
ca80: 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 3a 20  Typ_INDEX_LIST: 
ca90: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
caa0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20    Index *pIdx;. 
cab0: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
cac0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 70      int i;.    p
cad0: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
cae0: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
caf0: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
cb00: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76   pTab ){.      v
cb10: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
cb20: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
cb30: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
cb40: 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20  umCols(v, 3);.  
cb50: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
cb60: 20 3d 20 33 3b 0a 20 20 20 20 20 20 73 71 6c 69   = 3;.      sqli
cb70: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
cb80: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
cb90: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
cba0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
cbb0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
cbc0: 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f  , "seq", SQLITE_
cbd0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
cbe0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
cbf0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
cc00: 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c  ME_NAME, "name",
cc10: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
cc20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
cc30: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
cc40: 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  2, COLNAME_NAME,
cc50: 20 22 75 6e 69 71 75 65 22 2c 20 53 51 4c 49 54   "unique", SQLIT
cc60: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
cc70: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
cc80: 70 49 6e 64 65 78 2c 20 69 3d 30 3b 20 70 49 64  pIndex, i=0; pId
cc90: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
cca0: 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ext, i++){.     
ccb0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ccc0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
ccd0: 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20  er, i, 1);.     
cce0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ccf0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
cd00: 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64  g8, 0, 2, 0, pId
cd10: 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  x->zName, 0);.  
cd20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cd30: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
cd40: 74 65 67 65 72 2c 20 49 73 55 6e 69 71 75 65 49  teger, IsUniqueI
cd50: 6e 64 65 78 28 70 49 64 78 29 2c 20 33 29 3b 0a  ndex(pIdx), 3);.
cd60: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
cd70: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
cd80: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29  ResultRow, 1, 3)
cd90: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
cda0: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
cdb0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 41 54  case PragTyp_DAT
cdc0: 41 42 41 53 45 5f 4c 49 53 54 3a 20 7b 0a 20 20  ABASE_LIST: {.  
cdd0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c    int i;.    sql
cde0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
cdf0: 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70 50  ls(v, 3);.    pP
ce00: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a  arse->nMem = 3;.
ce10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
ce20: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
ce30: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
ce40: 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  eq", SQLITE_STAT
ce50: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
ce60: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
ce70: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
ce80: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
ce90: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
cea0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
ceb0: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
cec0: 4d 45 5f 4e 41 4d 45 2c 20 22 66 69 6c 65 22 2c  ME_NAME, "file",
ced0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
cee0: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
cef0: 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
cf00: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
cf10: 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e  [i].pBt==0 ) con
cf20: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73 73  tinue;.      ass
cf30: 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  ert( db->aDb[i].
cf40: 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20  zName!=0 );.    
cf50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cf60: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
cf70: 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20  r, i, 1);.      
cf80: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cf90: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
cfa0: 20 30 2c 20 32 2c 20 30 2c 20 64 62 2d 3e 61 44   0, 2, 0, db->aD
cfb0: 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  b[i].zName, 0);.
cfc0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cfd0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
cfe0: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a  ring8, 0, 3, 0,.
cff0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d000: 65 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e 61  e3BtreeGetFilena
d010: 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  me(db->aDb[i].pB
d020: 74 29 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  t), 0);.      sq
d030: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d040: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
d050: 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20   1, 3);.    }.  
d060: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
d070: 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41  se PragTyp_COLLA
d080: 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20  TION_LIST: {.   
d090: 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20   int i = 0;.    
d0a0: 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20  HashElem *p;.   
d0b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
d0c0: 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20  umCols(v, 2);.  
d0d0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
d0e0: 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   2;.    sqlite3V
d0f0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
d100: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
d110: 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f  , "seq", SQLITE_
d120: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
d130: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
d140: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
d150: 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53  _NAME, "name", S
d160: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
d170: 20 20 20 66 6f 72 28 70 3d 73 71 6c 69 74 65 48     for(p=sqliteH
d180: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 43  ashFirst(&db->aC
d190: 6f 6c 6c 53 65 71 29 3b 20 70 3b 20 70 3d 73 71  ollSeq); p; p=sq
d1a0: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 70 29 29  liteHashNext(p))
d1b0: 7b 0a 20 20 20 20 20 20 43 6f 6c 6c 53 65 71 20  {.      CollSeq 
d1c0: 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65  *pColl = (CollSe
d1d0: 71 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61  q *)sqliteHashDa
d1e0: 74 61 28 70 29 3b 0a 20 20 20 20 20 20 73 71 6c  ta(p);.      sql
d1f0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d200: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2b  , OP_Integer, i+
d210: 2b 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  +, 1);.      sql
d220: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
d230: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
d240: 20 32 2c 20 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e   2, 0, pColl->zN
d250: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  ame, 0);.      s
d260: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d270: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
d280: 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 2);.    }. 
d290: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
d2a0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
d2b0: 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53  T_SCHEMA_PRAGMAS
d2c0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
d2d0: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
d2e0: 5f 4b 45 59 0a 20 20 63 61 73 65 20 50 72 61 67  _KEY.  case Prag
d2f0: 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f  Typ_FOREIGN_KEY_
d300: 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74  LIST: if( zRight
d310: 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46   ){.    FKey *pF
d320: 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  K;.    Table *pT
d330: 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73  ab;.    pTab = s
d340: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
d350: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
d360: 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29  ;.    if( pTab )
d370: 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69  {.      v = sqli
d380: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
d390: 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d 20  e);.      pFK = 
d3a0: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20  pTab->pFKey;.   
d3b0: 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20 20     if( pFK ){.  
d3c0: 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b        int i = 0;
d3d0: 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65   .        sqlite
d3e0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
d3f0: 76 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 70  v, 8);.        p
d400: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b  Parse->nMem = 8;
d410: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d420: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
d430: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
d440: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d450: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
d460: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
d470: 20 22 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54   "id", SQLITE_ST
d480: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
d490: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
d4a0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
d4b0: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20  ME_NAME, "seq", 
d4c0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
d4d0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d4e0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
d4f0: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
d500: 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54  , "table", SQLIT
d510: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
d520: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d530: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43  tColName(v, 3, C
d540: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 72  OLNAME_NAME, "fr
d550: 6f 6d 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  om", SQLITE_STAT
d560: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
d570: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
d580: 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45  me(v, 4, COLNAME
d590: 5f 4e 41 4d 45 2c 20 22 74 6f 22 2c 20 53 51 4c  _NAME, "to", SQL
d5a0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d5b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d5c0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c  SetColName(v, 5,
d5d0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d5e0: 6f 6e 5f 75 70 64 61 74 65 22 2c 20 53 51 4c 49  on_update", SQLI
d5f0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d600: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d610: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 36 2c 20  etColName(v, 6, 
d620: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f  COLNAME_NAME, "o
d630: 6e 5f 64 65 6c 65 74 65 22 2c 20 53 51 4c 49 54  n_delete", SQLIT
d640: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
d650: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d660: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 37 2c 20 43  tColName(v, 7, C
d670: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6d 61  OLNAME_NAME, "ma
d680: 74 63 68 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  tch", SQLITE_STA
d690: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 77 68  TIC);.        wh
d6a0: 69 6c 65 28 70 46 4b 29 7b 0a 20 20 20 20 20 20  ile(pFK){.      
d6b0: 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20      int j;.     
d6c0: 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c       for(j=0; j<
d6d0: 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b  pFK->nCol; j++){
d6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61  .            cha
d6f0: 72 20 2a 7a 43 6f 6c 20 3d 20 70 46 4b 2d 3e 61  r *zCol = pFK->a
d700: 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 3b 0a 20 20 20  Col[j].zCol;.   
d710: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
d720: 4f 6e 44 65 6c 65 74 65 20 3d 20 28 63 68 61 72  OnDelete = (char
d730: 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46   *)actionName(pF
d740: 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d 29 3b 0a  K->aAction[0]);.
d750: 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 72              char
d760: 20 2a 7a 4f 6e 55 70 64 61 74 65 20 3d 20 28 63   *zOnUpdate = (c
d770: 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65  har *)actionName
d780: 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d  (pFK->aAction[1]
d790: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
d7a0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d7b0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
d7c0: 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20  i, 1);.         
d7d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d7e0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
d7f0: 65 72 2c 20 6a 2c 20 32 29 3b 0a 20 20 20 20 20  er, j, 2);.     
d800: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d810: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
d820: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
d830: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 30 29 3b 0a 20   pFK->zTo, 0);. 
d840: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d850: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
d860: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 34  OP_String8, 0, 4
d870: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d890: 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70 46     pTab->aCol[pF
d8a0: 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d  K->aCol[j].iFrom
d8b0: 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ].zName, 0);.   
d8c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d8d0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 7a 43  VdbeAddOp4(v, zC
d8e0: 6f 6c 20 3f 20 4f 50 5f 53 74 72 69 6e 67 38 20  ol ? OP_String8 
d8f0: 3a 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 2c  : OP_Null, 0, 5,
d900: 20 30 2c 20 7a 43 6f 6c 2c 20 30 29 3b 0a 20 20   0, zCol, 0);.  
d910: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d920: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
d930: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 36 2c  P_String8, 0, 6,
d940: 20 30 2c 20 7a 4f 6e 55 70 64 61 74 65 2c 20 30   0, zOnUpdate, 0
d950: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
d960: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
d970: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
d980: 30 2c 20 37 2c 20 30 2c 20 7a 4f 6e 44 65 6c 65  0, 7, 0, zOnDele
d990: 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  te, 0);.        
d9a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d9b0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d9c0: 6e 67 38 2c 20 30 2c 20 38 2c 20 30 2c 20 22 4e  ng8, 0, 8, 0, "N
d9d0: 4f 4e 45 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  ONE", 0);.      
d9e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d9f0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
da00: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a  sultRow, 1, 8);.
da10: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
da20: 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20        ++i;.     
da30: 20 20 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e       pFK = pFK->
da40: 70 4e 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20  pNextFrom;.     
da50: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
da60: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
da70: 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e  #endif /* !defin
da80: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
da90: 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a  OREIGN_KEY) */..
daa0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
dab0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
dac0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
dad0: 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 63 61  MIT_TRIGGER.  ca
dae0: 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49  se PragTyp_FOREI
daf0: 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a  GN_KEY_CHECK: {.
db00: 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20      FKey *pFK;  
db10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20             /* A 
db20: 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
db30: 74 72 61 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61  traint */.    Ta
db40: 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
db50: 20 20 20 20 20 2f 2a 20 43 68 69 6c 64 20 74 61       /* Child ta
db60: 62 6c 65 20 63 6f 6e 74 61 69 6e 20 22 52 45 46  ble contain "REF
db70: 45 52 45 4e 43 45 53 22 20 6b 65 79 77 6f 72 64  ERENCES" keyword
db80: 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
db90: 50 61 72 65 6e 74 3b 20 20 20 20 20 20 20 20 2f  Parent;        /
dba0: 2a 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20 74  * Parent table t
dbb0: 68 61 74 20 63 68 69 6c 64 20 70 6f 69 6e 74 73  hat child points
dbc0: 20 74 6f 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78   to */.    Index
dbd0: 20 2a 70 49 64 78 3b 20 20 20 20 20 20 20 20 20   *pIdx;         
dbe0: 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 74 68    /* Index in th
dbf0: 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20 2a  e parent table *
dc00: 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20 20  /.    int i;    
dc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
dc20: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46  Loop counter:  F
dc30: 6f 72 65 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65  oreign key numbe
dc40: 72 20 66 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20  r for pTab */.  
dc50: 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20    int j;        
dc60: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
dc70: 20 63 6f 75 6e 74 65 72 3a 20 20 46 69 65 6c 64   counter:  Field
dc80: 20 6f 66 20 74 68 65 20 66 6f 72 65 69 67 6e 20   of the foreign 
dc90: 6b 65 79 20 2a 2f 0a 20 20 20 20 48 61 73 68 45  key */.    HashE
dca0: 6c 65 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20 20  lem *k;         
dcb0: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
dcc0: 72 3a 20 20 4e 65 78 74 20 74 61 62 6c 65 20 69  r:  Next table i
dcd0: 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20  n schema */.    
dce0: 69 6e 74 20 78 3b 20 20 20 20 20 20 20 20 20 20  int x;          
dcf0: 20 20 20 20 20 20 20 2f 2a 20 72 65 73 75 6c 74         /* result
dd00: 20 76 61 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20   variable */.   
dd10: 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
dd20: 20 20 20 20 20 20 20 20 2f 2a 20 33 20 72 65 67          /* 3 reg
dd30: 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61  isters to hold a
dd40: 20 72 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20   result row */. 
dd50: 20 20 20 69 6e 74 20 72 65 67 4b 65 79 3b 20 20     int regKey;  
dd60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
dd70: 69 73 74 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65  ister to hold ke
dd80: 79 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 74  y for checking t
dd90: 68 65 20 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74  he FK */.    int
dda0: 20 72 65 67 52 6f 77 3b 20 20 20 20 20 20 20 20   regRow;        
ddb0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73      /* Registers
ddc0: 20 74 6f 20 68 6f 6c 64 20 61 20 72 6f 77 20 66   to hold a row f
ddd0: 72 6f 6d 20 70 54 61 62 20 2a 2f 0a 20 20 20 20  rom pTab */.    
dde0: 69 6e 74 20 61 64 64 72 54 6f 70 3b 20 20 20 20  int addrTop;    
ddf0: 20 20 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66         /* Top of
de00: 20 61 20 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67   a loop checking
de10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f   foreign keys */
de20: 0a 20 20 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b  .    int addrOk;
de30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4a              /* J
de40: 75 6d 70 20 68 65 72 65 20 69 66 20 74 68 65 20  ump here if the 
de50: 6b 65 79 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20  key is OK */.   
de60: 20 69 6e 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20   int *aiCols;   
de70: 20 20 20 20 20 20 20 20 2f 2a 20 63 68 69 6c 64          /* child
de80: 20 74 6f 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d   to parent colum
de90: 6e 20 6d 61 70 70 69 6e 67 20 2a 2f 0a 0a 20 20  n mapping */..  
dea0: 20 20 72 65 67 52 65 73 75 6c 74 20 3d 20 70 50    regResult = pP
deb0: 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20  arse->nMem+1;.  
dec0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b    pParse->nMem +
ded0: 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b 65 79 20  = 4;.    regKey 
dee0: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
def0: 3b 0a 20 20 20 20 72 65 67 52 6f 77 20 3d 20 2b  ;.    regRow = +
df00: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
df10: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
df20: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
df30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
df40: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a  tNumCols(v, 4);.
df50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
df60: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
df70: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74  COLNAME_NAME, "t
df80: 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  able", SQLITE_ST
df90: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
dfa0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
dfb0: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
dfc0: 41 4d 45 2c 20 22 72 6f 77 69 64 22 2c 20 53 51  AME, "rowid", SQ
dfd0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
dfe0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
dff0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f  ColName(v, 2, CO
e000: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 61 72  LNAME_NAME, "par
e010: 65 6e 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ent", SQLITE_STA
e020: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
e030: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
e040: 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 3, COLNAME_NA
e050: 4d 45 2c 20 22 66 6b 69 64 22 2c 20 53 51 4c 49  ME, "fkid", SQLI
e060: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
e070: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
e080: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
e090: 69 44 62 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71  iDb);.    k = sq
e0a0: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
e0b0: 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63 68  b->aDb[iDb].pSch
e0c0: 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20  ema->tblHash);. 
e0d0: 20 20 20 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20     while( k ){. 
e0e0: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20       if( zRight 
e0f0: 29 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20  ){.        pTab 
e100: 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54  = sqlite3LocateT
e110: 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20  able(pParse, 0, 
e120: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
e130: 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20        k = 0;.   
e140: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
e150: 20 20 70 54 61 62 20 3d 20 28 54 61 62 6c 65 2a    pTab = (Table*
e160: 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28  )sqliteHashData(
e170: 6b 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20  k);.        k = 
e180: 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 6b  sqliteHashNext(k
e190: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
e1a0: 20 69 66 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20   if( pTab==0 || 
e1b0: 70 54 61 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29  pTab->pFKey==0 )
e1c0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
e1d0: 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
e1e0: 6b 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70  k(pParse, iDb, p
e1f0: 54 61 62 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54  Tab->tnum, 0, pT
e200: 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  ab->zName);.    
e210: 20 20 69 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c    if( pTab->nCol
e220: 2b 72 65 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e  +regRow>pParse->
e230: 6e 4d 65 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e  nMem ) pParse->n
e240: 4d 65 6d 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c  Mem = pTab->nCol
e250: 20 2b 20 72 65 67 52 6f 77 3b 0a 20 20 20 20 20   + regRow;.     
e260: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
e270: 65 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62  e(pParse, 0, iDb
e280: 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52  , pTab, OP_OpenR
e290: 65 61 64 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  ead);.      sqli
e2a0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
e2b0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
e2c0: 72 65 67 52 65 73 75 6c 74 2c 20 30 2c 20 70 54  regResult, 0, pT
e2d0: 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ab->zName,.     
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2f0: 20 20 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29     P4_TRANSIENT)
e300: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c  ;.      for(i=1,
e310: 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79   pFK=pTab->pFKey
e320: 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d  ; pFK; i++, pFK=
e330: 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b  pFK->pNextFrom){
e340: 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74  .        pParent
e350: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
e360: 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f  ble(db, pFK->zTo
e370: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , zDb);.        
e380: 69 66 28 20 70 50 61 72 65 6e 74 3d 3d 30 20 29  if( pParent==0 )
e390: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
e3a0: 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20     pIdx = 0;.   
e3b0: 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c       sqlite3Tabl
e3c0: 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44  eLock(pParse, iD
e3d0: 62 2c 20 70 50 61 72 65 6e 74 2d 3e 74 6e 75 6d  b, pParent->tnum
e3e0: 2c 20 30 2c 20 70 50 61 72 65 6e 74 2d 3e 7a 4e  , 0, pParent->zN
e3f0: 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 78 20  ame);.        x 
e400: 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74  = sqlite3FkLocat
e410: 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70  eIndex(pParse, p
e420: 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49  Parent, pFK, &pI
e430: 64 78 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  dx, 0);.        
e440: 69 66 28 20 78 3d 3d 30 20 29 7b 0a 20 20 20 20  if( x==0 ){.    
e450: 20 20 20 20 20 20 69 66 28 20 70 49 64 78 3d 3d        if( pIdx==
e460: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  0 ){.           
e470: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
e480: 65 28 70 50 61 72 73 65 2c 20 69 2c 20 69 44 62  e(pParse, i, iDb
e490: 2c 20 70 50 61 72 65 6e 74 2c 20 4f 50 5f 4f 70  , pParent, OP_Op
e4a0: 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20 20  enRead);.       
e4b0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
e4c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e4d0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4f 70  eAddOp3(v, OP_Op
e4e0: 65 6e 52 65 61 64 2c 20 69 2c 20 70 49 64 78 2d  enRead, i, pIdx-
e4f0: 3e 74 6e 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20  >tnum, iDb);.   
e500: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e510: 56 64 62 65 53 65 74 50 34 4b 65 79 49 6e 66 6f  VdbeSetP4KeyInfo
e520: 28 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b 0a  (pParse, pIdx);.
e530: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
e540: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e550: 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20       k = 0;.    
e560: 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
e570: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
e580: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 50 61       assert( pPa
e590: 72 73 65 2d 3e 6e 45 72 72 3e 30 20 7c 7c 20 70  rse->nErr>0 || p
e5a0: 46 4b 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  FK==0 );.      i
e5b0: 66 28 20 70 46 4b 20 29 20 62 72 65 61 6b 3b 0a  f( pFK ) break;.
e5c0: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 73 65        if( pParse
e5d0: 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50 61 72 73  ->nTab<i ) pPars
e5e0: 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a 20 20 20  e->nTab = i;.   
e5f0: 20 20 20 61 64 64 72 54 6f 70 20 3d 20 73 71 6c     addrTop = sql
e600: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
e610: 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 30 29 3b  , OP_Rewind, 0);
e620: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
e630: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31 2c  ;.      for(i=1,
e640: 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79   pFK=pTab->pFKey
e650: 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d  ; pFK; i++, pFK=
e660: 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b  pFK->pNextFrom){
e670: 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e 74  .        pParent
e680: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
e690: 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f  ble(db, pFK->zTo
e6a0: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , zDb);.        
e6b0: 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20  pIdx = 0;.      
e6c0: 20 20 61 69 43 6f 6c 73 20 3d 20 30 3b 0a 20 20    aiCols = 0;.  
e6d0: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e        if( pParen
e6e0: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 78  t ){.          x
e6f0: 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61   = sqlite3FkLoca
e700: 74 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20  teIndex(pParse, 
e710: 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70  pParent, pFK, &p
e720: 49 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b 0a 20  Idx, &aiCols);. 
e730: 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
e740: 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 20   x==0 );.       
e750: 20 7d 0a 20 20 20 20 20 20 20 20 61 64 64 72 4f   }.        addrO
e760: 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  k = sqlite3VdbeM
e770: 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20  akeLabel(v);.   
e780: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
e790: 20 26 26 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20   && pIdx==0 ){. 
e7a0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 4b 65           int iKe
e7b0: 79 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d  y = pFK->aCol[0]
e7c0: 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  .iFrom;.        
e7d0: 20 20 61 73 73 65 72 74 28 20 69 4b 65 79 3e 3d    assert( iKey>=
e7e0: 30 20 26 26 20 69 4b 65 79 3c 70 54 61 62 2d 3e  0 && iKey<pTab->
e7f0: 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  nCol );.        
e800: 20 20 69 66 28 20 69 4b 65 79 21 3d 70 54 61 62    if( iKey!=pTab
e810: 2d 3e 69 50 4b 65 79 20 29 7b 0a 20 20 20 20 20  ->iPKey ){.     
e820: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e830: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
e840: 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c 20  olumn, 0, iKey, 
e850: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
e860: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6c 75       sqlite3Colu
e870: 6d 6e 44 65 66 61 75 6c 74 28 76 2c 20 70 54 61  mnDefault(v, pTa
e880: 62 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29  b, iKey, regRow)
e890: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
e8a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
e8b0: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65  v, OP_IsNull, re
e8c0: 67 52 6f 77 2c 20 61 64 64 72 4f 6b 29 3b 20 56  gRow, addrOk); V
e8d0: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
e8e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e8f0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
e900: 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 2c 20 72   OP_MustBeInt, r
e910: 65 67 52 6f 77 2c 20 0a 20 20 20 20 20 20 20 20  egRow, .        
e920: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e930: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
e940: 2b 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  +3); VdbeCoverag
e950: 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
e960: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
e970: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e980: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64  dOp2(v, OP_Rowid
e990: 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  , 0, regRow);.  
e9a0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e9b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e9c0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4e 6f 74 45  ddOp3(v, OP_NotE
e9d0: 78 69 73 74 73 2c 20 69 2c 20 30 2c 20 72 65 67  xists, i, 0, reg
e9e0: 52 6f 77 29 3b 20 56 64 62 65 43 6f 76 65 72 61  Row); VdbeCovera
e9f0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
ea00: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ea10: 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30  p2(v, OP_Goto, 0
ea20: 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20  , addrOk);.     
ea30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ea40: 4a 75 6d 70 48 65 72 65 28 76 2c 20 73 71 6c 69  JumpHere(v, sqli
ea50: 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64  te3VdbeCurrentAd
ea60: 64 72 28 76 29 2d 32 29 3b 0a 20 20 20 20 20 20  dr(v)-2);.      
ea70: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
ea80: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46     for(j=0; j<pF
ea90: 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20  K->nCol; j++){. 
eaa0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
eab0: 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
eac0: 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54  umnOfTable(v, pT
ead0: 61 62 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20  ab, 0,.         
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaf0: 20 20 20 61 69 43 6f 6c 73 20 3f 20 61 69 43 6f     aiCols ? aiCo
eb00: 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f  ls[j] : pFK->aCo
eb10: 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65 67 52  l[j].iFrom, regR
eb20: 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 20  ow+j);.         
eb30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
eb40: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
eb50: 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61 64 64  l, regRow+j, add
eb60: 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61  rOk); VdbeCovera
eb70: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
eb80: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66 28   }.          if(
eb90: 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20   pParent ){.    
eba0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ebb0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
ebc0: 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67 52  MakeRecord, regR
ebd0: 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72  ow, pFK->nCol, r
ebe0: 65 67 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20  egKey,.         
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64 65       sqlite3Inde
ec10: 78 41 66 66 69 6e 69 74 79 53 74 72 28 76 2c 70  xAffinityStr(v,p
ec20: 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29  Idx), pFK->nCol)
ec30: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
ec40: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49  lite3VdbeAddOp4I
ec50: 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20  nt(v, OP_Found, 
ec60: 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65  i, addrOk, regKe
ec70: 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  y, 0);.         
ec80: 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28     VdbeCoverage(
ec90: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  v);.          }.
eca0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
ecb0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ecc0: 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c  Op2(v, OP_Rowid,
ecd0: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 31 29   0, regResult+1)
ece0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
ecf0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
ed00: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 72 65  P_String8, 0, re
ed10: 67 52 65 73 75 6c 74 2b 32 2c 20 30 2c 20 0a 20  gResult+2, 0, . 
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed30: 20 20 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54           pFK->zT
ed40: 6f 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29  o, P4_TRANSIENT)
ed50: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
ed60: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
ed70: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d 31 2c 20  P_Integer, i-1, 
ed80: 72 65 67 52 65 73 75 6c 74 2b 33 29 3b 0a 20 20  regResult+3);.  
ed90: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
eda0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
edb0: 73 75 6c 74 52 6f 77 2c 20 72 65 67 52 65 73 75  sultRow, regResu
edc0: 6c 74 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20  lt, 4);.        
edd0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c  sqlite3VdbeResol
ede0: 76 65 4c 61 62 65 6c 28 76 2c 20 61 64 64 72 4f  veLabel(v, addrO
edf0: 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  k);.        sqli
ee00: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 69  te3DbFree(db, ai
ee10: 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Cols);.      }. 
ee20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ee30: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78  AddOp2(v, OP_Nex
ee40: 74 2c 20 30 2c 20 61 64 64 72 54 6f 70 2b 31 29  t, 0, addrTop+1)
ee50: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
ee60: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
ee70: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
ee80: 61 64 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a  addrTop);.    }.
ee90: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
eea0: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
eeb0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
eec0: 47 45 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f  GER) */.#endif /
eed0: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
eee0: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
eef0: 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  EY) */..#ifndef 
ef00: 4e 44 45 42 55 47 0a 20 20 63 61 73 65 20 50 72  NDEBUG.  case Pr
ef10: 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41  agTyp_PARSER_TRA
ef20: 43 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  CE: {.    if( zR
ef30: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
ef40: 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  ( sqlite3GetBool
ef50: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29  ean(zRight, 0) )
ef60: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
ef70: 33 50 61 72 73 65 72 54 72 61 63 65 28 73 74 64  3ParserTrace(std
ef80: 65 72 72 2c 20 22 70 61 72 73 65 72 3a 20 22 29  err, "parser: ")
ef90: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
efa0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
efb0: 72 73 65 72 54 72 61 63 65 28 30 2c 20 30 29 3b  rserTrace(0, 0);
efc0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
efd0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
efe0: 69 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61  if..  /* Reinsta
eff0: 6c 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e 64 20  ll the LIKE and 
f000: 47 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20  GLOB functions. 
f010: 20 54 68 65 20 76 61 72 69 61 6e 74 20 6f 66 20   The variant of 
f020: 4c 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20 77  LIKE.  ** used w
f030: 69 6c 6c 20 62 65 20 63 61 73 65 20 73 65 6e 73  ill be case sens
f040: 69 74 69 76 65 20 6f 72 20 6e 6f 74 20 64 65 70  itive or not dep
f050: 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 52 48  ending on the RH
f060: 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  S..  */.  case P
f070: 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53  ragTyp_CASE_SENS
f080: 49 54 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20  ITIVE_LIKE: {.  
f090: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
f0a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 67        sqlite3Reg
f0b0: 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f  isterLikeFunctio
f0c0: 6e 73 28 64 62 2c 20 73 71 6c 69 74 65 33 47 65  ns(db, sqlite3Ge
f0d0: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
f0e0: 20 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a   0));.    }.  }.
f0f0: 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64 65    break;..#ifnde
f100: 66 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  f SQLITE_INTEGRI
f110: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
f120: 41 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  AX.# define SQLI
f130: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
f140: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30 30  CK_ERROR_MAX 100
f150: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
f160: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
f170: 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f  EGRITY_CHECK.  /
f180: 2a 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b 5f  * Pragma "quick_
f190: 63 68 65 63 6b 22 20 69 73 20 72 65 64 75 63 65  check" is reduce
f1a0: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20  d version of .  
f1b0: 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  ** integrity_che
f1c0: 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20 64  ck designed to d
f1d0: 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61 62  etect most datab
f1e0: 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20  ase corruption. 
f1f0: 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73 74   ** without most
f200: 20 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61 64   of the overhead
f210: 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65 67   of a full integ
f220: 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f  rity-check..  */
f230: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
f240: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 3a  INTEGRITY_CHECK:
f250: 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c   {.    int i, j,
f260: 20 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20   addr, mxErr;.. 
f270: 20 20 20 2f 2a 20 43 6f 64 65 20 74 68 61 74 20     /* Code that 
f280: 61 70 70 65 61 72 73 20 61 74 20 74 68 65 20 65  appears at the e
f290: 6e 64 20 6f 66 20 74 68 65 20 69 6e 74 65 67 72  nd of the integr
f2a0: 69 74 79 20 63 68 65 63 6b 2e 20 20 49 66 20 6e  ity check.  If n
f2b0: 6f 20 65 72 72 6f 72 0a 20 20 20 20 2a 2a 20 6d  o error.    ** m
f2c0: 65 73 73 61 67 65 73 20 68 61 76 65 20 62 65 65  essages have bee
f2d0: 6e 20 67 65 6e 65 72 61 74 65 64 2c 20 6f 75 74  n generated, out
f2e0: 70 75 74 20 4f 4b 2e 20 20 4f 74 68 65 72 77 69  put OK.  Otherwi
f2f0: 73 65 20 6f 75 74 70 75 74 20 74 68 65 0a 20 20  se output the.  
f300: 20 20 2a 2a 20 65 72 72 6f 72 20 6d 65 73 73 61    ** error messa
f310: 67 65 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 74  ge.    */.    st
f320: 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69  atic const int i
f330: 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54  Ln = VDBE_OFFSET
f340: 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20  _LINENO(2);.    
f350: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
f360: 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b  eOpList endCode[
f370: 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50  ] = {.      { OP
f380: 5f 49 66 4e 65 67 2c 20 20 20 20 20 20 20 31 2c  _IfNeg,       1,
f390: 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   0,        0},  
f3a0: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
f3b0: 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20  { OP_String8,   
f3c0: 20 20 30 2c 20 33 2c 20 20 20 20 20 20 20 20 30    0, 3,        0
f3d0: 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  },    /* 1 */.  
f3e0: 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52      { OP_ResultR
f3f0: 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20 20 20 20  ow,   3, 1,     
f400: 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20     0},.    };.. 
f410: 20 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20 3d     int isQuick =
f420: 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72   (sqlite3Tolower
f430: 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27 29  (zLeft[0])=='q')
f440: 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ;..    /* If the
f450: 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 20   PRAGMA command 
f460: 77 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  was of the form 
f470: 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e 74  "PRAGMA <db>.int
f480: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20  egrity_check",. 
f490: 20 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20 69     ** then iDb i
f4a0: 73 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e 64  s set to the ind
f4b0: 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ex of the databa
f4c0: 73 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79  se identified by
f4d0: 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e   <db>..    ** In
f4e0: 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65 20   this case, the 
f4f0: 69 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61 74  integrity of dat
f500: 61 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20 69  abase iDb only i
f510: 73 20 76 65 72 69 66 69 65 64 20 62 79 0a 20 20  s verified by.  
f520: 20 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63 72    ** the VDBE cr
f530: 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20 20  eated below..   
f540: 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72   **.    ** Other
f550: 77 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f 6d  wise, if the com
f560: 6d 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79 20  mand was simply 
f570: 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74  "PRAGMA integrit
f580: 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20 20  y_check" (or.   
f590: 20 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69 63   ** "PRAGMA quic
f5a0: 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e 20  k_check"), then 
f5b0: 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 30 2e  iDb is set to 0.
f5c0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 73   In this case, s
f5d0: 65 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74 6f  et iDb.    ** to
f5e0: 20 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e 64   -1 here, to ind
f5f0: 69 63 61 74 65 20 74 68 61 74 20 74 68 65 20 56  icate that the V
f600: 44 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69 66  DBE should verif
f610: 79 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 0a  y the integrity.
f620: 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61 74      ** of all at
f630: 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
f640: 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74  .  */.    assert
f650: 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ( iDb>=0 );.    
f660: 61 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20 7c  assert( iDb==0 |
f670: 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20 20  | pId2->z );.   
f680: 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30 20   if( pId2->z==0 
f690: 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20 20  ) iDb = -1;..   
f6a0: 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 74   /* Initialize t
f6b0: 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20  he VDBE program 
f6c0: 2a 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  */.    pParse->n
f6d0: 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 71 6c  Mem = 6;.    sql
f6e0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
f6f0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71  ls(v, 1);.    sq
f700: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
f710: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
f720: 45 5f 4e 41 4d 45 2c 20 22 69 6e 74 65 67 72 69  E_NAME, "integri
f730: 74 79 5f 63 68 65 63 6b 22 2c 20 53 51 4c 49 54  ty_check", SQLIT
f740: 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20  E_STATIC);..    
f750: 2f 2a 20 53 65 74 20 74 68 65 20 6d 61 78 69 6d  /* Set the maxim
f760: 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74 20 2a  um error count *
f770: 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d 20 53 51  /.    mxErr = SQ
f780: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
f790: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a  HECK_ERROR_MAX;.
f7a0: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
f7b0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  {.      sqlite3G
f7c0: 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20  etInt32(zRight, 
f7d0: 26 6d 78 45 72 72 29 3b 0a 20 20 20 20 20 20 69  &mxErr);.      i
f7e0: 66 28 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a 20  f( mxErr<=0 ){. 
f7f0: 20 20 20 20 20 20 20 6d 78 45 72 72 20 3d 20 53         mxErr = S
f800: 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f  QLITE_INTEGRITY_
f810: 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b  CHECK_ERROR_MAX;
f820: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
f830: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f840: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
f850: 65 72 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20 20  er, mxErr, 1);  
f860: 2f 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73 20  /* reg[1] holds 
f870: 65 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a 0a  errors left */..
f880: 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74      /* Do an int
f890: 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e 20  egrity check on 
f8a0: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 66 69  each database fi
f8b0: 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 3d  le */.    for(i=
f8c0: 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
f8d0: 2b 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45 6c  +){.      HashEl
f8e0: 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20 48 61 73  em *x;.      Has
f8f0: 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20 20  h *pTbls;.      
f900: 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20 20  int cnt = 0;..  
f910: 20 20 20 20 69 66 28 20 4f 4d 49 54 5f 54 45 4d      if( OMIT_TEM
f920: 50 44 42 20 26 26 20 69 3d 3d 31 20 29 20 63 6f  PDB && i==1 ) co
f930: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69 66  ntinue;.      if
f940: 28 20 69 44 62 3e 3d 30 20 26 26 20 69 21 3d 69  ( iDb>=0 && i!=i
f950: 44 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a  Db ) continue;..
f960: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
f970: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
f980: 61 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20 20  arse, i);.      
f990: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
f9a0: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
f9b0: 66 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61 6c  fPos, 1); /* Hal
f9c0: 74 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f  t if out of erro
f9d0: 72 73 20 2a 2f 0a 20 20 20 20 20 20 56 64 62 65  rs */.      Vdbe
f9e0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
f9f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
fa00: 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  dOp2(v, OP_Halt,
fa10: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71   0, 0);.      sq
fa20: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
fa30: 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20  e(v, addr);..   
fa40: 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65     /* Do an inte
fa50: 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20 74  grity check of t
fa60: 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20 20  he B-Tree.      
fa70: 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65 67 69  **.      ** Begi
fa80: 6e 20 62 79 20 66 69 6c 6c 69 6e 67 20 72 65 67  n by filling reg
fa90: 69 73 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e 2e  isters 2, 3, ...
faa0: 20 77 69 74 68 20 74 68 65 20 72 6f 6f 74 20 70   with the root p
fab0: 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20 20  ages numbers.   
fac0: 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74 61     ** for all ta
fad0: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
fae0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
faf0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
fb00: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
fb10: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
fb20: 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20 20  db, i, 0) );.   
fb30: 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d 3e     pTbls = &db->
fb40: 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[i].pSchema->
fb50: 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20 66  tblHash;.      f
fb60: 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46  or(x=sqliteHashF
fb70: 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b 20  irst(pTbls); x; 
fb80: 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  x=sqliteHashNext
fb90: 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61  (x)){.        Ta
fba0: 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69  ble *pTab = sqli
fbb0: 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20  teHashData(x);. 
fbc0: 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49         Index *pI
fbd0: 64 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  dx;.        if( 
fbe0: 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29  HasRowid(pTab) )
fbf0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
fc00: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
fc10: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54 61   OP_Integer, pTa
fc20: 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b  b->tnum, 2+cnt);
fc30: 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43  .          VdbeC
fc40: 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22 2c  omment((v, "%s",
fc50: 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b 0a   pTab->zName));.
fc60: 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b            cnt++;
fc70: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
fc80: 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62     for(pIdx=pTab
fc90: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
fca0: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
fcb0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
fcc0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
fcd0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49  , OP_Integer, pI
fce0: 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29  dx->tnum, 2+cnt)
fcf0: 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65  ;.          Vdbe
fd00: 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22  Comment((v, "%s"
fd10: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 29 3b  , pIdx->zName));
fd20: 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b  .          cnt++
fd30: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
fd40: 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61    }..      /* Ma
fd50: 6b 65 20 73 75 72 65 20 73 75 66 66 69 63 69 65  ke sure sufficie
fd60: 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67  nt number of reg
fd70: 69 73 74 65 72 73 20 68 61 76 65 20 62 65 65 6e  isters have been
fd80: 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
fd90: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
fda0: 20 3d 20 4d 41 58 28 20 70 50 61 72 73 65 2d 3e   = MAX( pParse->
fdb0: 6e 4d 65 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a 0a  nMem, cnt+8 );..
fdc0: 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65 20        /* Do the 
fdd0: 62 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74 79  b-tree integrity
fde0: 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20 20   checks */.     
fdf0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
fe00: 70 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72 69  p3(v, OP_Integri
fe10: 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31 29  tyCk, 2, cnt, 1)
fe20: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
fe30: 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 28  dbeChangeP5(v, (
fe40: 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64 64  u8)i);.      add
fe50: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
fe60: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp1(v, OP_IsNu
fe70: 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f 76 65  ll, 2); VdbeCove
fe80: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73  rage(v);.      s
fe90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
fea0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
feb0: 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 3, 0,.       
fec0: 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66    sqlite3MPrintf
fed0: 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74  (db, "*** in dat
fee0: 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c  abase %s ***\n",
fef0: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
ff00: 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34 5f  e),.         P4_
ff10: 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20  DYNAMIC);.      
ff20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ff30: 33 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c  3(v, OP_Move, 2,
ff40: 20 34 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71   4, 1);.      sq
ff50: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
ff60: 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c  v, OP_Concat, 4,
ff70: 20 33 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71   3, 2);.      sq
ff80: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
ff90: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
ffa0: 20 32 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71   2, 1);.      sq
ffb0: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
ffc0: 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20  e(v, addr);..   
ffd0: 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20     /* Make sure 
ffe0: 61 6c 6c 20 74 68 65 20 69 6e 64 69 63 65 73 20  all the indices 
fff0: 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20  are constructed 
10000 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20 20 20  correctly..     
10010 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28 78 3d   */.      for(x=
10020 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
10030 70 54 62 6c 73 29 3b 20 78 20 26 26 20 21 69 73  pTbls); x && !is
10040 51 75 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48  Quick; x=sqliteH
10050 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20  ashNext(x)){.   
10060 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62       Table *pTab
10070 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74   = sqliteHashDat
10080 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e  a(x);.        In
10090 64 65 78 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b  dex *pIdx, *pPk;
100a0 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a  .        Index *
100b0 70 50 72 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20  pPrior = 0;.    
100c0 20 20 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b      int loopTop;
100d0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 44 61  .        int iDa
100e0 74 61 43 75 72 2c 20 69 49 64 78 43 75 72 3b 0a  taCur, iIdxCur;.
100f0 20 20 20 20 20 20 20 20 69 6e 74 20 72 31 20 3d          int r1 =
10100 20 2d 31 3b 0a 0a 20 20 20 20 20 20 20 20 69 66   -1;..        if
10110 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d  ( pTab->pIndex==
10120 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
10130 20 20 20 20 20 20 70 50 6b 20 3d 20 48 61 73 52        pPk = HasR
10140 6f 77 69 64 28 70 54 61 62 29 20 3f 20 30 20 3a  owid(pTab) ? 0 :
10150 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b   sqlite3PrimaryK
10160 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20  eyIndex(pTab);. 
10170 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71         addr = sq
10180 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
10190 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
101a0 20 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75 74    /* Stop if out
101b0 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20   of errors */.  
101c0 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61        VdbeCovera
101d0 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73  ge(v);.        s
101e0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
101f0 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20  (v, OP_Halt, 0, 
10200 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
10210 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
10220 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 20 20  v, addr);.      
10230 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63    sqlite3ExprCac
10240 68 65 43 6c 65 61 72 28 70 50 61 72 73 65 29 3b  heClear(pParse);
10250 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
10260 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69  OpenTableAndIndi
10270 63 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62  ces(pParse, pTab
10280 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 0a 20  , OP_OpenRead,. 
10290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102b0 20 20 31 2c 20 30 2c 20 26 69 44 61 74 61 43 75    1, 0, &iDataCu
102c0 72 2c 20 26 69 49 64 78 43 75 72 29 3b 0a 20 20  r, &iIdxCur);.  
102d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
102e0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
102f0 74 65 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20 20  teger, 0, 7);.  
10300 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
10310 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
10320 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
10330 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a  x->pNext, j++){.
10340 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10350 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10360 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 38 2b  P_Integer, 0, 8+
10370 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e 74  j); /* index ent
10380 72 69 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  ries counter */.
10390 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
103a0 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
103b0 20 4d 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d 65   MAX(pParse->nMe
103c0 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20 20 20 20 20  m, 8+j);.       
103d0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
103e0 70 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c  p2(v, OP_Rewind,
103f0 20 69 44 61 74 61 43 75 72 2c 20 30 29 3b 20 56   iDataCur, 0); V
10400 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
10410 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70 20          loopTop 
10420 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
10430 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
10440 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , 7, 1);.       
10450 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20   /* Verify that 
10460 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6c  all NOT NULL col
10470 75 6d 6e 73 20 72 65 61 6c 6c 79 20 61 72 65 20  umns really are 
10480 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  NOT NULL */.    
10490 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70      for(j=0; j<p
104a0 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b  Tab->nCol; j++){
104b0 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20  .          char 
104c0 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20 20 20 20  *zErr;.         
104d0 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 3b   int jmp2, jmp3;
104e0 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 6a  .          if( j
104f0 3d 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 20  ==pTab->iPKey ) 
10500 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
10510 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43      if( pTab->aC
10520 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30  ol[j].notNull==0
10530 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
10540 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
10550 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
10560 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20  fTable(v, pTab, 
10570 69 44 61 74 61 43 75 72 2c 20 6a 2c 20 33 29 3b  iDataCur, j, 3);
10580 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10590 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28 76  e3VdbeChangeP5(v
105a0 2c 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  , OPFLAG_TYPEOFA
105b0 52 47 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a  RG);.          j
105c0 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp2 = sqlite3Vdb
105d0 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 6f  eAddOp1(v, OP_No
105e0 74 4e 75 6c 6c 2c 20 33 29 3b 20 56 64 62 65 43  tNull, 3); VdbeC
105f0 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
10600 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10610 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
10620 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a  dImm, 1, -1); /*
10630 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72   Decrement error
10640 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20   limit */.      
10650 20 20 20 20 7a 45 72 72 20 3d 20 73 71 6c 69 74      zErr = sqlit
10660 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 4e  e3MPrintf(db, "N
10670 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 25 73 2e  ULL value in %s.
10680 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  %s", pTab->zName
10690 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
106a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106b0 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e  pTab->aCol[j].zN
106c0 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ame);.          
106d0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
106e0 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
106f0 20 30 2c 20 33 2c 20 30 2c 20 7a 45 72 72 2c 20   0, 3, 0, zErr, 
10700 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20  P4_DYNAMIC);.   
10710 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10720 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
10730 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b  esultRow, 3, 1);
10740 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 33 20  .          jmp3 
10750 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
10760 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
10770 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   1); VdbeCoverag
10780 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
10790 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
107a0 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20  0(v, OP_Halt);. 
107b0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
107c0 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
107d0 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp2);.         
107e0 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
107f0 48 65 72 65 28 76 2c 20 6a 6d 70 33 29 3b 0a 20  Here(v, jmp3);. 
10800 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
10810 20 2f 2a 20 56 61 6c 69 64 61 74 65 20 69 6e 64   /* Validate ind
10820 65 78 20 65 6e 74 72 69 65 73 20 66 6f 72 20 74  ex entries for t
10830 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 2a  he current row *
10840 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  /.        for(j=
10850 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
10860 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
10870 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
10880 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e  +){.          in
10890 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20 6a 6d  t jmp2, jmp3, jm
108a0 70 34 2c 20 6a 6d 70 35 3b 0a 20 20 20 20 20 20  p4, jmp5;.      
108b0 20 20 20 20 69 6e 74 20 63 6b 55 6e 69 71 20 3d      int ckUniq =
108c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
108d0 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20  Label(v);.      
108e0 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64      if( pPk==pId
108f0 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  x ) continue;.  
10900 20 20 20 20 20 20 20 20 72 31 20 3d 20 73 71 6c          r1 = sql
10910 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65  ite3GenerateInde
10920 78 4b 65 79 28 70 50 61 72 73 65 2c 20 70 49 64  xKey(pParse, pId
10930 78 2c 20 69 44 61 74 61 43 75 72 2c 20 30 2c 20  x, iDataCur, 0, 
10940 30 2c 20 26 6a 6d 70 33 2c 0a 20 20 20 20 20 20  0, &jmp3,.      
10950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10970 20 70 50 72 69 6f 72 2c 20 72 31 29 3b 0a 20 20   pPrior, r1);.  
10980 20 20 20 20 20 20 20 20 70 50 72 69 6f 72 20 3d          pPrior =
10990 20 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 20   pIdx;.         
109a0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
109b0 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
109c0 20 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20 69 6e   8+j, 1);  /* in
109d0 63 72 65 6d 65 6e 74 20 65 6e 74 72 79 20 63 6f  crement entry co
109e0 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  unt */.         
109f0 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74 20   /* Verify that 
10a00 61 6e 20 69 6e 64 65 78 20 65 6e 74 72 79 20 65  an index entry e
10a10 78 69 73 74 73 20 66 6f 72 20 74 68 65 20 63 75  xists for the cu
10a20 72 72 65 6e 74 20 74 61 62 6c 65 20 72 6f 77 20  rrent table row 
10a30 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  */.          jmp
10a40 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  2 = sqlite3VdbeA
10a50 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46  ddOp4Int(v, OP_F
10a60 6f 75 6e 64 2c 20 69 49 64 78 43 75 72 2b 6a 2c  ound, iIdxCur+j,
10a70 20 63 6b 55 6e 69 71 2c 20 72 31 2c 0a 20 20 20   ckUniq, r1,.   
10a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10aa0 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e     pIdx->nColumn
10ab0 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
10ac0 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
10ad0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10ae0 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
10af0 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65   -1); /* Decreme
10b00 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a  nt error limit *
10b10 2f 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  /.          sqli
10b20 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
10b30 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
10b40 33 2c 20 30 2c 20 22 72 6f 77 20 22 2c 20 50 34  3, 0, "row ", P4
10b50 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
10b60 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10b70 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
10b80 61 74 2c 20 37 2c 20 33 2c 20 33 29 3b 0a 20 20  at, 7, 3, 3);.  
10b90 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10ba0 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
10bb0 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30  String8, 0, 4, 0
10bc0 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10be0 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e   missing from in
10bf0 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43  dex ", P4_STATIC
10c00 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10c10 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
10c20 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20  , OP_Concat, 4, 
10c30 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 3);.         
10c40 20 6a 6d 70 35 20 3d 20 73 71 6c 69 74 65 33 56   jmp5 = sqlite3V
10c50 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
10c60 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30  String8, 0, 4, 0
10c70 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c90 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d 65       pIdx->zName
10ca0 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b  , P4_TRANSIENT);
10cb0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10cc0 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
10cd0 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c  OP_Concat, 4, 3,
10ce0 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
10cf0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10d00 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
10d10 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , 3, 1);.       
10d20 20 20 20 6a 6d 70 34 20 3d 20 73 71 6c 69 74 65     jmp4 = sqlite
10d30 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
10d40 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56 64 62  P_IfPos, 1); Vdb
10d50 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
10d60 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10d70 64 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f  dbeAddOp0(v, OP_
10d80 48 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20  Halt);.         
10d90 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
10da0 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20  Here(v, jmp2);. 
10db0 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
10dc0 55 4e 49 51 55 45 20 69 6e 64 65 78 65 73 2c 20  UNIQUE indexes, 
10dd0 76 65 72 69 66 79 20 74 68 61 74 20 6f 6e 6c 79  verify that only
10de0 20 6f 6e 65 20 65 6e 74 72 79 20 65 78 69 73 74   one entry exist
10df0 73 20 77 69 74 68 20 74 68 65 0a 20 20 20 20 20  s with the.     
10e00 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20       ** current 
10e10 6b 65 79 2e 20 20 54 68 65 20 65 6e 74 72 79 20  key.  The entry 
10e20 69 73 20 75 6e 69 71 75 65 20 69 66 20 28 31 29  is unique if (1)
10e30 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 69 73 20 4e   any column is N
10e40 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 2a 2a  ULL.          **
10e50 20 6f 72 20 28 32 29 20 74 68 65 20 6e 65 78 74   or (2) the next
10e60 20 65 6e 74 72 79 20 68 61 73 20 61 20 64 69 66   entry has a dif
10e70 66 65 72 65 6e 74 20 6b 65 79 20 2a 2f 0a 20 20  ferent key */.  
10e80 20 20 20 20 20 20 20 20 69 66 28 20 49 73 55 6e          if( IsUn
10e90 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29 20  iqueIndex(pIdx) 
10ea0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ){.            i
10eb0 6e 74 20 75 6e 69 71 4f 6b 20 3d 20 73 71 6c 69  nt uniqOk = sqli
10ec0 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c  te3VdbeMakeLabel
10ed0 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
10ee0 20 69 6e 74 20 6a 6d 70 36 3b 0a 20 20 20 20 20   int jmp6;.     
10ef0 20 20 20 20 20 20 20 69 6e 74 20 6b 6b 3b 0a 20         int kk;. 
10f00 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b             for(k
10f10 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78 2d 3e 6e 4b  k=0; kk<pIdx->nK
10f20 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20 20  eyCol; kk++){.  
10f30 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
10f40 69 43 6f 6c 20 3d 20 70 49 64 78 2d 3e 61 69 43  iCol = pIdx->aiC
10f50 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20 20 20  olumn[kk];.     
10f60 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28           assert(
10f70 20 69 43 6f 6c 3e 3d 30 20 26 26 20 69 43 6f 6c   iCol>=0 && iCol
10f80 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20  <pTab->nCol );. 
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28               if(
10fa0 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c   pTab->aCol[iCol
10fb0 5d 2e 6e 6f 74 4e 75 6c 6c 20 29 20 63 6f 6e 74  ].notNull ) cont
10fc0 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
10fd0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10fe0 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp2(v, OP_IsNu
10ff0 6c 6c 2c 20 72 31 2b 6b 6b 2c 20 75 6e 69 71 4f  ll, r1+kk, uniqO
11000 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  k);.            
11010 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76    VdbeCoverage(v
11020 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  );.            }
11030 0a 20 20 20 20 20 20 20 20 20 20 20 20 6a 6d 70  .            jmp
11040 36 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  6 = sqlite3VdbeA
11050 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 65 78 74  ddOp1(v, OP_Next
11060 2c 20 69 49 64 78 43 75 72 2b 6a 29 3b 20 56 64  , iIdxCur+j); Vd
11070 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
11080 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
11090 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
110a0 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 75 6e 69 71  OP_Goto, 0, uniq
110b0 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Ok);.           
110c0 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
110d0 48 65 72 65 28 76 2c 20 6a 6d 70 36 29 3b 0a 20  Here(v, jmp6);. 
110e0 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
110f0 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28  e3VdbeAddOp4Int(
11100 76 2c 20 4f 50 5f 49 64 78 47 54 2c 20 69 49 64  v, OP_IdxGT, iId
11110 78 43 75 72 2b 6a 2c 20 75 6e 69 71 4f 6b 2c 20  xCur+j, uniqOk, 
11120 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  r1,.            
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 20 20 20 20 20 70 49 64 78 2d 3e 6e 4b 65 79 43       pIdx->nKeyC
11150 6f 6c 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  ol); VdbeCoverag
11160 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
11170 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11180 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
11190 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63  , 1, -1); /* Dec
111a0 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d  rement error lim
111b0 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
111c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
111d0 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
111e0 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20  8, 0, 3, 0,.    
111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11200 20 20 20 20 20 20 20 20 20 20 22 6e 6f 6e 2d 75            "non-u
11210 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20 69  nique entry in i
11220 6e 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49  ndex ", P4_STATI
11230 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  C);.            
11240 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11250 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c  2(v, OP_Goto, 0,
11260 20 6a 6d 70 35 29 3b 0a 20 20 20 20 20 20 20 20   jmp5);.        
11270 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
11280 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 75  esolveLabel(v, u
11290 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  niqOk);.        
112a0 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71    }.          sq
112b0 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
112c0 65 28 76 2c 20 6a 6d 70 34 29 3b 0a 20 20 20 20  e(v, jmp4);.    
112d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
112e0 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c  olvePartIdxLabel
112f0 28 70 50 61 72 73 65 2c 20 6a 6d 70 33 29 3b 0a  (pParse, jmp3);.
11300 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
11310 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11320 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20  Op2(v, OP_Next, 
11330 69 44 61 74 61 43 75 72 2c 20 6c 6f 6f 70 54 6f  iDataCur, loopTo
11340 70 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  p); VdbeCoverage
11350 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  (v);.        sql
11360 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
11370 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a  (v, loopTop-1);.
11380 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
11390 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 20  MIT_BTREECOUNT. 
113a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
113b0 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
113c0 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
113d0 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
113e0 20 20 20 20 20 20 20 22 77 72 6f 6e 67 20 23 20         "wrong # 
113f0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e  of entries in in
11400 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43  dex ", P4_STATIC
11410 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  );.        for(j
11420 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
11430 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
11440 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
11450 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
11460 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63  f( pPk==pIdx ) c
11470 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
11480 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
11490 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72  3VdbeCurrentAddr
114a0 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
114b0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
114c0 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c  (v, OP_IfPos, 1,
114d0 20 61 64 64 72 2b 32 29 3b 20 56 64 62 65 43 6f   addr+2); VdbeCo
114e0 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
114f0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11500 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c  AddOp2(v, OP_Hal
11510 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  t, 0, 0);.      
11520 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
11530 64 64 4f 70 32 28 76 2c 20 4f 50 5f 43 6f 75 6e  ddOp2(v, OP_Coun
11540 74 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 33 29  t, iIdxCur+j, 3)
11550 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11560 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
11570 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c 20 61 64 64   OP_Eq, 8+j, add
11580 72 2b 38 2c 20 33 29 3b 20 56 64 62 65 43 6f 76  r+8, 3); VdbeCov
11590 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
115a0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
115b0 68 61 6e 67 65 50 35 28 76 2c 20 53 51 4c 49 54  hangeP5(v, SQLIT
115c0 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a 20 20 20 20  E_NOTNULL);.    
115d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
115e0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
115f0 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20  dImm, 1, -1);.  
11600 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11610 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
11620 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
11630 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50  , pIdx->zName, P
11640 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  4_TRANSIENT);.  
11650 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11660 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
11670 43 6f 6e 63 61 74 2c 20 33 2c 20 32 2c 20 37 29  Concat, 3, 2, 7)
11680 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11690 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
116a0 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 37   OP_ResultRow, 7
116b0 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 1);.        }.
116c0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
116d0 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
116e0 20 2a 2f 0a 20 20 20 20 20 20 7d 20 0a 20 20 20   */.      } .   
116f0 20 7d 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71   }.    addr = sq
11700 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
11710 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
11720 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64  endCode), endCod
11730 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 73 71 6c  e, iLn);.    sql
11740 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 33  ite3VdbeChangeP3
11750 28 76 2c 20 61 64 64 72 2c 20 2d 6d 78 45 72 72  (v, addr, -mxErr
11760 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
11770 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
11780 64 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  dr);.    sqlite3
11790 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20  VdbeChangeP4(v, 
117a0 61 64 64 72 2b 31 2c 20 22 6f 6b 22 2c 20 50 34  addr+1, "ok", P4
117b0 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 0a 20 20  _STATIC);.  }.  
117c0 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
117d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54   SQLITE_OMIT_INT
117e0 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a  EGRITY_CHECK */.
117f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
11800 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a  OMIT_UTF16.  /*.
11810 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e    **   PRAGMA en
11820 63 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52  coding.  **   PR
11830 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20  AGMA encoding = 
11840 22 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36 22  "utf-8"|"utf-16"
11850 7c 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74 66  |"utf-16le"|"utf
11860 2d 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  -16be".  **.  **
11870 20 49 6e 20 69 74 73 20 66 69 72 73 74 20 66 6f   In its first fo
11880 72 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61 20  rm, this pragma 
11890 72 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63 6f  returns the enco
118a0 64 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e  ding of the main
118b0 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  .  ** database. 
118c0 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
118d0 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a  is not initializ
118e0 65 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69 61  ed, it is initia
118f0 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a  lized now..  **.
11900 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20    ** The second 
11910 66 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72 61  form of this pra
11920 67 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  gma is a no-op i
11930 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
11940 61 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61  ase file.  ** ha
11950 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62 65  s not already be
11960 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  en initialized. 
11970 49 6e 20 74 68 69 73 20 63 61 73 65 20 69 74 20  In this case it 
11980 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c 74  sets the default
11990 0a 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74  .  ** encoding t
119a0 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64  hat will be used
119b0 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61   for the main da
119c0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 61  tabase file if a
119d0 20 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69   new file.  ** i
119e0 73 20 63 72 65 61 74 65 64 2e 20 49 66 20 61 6e  s created. If an
119f0 20 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20 64   existing main d
11a00 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73 20  atabase file is 
11a10 6f 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68 65  opened, then the
11a20 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74 65  .  ** default te
11a30 78 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20  xt encoding for 
11a40 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61 74  the existing dat
11a50 61 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a 20  abase is used.. 
11a60 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c   ** .  ** In all
11a70 20 63 61 73 65 73 20 6e 65 77 20 64 61 74 61 62   cases new datab
11a80 61 73 65 73 20 63 72 65 61 74 65 64 20 75 73 69  ases created usi
11a90 6e 67 20 74 68 65 20 41 54 54 41 43 48 20 63 6f  ng the ATTACH co
11aa0 6d 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63  mmand are.  ** c
11ab0 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
11ac0 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20 74  e same default t
11ad0 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20  ext encoding as 
11ae0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
11af0 65 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d  e. If.  ** the m
11b00 61 69 6e 20 64 61 74 61 62 61 73 65 20 68 61 73  ain database has
11b10 20 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69 61   not been initia
11b20 6c 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72 65  lized and/or cre
11b30 61 74 65 64 20 77 68 65 6e 20 41 54 54 41 43 48  ated when ATTACH
11b40 0a 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74 65  .  ** is execute
11b50 64 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20  d, this is done 
11b60 62 65 66 6f 72 65 20 74 68 65 20 41 54 54 41 43  before the ATTAC
11b70 48 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a  H operation..  *
11b80 2a 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65  *.  ** In the se
11b90 63 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20 70  cond form this p
11ba0 72 61 67 6d 61 20 73 65 74 73 20 74 68 65 20 74  ragma sets the t
11bb0 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20  ext encoding to 
11bc0 62 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20  be used in.  ** 
11bd0 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69 6c  new database fil
11be0 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
11bf0 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 68   this database h
11c00 61 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c  andle. It is onl
11c10 79 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69 66  y.  ** useful if
11c20 20 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61   invoked immedia
11c30 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6d  tely after the m
11c40 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a 20  ain database i. 
11c50 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
11c60 79 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20  yp_ENCODING: {. 
11c70 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
11c80 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b  struct EncName {
11c90 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61  .      char *zNa
11ca0 6d 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e 63  me;.      u8 enc
11cb0 3b 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73  ;.    } encnames
11cc0 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22  [] = {.      { "
11cd0 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54  UTF8",     SQLIT
11ce0 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c  E_UTF8        },
11cf0 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22  .      { "UTF-8"
11d00 2c 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38  ,    SQLITE_UTF8
11d10 20 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d          },  /* M
11d20 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
11d30 31 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  1] */.      { "U
11d40 54 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54 45  TF-16le", SQLITE
11d50 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 20  _UTF16LE     }, 
11d60 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
11d70 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20  ent [2] */.     
11d80 20 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20 53   { "UTF-16be", S
11d90 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20  QLITE_UTF16BE   
11da0 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65    },  /* Must be
11db0 20 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a   element [3] */.
11dc0 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c 65        { "UTF16le
11dd0 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ",  SQLITE_UTF16
11de0 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20  LE     },.      
11df0 7b 20 22 55 54 46 31 36 62 65 22 2c 20 20 53 51  { "UTF16be",  SQ
11e00 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20  LITE_UTF16BE    
11e10 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46   },.      { "UTF
11e20 2d 31 36 22 2c 20 20 20 30 20 20 20 20 20 20 20  -16",   0       
11e30 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a             }, /*
11e40 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54   SQLITE_UTF16NAT
11e50 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  IVE */.      { "
11e60 55 54 46 31 36 22 2c 20 20 20 20 30 20 20 20 20  UTF16",    0    
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c                },
11e80 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36   /* SQLITE_UTF16
11e90 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20  NATIVE */.      
11ea0 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a  { 0, 0 }.    };.
11eb0 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74      const struct
11ec0 20 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a   EncName *pEnc;.
11ed0 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
11ee0 29 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41  ){    /* "PRAGMA
11ef0 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20   encoding" */.  
11f00 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 52      if( sqlite3R
11f10 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73 65  eadSchema(pParse
11f20 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f  ) ) goto pragma_
11f30 6f 75 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  out;.      sqlit
11f40 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
11f50 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  (v, 1);.      sq
11f60 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
11f70 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
11f80 45 5f 4e 41 4d 45 2c 20 22 65 6e 63 6f 64 69 6e  E_NAME, "encodin
11f90 67 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  g", SQLITE_STATI
11fa0 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
11fb0 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
11fc0 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 29  P_String8, 0, 1)
11fd0 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
11fe0 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
11ff0 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54  UTF8].enc==SQLIT
12000 45 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20  E_UTF8 );.      
12010 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73  assert( encnames
12020 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d  [SQLITE_UTF16LE]
12030 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  .enc==SQLITE_UTF
12040 31 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73  16LE );.      as
12050 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
12060 51 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65  QLITE_UTF16BE].e
12070 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
12080 42 45 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  BE );.      sqli
12090 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34 28  te3VdbeChangeP4(
120a0 76 2c 20 2d 31 2c 20 65 6e 63 6e 61 6d 65 73 5b  v, -1, encnames[
120b0 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 5d  ENC(pParse->db)]
120c0 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49  .zName, P4_STATI
120d0 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
120e0 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
120f0 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
12100 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20 20  1);.    }else{  
12110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12120 20 20 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41        /* "PRAGMA
12130 20 65 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58 22   encoding = XXX"
12140 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c   */.      /* Onl
12150 79 20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c  y change the val
12160 75 65 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e 63  ue of sqlite.enc
12170 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73 65   if the database
12180 20 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a 20   handle is not. 
12190 20 20 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69       ** initiali
121a0 7a 65 64 2e 20 49 66 20 74 68 65 20 6d 61 69 6e  zed. If the main
121b0 20 64 61 74 61 62 61 73 65 20 65 78 69 73 74 73   database exists
121c0 2c 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65  , the new sqlite
121d0 2e 65 6e 63 20 76 61 6c 75 65 0a 20 20 20 20 20  .enc value.     
121e0 20 2a 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65 72   ** will be over
121f0 77 72 69 74 74 65 6e 20 77 68 65 6e 20 74 68 65  written when the
12200 20 73 63 68 65 6d 61 20 69 73 20 6e 65 78 74 20   schema is next 
12210 6c 6f 61 64 65 64 2e 20 49 66 20 69 74 20 64 6f  loaded. If it do
12220 65 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20  es not.      ** 
12230 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c 20  already exists, 
12240 69 74 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74  it will be creat
12250 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65  ed to use the ne
12260 77 20 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75 65  w encoding value
12270 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
12280 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 21 28   if( .        !(
12290 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
122a0 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f  , 0, DB_SchemaLo
122b0 61 64 65 64 29 29 20 7c 7c 20 0a 20 20 20 20 20  aded)) || .     
122c0 20 20 20 44 62 48 61 73 50 72 6f 70 65 72 74 79     DbHasProperty
122d0 28 64 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74 79  (db, 0, DB_Empty
122e0 29 20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20  ) .      ){.    
122f0 20 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e      for(pEnc=&en
12300 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d  cnames[0]; pEnc-
12310 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b  >zName; pEnc++){
12320 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 30  .          if( 0
12330 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
12340 28 7a 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e 7a  (zRight, pEnc->z
12350 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20 20  Name) ){.       
12360 20 20 20 20 20 45 4e 43 28 70 50 61 72 73 65 2d       ENC(pParse-
12370 3e 64 62 29 20 3d 20 70 45 6e 63 2d 3e 65 6e 63  >db) = pEnc->enc
12380 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53   ? pEnc->enc : S
12390 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
123a0 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  E;.            b
123b0 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20  reak;.          
123c0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
123d0 20 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a      if( !pEnc->z
123e0 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20  Name ){.        
123f0 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
12400 67 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75 70  g(pParse, "unsup
12410 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a  ported encoding:
12420 20 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20   %s", zRight);. 
12430 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
12440 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
12450 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
12460 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20  LITE_OMIT_UTF16 
12470 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
12480 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
12490 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20  ERSION_PRAGMAS. 
124a0 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
124b0 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68  A [database.]sch
124c0 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ema_version.  **
124d0 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
124e0 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73  ase.]schema_vers
124f0 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  ion = <integer>.
12500 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    **.  **   PRAG
12510 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73  MA [database.]us
12520 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20  er_version.  ** 
12530 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
12540 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e  se.]user_version
12550 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
12560 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
12570 5b 64 61 74 61 62 61 73 65 2e 5d 66 72 65 65 6c  [database.]freel
12580 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74  ist_count = <int
12590 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
125a0 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
125b0 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f  se.]application_
125c0 69 64 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  id.  **   PRAGMA
125d0 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c   [database.]appl
125e0 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e  ication_id = <in
125f0 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
12600 20 54 68 65 20 70 72 61 67 6d 61 27 73 20 73 63   The pragma's sc
12610 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64  hema_version and
12620 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72   user_version ar
12630 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72  e used to set or
12640 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61   get.  ** the va
12650 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  lue of the schem
12660 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73  a-version and us
12670 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70  er-version, resp
12680 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20  ectively. Both. 
12690 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76   ** the schema-v
126a0 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75  ersion and the u
126b0 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20  ser-version are 
126c0 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e  32-bit signed in
126d0 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72  tegers.  ** stor
126e0 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ed in the databa
126f0 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a  se header..  **.
12700 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d    ** The schema-
12710 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c  cookie is usuall
12720 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74  y only manipulat
12730 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
12740 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a   SQLite. It.  **
12750 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
12760 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76  by SQLite whenev
12770 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  er the database 
12780 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69  schema is modifi
12790 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61  ed (by.  ** crea
127a0 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67  ting or dropping
127b0 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65   a table or inde
127c0 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76  x). The schema v
127d0 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62  ersion is used b
127e0 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61  y.  ** SQLite ea
127f0 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79 20  ch time a query 
12800 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20 65  is executed to e
12810 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 69  nsure that the i
12820 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20  nternal cache.  
12830 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  ** of the schema
12840 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69   used when compi
12850 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65  ling the SQL que
12860 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73  ry matches the s
12870 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68  chema of.  ** th
12880 65 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e  e database again
12890 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d  st which the com
128a0 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61  piled query is a
128b0 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64  ctually executed
128c0 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e  ..  ** Subvertin
128d0 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d  g this mechanism
128e0 20 62 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d   by using "PRAGM
128f0 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  A schema_version
12900 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a  " to modify.  **
12910 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
12920 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c  ion is potential
12930 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64  ly dangerous and
12940 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f   may lead to pro
12950 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65  gram.  ** crashe
12960 73 20 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f  s or database co
12970 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69  rruption. Use wi
12980 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a  th caution!.  **
12990 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76  .  ** The user-v
129a0 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73  ersion is not us
129b0 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79  ed internally by
129c0 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20   SQLite. It may 
129d0 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  be used by.  ** 
129e0 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72  applications for
129f0 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20   any purpose..  
12a00 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
12a10 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a 20  p_HEADER_VALUE: 
12a20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69  {.    int iCooki
12a30 65 3b 20 20 20 2f 2a 20 43 6f 6f 6b 69 65 20 69  e;   /* Cookie i
12a40 6e 64 65 78 2e 20 31 20 66 6f 72 20 73 63 68 65  ndex. 1 for sche
12a50 6d 61 2d 63 6f 6f 6b 69 65 2c 20 36 20 66 6f 72  ma-cookie, 6 for
12a60 20 75 73 65 72 2d 63 6f 6f 6b 69 65 2e 20 2a 2f   user-cookie. */
12a70 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
12a80 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
12a90 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 7a  );.    switch( z
12aa0 4c 65 66 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  Left[0] ){.     
12ab0 20 63 61 73 65 20 27 61 27 3a 20 63 61 73 65 20   case 'a': case 
12ac0 27 41 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f  'A':.        iCo
12ad0 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 41 50 50  okie = BTREE_APP
12ae0 4c 49 43 41 54 49 4f 4e 5f 49 44 3b 0a 20 20 20  LICATION_ID;.   
12af0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
12b00 20 20 63 61 73 65 20 27 66 27 3a 20 63 61 73 65    case 'f': case
12b10 20 27 46 27 3a 0a 20 20 20 20 20 20 20 20 69 43   'F':.        iC
12b20 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 46 52  ookie = BTREE_FR
12b30 45 45 5f 50 41 47 45 5f 43 4f 55 4e 54 3b 0a 20  EE_PAGE_COUNT;. 
12b40 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
12b50 20 20 20 20 63 61 73 65 20 27 73 27 3a 20 63 61      case 's': ca
12b60 73 65 20 27 53 27 3a 0a 20 20 20 20 20 20 20 20  se 'S':.        
12b70 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f  iCookie = BTREE_
12b80 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 3b 0a  SCHEMA_VERSION;.
12b90 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
12ba0 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20       default:.  
12bb0 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20        iCookie = 
12bc0 42 54 52 45 45 5f 55 53 45 52 5f 56 45 52 53 49  BTREE_USER_VERSI
12bd0 4f 4e 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  ON;.        brea
12be0 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  k;.    }..    if
12bf0 28 20 7a 52 69 67 68 74 20 26 26 20 69 43 6f 6f  ( zRight && iCoo
12c00 6b 69 65 21 3d 42 54 52 45 45 5f 46 52 45 45 5f  kie!=BTREE_FREE_
12c10 50 41 47 45 5f 43 4f 55 4e 54 20 29 7b 0a 20 20  PAGE_COUNT ){.  
12c20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65      /* Write the
12c30 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69   specified cooki
12c40 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20  e value */.     
12c50 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
12c60 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b  beOpList setCook
12c70 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ie[] = {.       
12c80 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
12c90 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d  n,    0,  1,  0}
12ca0 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20  ,    /* 0 */.   
12cb0 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
12cc0 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c  r,        0,  1,
12cd0 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
12ce0 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65  .        { OP_Se
12cf0 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  tCookie,      0,
12d00 20 20 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20    0,  1},    /* 
12d10 32 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20  2 */.      };.  
12d20 20 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73      int addr = s
12d30 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
12d40 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
12d50 28 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74  (setCookie), set
12d60 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20  Cookie, 0);.    
12d70 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
12d80 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69  ngeP1(v, addr, i
12d90 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
12da0 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
12db0 2c 20 61 64 64 72 2b 31 2c 20 73 71 6c 69 74 65  , addr+1, sqlite
12dc0 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
12dd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12de0 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
12df0 72 2b 32 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+2, iDb);.     
12e00 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
12e10 67 65 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20  geP2(v, addr+2, 
12e20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65  iCookie);.    }e
12e30 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65  lse{.      /* Re
12e40 61 64 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ad the specified
12e50 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f   cookie value */
12e60 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f  .      static co
12e70 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72  nst VdbeOpList r
12e80 65 61 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a  eadCookie[] = {.
12e90 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61          { OP_Tra
12ea0 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c  nsaction,     0,
12eb0 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    0,  0},    /* 
12ec0 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  0 */.        { O
12ed0 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20  P_ReadCookie,   
12ee0 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20     0,  1,  0},  
12ef0 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
12f00 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
12f10 2c 20 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20  ,       1,  1,  
12f20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  0}.      };.    
12f30 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c    int addr = sql
12f40 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
12f50 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72  t(v, ArraySize(r
12f60 65 61 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64  eadCookie), read
12f70 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a 20 20 20 20  Cookie, 0);.    
12f80 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
12f90 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69  ngeP1(v, addr, i
12fa0 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
12fb0 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
12fc0 2c 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a  , addr+1, iDb);.
12fd0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12fe0 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64  eChangeP3(v, add
12ff0 72 2b 31 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20  r+1, iCookie);. 
13000 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13010 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
13020 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
13030 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
13040 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
13050 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f  , zLeft, SQLITE_
13060 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
13070 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
13080 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
13090 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
130a0 49 4f 4e 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  ION_PRAGMAS */..
130b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
130c0 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
130d0 4e 5f 44 49 41 47 53 0a 20 20 2f 2a 0a 20 20 2a  N_DIAGS.  /*.  *
130e0 2a 20 20 20 50 52 41 47 4d 41 20 63 6f 6d 70 69  *   PRAGMA compi
130f0 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a  le_options.  **.
13100 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20    ** Return the 
13110 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 63 6f 6d  names of all com
13120 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
13130 73 20 75 73 65 64 20 69 6e 20 74 68 69 73 20 62  s used in this b
13140 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f  uild,.  ** one o
13150 70 74 69 6f 6e 20 70 65 72 20 72 6f 77 2e 0a 20  ption per row.. 
13160 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
13170 79 70 5f 43 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f  yp_COMPILE_OPTIO
13180 4e 53 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20  NS: {.    int i 
13190 3d 20 30 3b 0a 20 20 20 20 63 6f 6e 73 74 20 63  = 0;.    const c
131a0 68 61 72 20 2a 7a 4f 70 74 3b 0a 20 20 20 20 73  har *zOpt;.    s
131b0 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
131c0 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
131d0 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31  pParse->nMem = 1
131e0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
131f0 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
13200 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
13210 22 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 22  "compile_option"
13220 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
13230 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 7a 4f  ;.    while( (zO
13240 70 74 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6d  pt = sqlite3_com
13250 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69  pileoption_get(i
13260 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  ++))!=0 ){.     
13270 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
13280 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
13290 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 4f 70 74 2c  , 0, 1, 0, zOpt,
132a0 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
132b0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
132c0 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
132d0 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   1);.    }.  }. 
132e0 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
132f0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  * SQLITE_OMIT_CO
13300 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
13310 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
13320 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
13330 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
13340 20 5b 64 61 74 61 62 61 73 65 2e 5d 77 61 6c 5f   [database.]wal_
13350 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 70 61 73  checkpoint = pas
13360 73 69 76 65 7c 66 75 6c 6c 7c 72 65 73 74 61 72  sive|full|restar
13370 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63  t.  **.  ** Chec
13380 6b 70 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62  kpoint the datab
13390 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ase..  */.  case
133a0 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45   PragTyp_WAL_CHE
133b0 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69  CKPOINT: {.    i
133c0 6e 74 20 69 42 74 20 3d 20 28 70 49 64 32 2d 3e  nt iBt = (pId2->
133d0 7a 3f 69 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58  z?iDb:SQLITE_MAX
133e0 5f 41 54 54 41 43 48 45 44 29 3b 0a 20 20 20 20  _ATTACHED);.    
133f0 69 6e 74 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49  int eMode = SQLI
13400 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
13410 53 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 7a  SSIVE;.    if( z
13420 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
13430 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
13440 70 28 7a 52 69 67 68 74 2c 20 22 66 75 6c 6c 22  p(zRight, "full"
13450 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
13460 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43  eMode = SQLITE_C
13470 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a  HECKPOINT_FULL;.
13480 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
13490 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
134a0 52 69 67 68 74 2c 20 22 72 65 73 74 61 72 74 22  Right, "restart"
134b0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
134c0 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43  eMode = SQLITE_C
134d0 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
134e0 54 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  T;.      }.    }
134f0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
13500 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29  SetNumCols(v, 3)
13510 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
13520 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69  em = 3;.    sqli
13530 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
13540 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
13550 4e 41 4d 45 2c 20 22 62 75 73 79 22 2c 20 53 51  NAME, "busy", SQ
13560 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
13570 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
13580 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
13590 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 67  LNAME_NAME, "log
135a0 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
135b0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
135c0 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
135d0 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  2, COLNAME_NAME,
135e0 20 22 63 68 65 63 6b 70 6f 69 6e 74 65 64 22 2c   "checkpointed",
135f0 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
13600 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ..    sqlite3Vdb
13610 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 68  eAddOp3(v, OP_Ch
13620 65 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c 20 65  eckpoint, iBt, e
13630 4d 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20 73 71  Mode, 1);.    sq
13640 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
13650 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
13660 20 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 62 72   1, 3);.  }.  br
13670 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  eak;..  /*.  ** 
13680 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75 74    PRAGMA wal_aut
13690 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20 2a 2a  ocheckpoint.  **
136a0 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61 75     PRAGMA wal_au
136b0 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d 20 4e  tocheckpoint = N
136c0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69  .  **.  ** Confi
136d0 67 75 72 65 20 61 20 64 61 74 61 62 61 73 65 20  gure a database 
136e0 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 61 75  connection to au
136f0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68 65 63  tomatically chec
13700 6b 70 6f 69 6e 74 20 61 20 64 61 74 61 62 61 73  kpoint a databas
13710 65 0a 20 20 2a 2a 20 61 66 74 65 72 20 61 63 63  e.  ** after acc
13720 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72 61 6d  umulating N fram
13730 65 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e 20 4f  es in the log. O
13740 72 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 20  r query for the 
13750 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 20 20  current value.  
13760 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a 20 20  ** of N..  */.  
13770 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c  case PragTyp_WAL
13780 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 3a  _AUTOCHECKPOINT:
13790 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
137a0 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
137b0 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  e3_wal_autocheck
137c0 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69 74 65  point(db, sqlite
137d0 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a  3Atoi(zRight));.
137e0 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
137f0 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
13800 2c 20 22 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  , "wal_autocheck
13810 70 6f 69 6e 74 22 2c 20 0a 20 20 20 20 20 20 20  point", .       
13820 64 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61 63 6b  db->xWalCallback
13830 3d 3d 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61  ==sqlite3WalDefa
13840 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20 20 20 20 20  ultHook ? .     
13850 20 20 20 20 20 20 53 51 4c 49 54 45 5f 50 54 52        SQLITE_PTR
13860 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e 70 57 61 6c  _TO_INT(db->pWal
13870 41 72 67 29 20 3a 20 30 29 3b 0a 20 20 7d 0a 20  Arg) : 0);.  }. 
13880 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a   break;.#endif..
13890 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
138a0 41 20 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a  A shrink_memory.
138b0 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 70    **.  ** This p
138c0 72 61 67 6d 61 20 61 74 74 65 6d 70 74 73 20 74  ragma attempts t
138d0 6f 20 66 72 65 65 20 61 73 20 6d 75 63 68 20 6d  o free as much m
138e0 65 6d 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c  emory as possibl
138f0 65 20 66 72 6f 6d 20 74 68 65 0a 20 20 2a 2a 20  e from the.  ** 
13900 63 75 72 72 65 6e 74 20 64 61 74 61 62 61 73 65  current database
13910 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 2a   connection..  *
13920 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
13930 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 3a 20  _SHRINK_MEMORY: 
13940 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 64 62  {.    sqlite3_db
13950 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28  _release_memory(
13960 64 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  db);.    break;.
13970 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
13980 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d   PRAGMA busy_tim
13990 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  eout.  **   PRAG
139a0 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20  MA busy_timeout 
139b0 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61  = N.  **.  ** Ca
139c0 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75 73 79 5f  ll sqlite3_busy_
139d0 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29 2e 20  timeout(db, N). 
139e0 20 52 65 74 75 72 6e 20 74 68 65 20 63 75 72 72   Return the curr
139f0 65 6e 74 20 74 69 6d 65 6f 75 74 20 76 61 6c 75  ent timeout valu
13a00 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20 69 73  e.  ** if one is
13a10 20 73 65 74 2e 20 20 49 66 20 6e 6f 20 62 75 73   set.  If no bus
13a20 79 20 68 61 6e 64 6c 65 72 20 6f 72 20 61 20 64  y handler or a d
13a30 69 66 66 65 72 65 6e 74 20 62 75 73 79 20 68 61  ifferent busy ha
13a40 6e 64 6c 65 72 20 69 73 20 73 65 74 0a 20 20 2a  ndler is set.  *
13a50 2a 20 74 68 65 6e 20 30 20 69 73 20 72 65 74 75  * then 0 is retu
13a60 72 6e 65 64 2e 20 20 53 65 74 74 69 6e 67 20 74  rned.  Setting t
13a70 68 65 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 20  he busy_timeout 
13a80 74 6f 20 30 20 6f 72 20 6e 65 67 61 74 69 76 65  to 0 or negative
13a90 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 73 20 74  .  ** disables t
13aa0 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20 2a 2f  he timeout..  */
13ab0 0a 20 20 2f 2a 63 61 73 65 20 50 72 61 67 54 79  .  /*case PragTy
13ac0 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 2a 2f  p_BUSY_TIMEOUT*/
13ad0 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20   default: {.    
13ae0 61 73 73 65 72 74 28 20 61 50 72 61 67 6d 61 4e  assert( aPragmaN
13af0 61 6d 65 73 5b 6d 69 64 5d 2e 65 50 72 61 67 54  ames[mid].ePragT
13b00 79 70 3d 3d 50 72 61 67 54 79 70 5f 42 55 53 59  yp==PragTyp_BUSY
13b10 5f 54 49 4d 45 4f 55 54 20 29 3b 0a 20 20 20 20  _TIMEOUT );.    
13b20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
13b30 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75 73 79      sqlite3_busy
13b40 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 73 71 6c  _timeout(db, sql
13b50 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
13b60 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
13b70 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
13b80 72 73 65 2c 20 22 74 69 6d 65 6f 75 74 22 2c 20  rse, "timeout", 
13b90 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f 75 74   db->busyTimeout
13ba0 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
13bb0 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  }..  /*.  **   P
13bc0 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f  RAGMA soft_heap_
13bd0 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 20 50 52 41  limit.  **   PRA
13be0 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69  GMA soft_heap_li
13bf0 6d 69 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  mit = N.  **.  *
13c00 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73  * Call sqlite3_s
13c10 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34  oft_heap_limit64
13c20 28 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65  (N).  Return the
13c30 20 72 65 73 75 6c 74 2e 20 20 49 66 20 4e 20 69   result.  If N i
13c40 73 20 6f 6d 69 74 74 65 64 2c 0a 20 20 2a 2a 20  s omitted,.  ** 
13c50 75 73 65 20 2d 31 2e 0a 20 20 2a 2f 0a 20 20 63  use -1..  */.  c
13c60 61 73 65 20 50 72 61 67 54 79 70 5f 53 4f 46 54  ase PragTyp_SOFT
13c70 5f 48 45 41 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20  _HEAP_LIMIT: {. 
13c80 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34     sqlite3_int64
13c90 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   N;.    if( zRig
13ca0 68 74 20 26 26 20 73 71 6c 69 74 65 33 44 65 63  ht && sqlite3Dec
13cb0 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
13cc0 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f  t, &N)==SQLITE_O
13cd0 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  K ){.      sqlit
13ce0 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
13cf0 69 74 36 34 28 4e 29 3b 0a 20 20 20 20 7d 0a 20  it64(N);.    }. 
13d00 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
13d10 6e 74 28 70 50 61 72 73 65 2c 20 22 73 6f 66 74  nt(pParse, "soft
13d20 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20 20 73  _heap_limit",  s
13d30 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
13d40 5f 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b 0a 20  _limit64(-1));. 
13d50 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
13d60 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
13d70 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
13d80 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
13d90 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72  .  /*.  ** Repor
13da0 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74  t the current st
13db0 61 74 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73  ate of file logs
13dc0 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73   for all databas
13dd0 65 73 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  es.  */.  case P
13de0 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54  ragTyp_LOCK_STAT
13df0 55 53 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63  US: {.    static
13e00 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
13e10 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20  st azLockName[] 
13e20 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63  = {.      "unloc
13e30 6b 65 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20  ked", "shared", 
13e40 22 72 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e  "reserved", "pen
13e50 64 69 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76  ding", "exclusiv
13e60 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e  e".    };.    in
13e70 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  t i;.    sqlite3
13e80 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
13e90 2c 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 2);.    pParse
13ea0 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20  ->nMem = 2;.    
13eb0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
13ec0 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
13ed0 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 61 74 61 62  AME_NAME, "datab
13ee0 61 73 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ase", SQLITE_STA
13ef0 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
13f00 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
13f10 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
13f20 4d 45 2c 20 22 73 74 61 74 75 73 22 2c 20 53 51  ME, "status", SQ
13f30 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
13f40 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
13f50 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
13f60 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
13f70 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
13f80 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b 6e 6f 77  zState = "unknow
13f90 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b  n";.      int j;
13fa0 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
13fb0 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29  Db[i].zName==0 )
13fc0 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
13fd0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
13fe0 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
13ff0 2c 20 30 2c 20 31 2c 20 30 2c 20 64 62 2d 3e 61  , 0, 1, 0, db->a
14000 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f  Db[i].zName, P4_
14010 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70  STATIC);.      p
14020 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  Bt = db->aDb[i].
14030 70 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70  pBt;.      if( p
14040 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33  Bt==0 || sqlite3
14050 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3d  BtreePager(pBt)=
14060 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53  =0 ){.        zS
14070 74 61 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b  tate = "closed";
14080 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
14090 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f   sqlite3_file_co
140a0 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62  ntrol(db, i ? db
140b0 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 20 3a  ->aDb[i].zName :
140c0 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20   0, .           
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140e0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
140f0 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45  _FCNTL_LOCKSTATE
14100 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  , &j)==SQLITE_OK
14110 20 29 7b 0a 20 20 20 20 20 20 20 20 20 7a 53 74   ){.         zSt
14120 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61 6d 65  ate = azLockName
14130 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  [j];.      }.   
14140 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
14150 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
14160 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 7a 53 74  g8, 0, 2, 0, zSt
14170 61 74 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b  ate, P4_STATIC);
14180 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
14190 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
141a0 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b  esultRow, 1, 2);
141b0 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
141c0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ;.  }.#endif..#i
141d0 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f  fdef SQLITE_HAS_
141e0 43 4f 44 45 43 0a 20 20 63 61 73 65 20 50 72 61  CODEC.  case Pra
141f0 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20 20 20 20  gTyp_KEY: {.    
14200 69 66 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c  if( zRight ) sql
14210 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20  ite3_key_v2(db, 
14220 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c  zDb, zRight, sql
14230 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69  ite3Strlen30(zRi
14240 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b  ght));.    break
14250 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61  ;.  }.  case Pra
14260 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b 0a 20 20  gTyp_REKEY: {.  
14270 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20 73    if( zRight ) s
14280 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28  qlite3_rekey_v2(
14290 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c  db, zDb, zRight,
142a0 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
142b0 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62  (zRight));.    b
142c0 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65  reak;.  }.  case
142d0 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45 59 3a   PragTyp_HEXKEY:
142e0 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
142f0 74 20 29 7b 0a 20 20 20 20 20 20 75 38 20 69 42  t ){.      u8 iB
14300 79 74 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 69  yte;.      int i
14310 3b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4b 65  ;.      char zKe
14320 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72  y[40];.      for
14330 28 69 3d 30 2c 20 69 42 79 74 65 3d 30 3b 20 69  (i=0, iByte=0; i
14340 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29 2a 32 20  <sizeof(zKey)*2 
14350 26 26 20 73 71 6c 69 74 65 33 49 73 78 64 69 67  && sqlite3Isxdig
14360 69 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b 20 69  it(zRight[i]); i
14370 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 42 79  ++){.        iBy
14380 74 65 20 3d 20 28 69 42 79 74 65 3c 3c 34 29 20  te = (iByte<<4) 
14390 2b 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e  + sqlite3HexToIn
143a0 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b 0a 20 20  t(zRight[i]);.  
143b0 20 20 20 20 20 20 69 66 28 20 28 69 26 31 29 21        if( (i&1)!
143c0 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32 5d 20 3d  =0 ) zKey[i/2] =
143d0 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 7d 0a   iByte;.      }.
143e0 20 20 20 20 20 20 69 66 28 20 28 7a 4c 65 66 74        if( (zLeft
143f0 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30 78 62 20  [3] & 0xf)==0xb 
14400 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
14410 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44  e3_key_v2(db, zD
14420 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20  b, zKey, i/2);. 
14430 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
14440 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65      sqlite3_reke
14450 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b  y_v2(db, zDb, zK
14460 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20  ey, i/2);.      
14470 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
14480 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  k;.  }.#endif.#i
14490 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
144a0 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64  _HAS_CODEC) || d
144b0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
144c0 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20 63 61  ABLE_CEROD).  ca
144d0 73 65 20 50 72 61 67 54 79 70 5f 41 43 54 49 56  se PragTyp_ACTIV
144e0 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 3a 20  ATE_EXTENSIONS: 
144f0 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 23 69  if( zRight ){.#i
14500 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f  fdef SQLITE_HAS_
14510 43 4f 44 45 43 0a 20 20 20 20 69 66 28 20 73 71  CODEC.    if( sq
14520 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52  lite3StrNICmp(zR
14530 69 67 68 74 2c 20 22 73 65 65 2d 22 2c 20 34 29  ight, "see-", 4)
14540 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ==0 ){.      sql
14550 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f 73 65  ite3_activate_se
14560 65 28 26 7a 52 69 67 68 74 5b 34 5d 29 3b 0a 20  e(&zRight[4]);. 
14570 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64     }.#endif.#ifd
14580 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
14590 5f 43 45 52 4f 44 0a 20 20 20 20 69 66 28 20 73  _CEROD.    if( s
145a0 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a  qlite3StrNICmp(z
145b0 52 69 67 68 74 2c 20 22 63 65 72 6f 64 2d 22 2c  Right, "cerod-",
145c0 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   6)==0 ){.      
145d0 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65  sqlite3_activate
145e0 5f 63 65 72 6f 64 28 26 7a 52 69 67 68 74 5b 36  _cerod(&zRight[6
145f0 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
14600 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
14610 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20 45 6e 64  ndif..  } /* End
14620 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 73   of the PRAGMA s
14630 77 69 74 63 68 20 2a 2f 0a 0a 70 72 61 67 6d 61  witch */..pragma
14640 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65 33 44  _out:.  sqlite3D
14650 62 46 72 65 65 28 64 62 2c 20 7a 4c 65 66 74 29  bFree(db, zLeft)
14660 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65  ;.  sqlite3DbFre
14670 65 28 64 62 2c 20 7a 52 69 67 68 74 29 3b 0a 7d  e(db, zRight);.}
14680 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
14690 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a  TE_OMIT_PRAGMA *
146a0 2f 0a                                            /.