/ Hex Artifact Content
Login

Artifact 10f169b9650f0930a7a6df67e1387a4c2c449f38:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20  e next block of 
02e0: 63 6f 64 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20  code, including 
02f0: 74 68 65 20 50 72 61 67 54 79 70 5f 58 58 58 58  the PragTyp_XXXX
0300: 20 6d 61 63 72 6f 20 64 65 66 69 6e 69 74 69 6f   macro definitio
0310: 6e 73 20 61 6e 64 0a 2a 2a 20 74 68 65 20 61 50  ns and.** the aP
0320: 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 6f 62 6a 65  ragmaName[] obje
0330: 63 74 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f  ct is composed o
0340: 66 20 67 65 6e 65 72 61 74 65 64 20 63 6f 64 65  f generated code
0350: 2e 20 44 4f 20 4e 4f 54 20 45 44 49 54 2e 0a 2a  . DO NOT EDIT..*
0360: 2a 0a 2a 2a 20 54 6f 20 61 64 64 20 6e 65 77 20  *.** To add new 
0370: 70 72 61 67 6d 61 73 2c 20 65 64 69 74 20 74 68  pragmas, edit th
0380: 65 20 63 6f 64 65 20 69 6e 20 2e 2e 2f 74 6f 6f  e code in ../too
0390: 6c 2f 6d 6b 70 72 61 67 6d 61 74 61 62 2e 74 63  l/mkpragmatab.tc
03a0: 6c 20 61 6e 64 20 72 65 72 75 6e 0a 2a 2a 20 74  l and rerun.** t
03b0: 68 61 74 20 73 63 72 69 70 74 2e 20 20 54 68 65  hat script.  The
03c0: 6e 20 63 6f 70 79 2f 70 61 73 74 65 20 74 68 65  n copy/paste the
03d0: 20 6f 75 74 70 75 74 20 69 6e 20 70 6c 61 63 65   output in place
03e0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
03f0: 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 72  g:.*/.#define Pr
0400: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
0410: 55 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UE              
0420: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50       0.#define P
0430: 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55  ragTyp_AUTO_VACU
0440: 55 4d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UM              
0450: 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20        1.#define 
0460: 50 72 61 67 54 79 70 5f 46 4c 41 47 20 20 20 20  PragTyp_FLAG    
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0480: 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65         2.#define
0490: 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49   PragTyp_BUSY_TI
04a0: 4d 45 4f 55 54 20 20 20 20 20 20 20 20 20 20 20  MEOUT           
04b0: 20 20 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e          3.#defin
04c0: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
04d0: 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 20  SIZE            
04e0: 20 20 20 20 20 20 20 20 20 34 0a 23 64 65 66 69           4.#defi
04f0: 6e 65 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f  ne PragTyp_CASE_
0500: 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 20 20  SENSITIVE_LIKE  
0510: 20 20 20 20 20 20 20 20 20 20 35 0a 23 64 65 66            5.#def
0520: 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c  ine PragTyp_COLL
0530: 41 54 49 4f 4e 5f 4c 49 53 54 20 20 20 20 20 20  ATION_LIST      
0540: 20 20 20 20 20 20 20 20 20 20 20 36 0a 23 64 65             6.#de
0550: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4d  fine PragTyp_COM
0560: 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 20 20 20 20  PILE_OPTIONS    
0570: 20 20 20 20 20 20 20 20 20 20 20 20 37 0a 23 64              7.#d
0580: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44 41  efine PragTyp_DA
0590: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
05a0: 52 59 20 20 20 20 20 20 20 20 20 20 20 38 0a 23  RY           8.#
05b0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44  define PragTyp_D
05c0: 41 54 41 42 41 53 45 5f 4c 49 53 54 20 20 20 20  ATABASE_LIST    
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 39 0a                9.
05e0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
05f0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
0600: 5a 45 20 20 20 20 20 20 20 20 20 20 20 20 31 30  ZE            10
0610: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0620: 5f 45 4e 43 4f 44 49 4e 47 20 20 20 20 20 20 20  _ENCODING       
0630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
0640: 31 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  1.#define PragTy
0650: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48  p_FOREIGN_KEY_CH
0660: 45 43 4b 20 20 20 20 20 20 20 20 20 20 20 20 20  ECK             
0670: 31 32 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  12.#define PragT
0680: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c  yp_FOREIGN_KEY_L
0690: 49 53 54 20 20 20 20 20 20 20 20 20 20 20 20 20  IST             
06a0: 20 31 33 0a 23 64 65 66 69 6e 65 20 50 72 61 67   13.#define Prag
06b0: 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f  Typ_INCREMENTAL_
06c0: 56 41 43 55 55 4d 20 20 20 20 20 20 20 20 20 20  VACUUM          
06d0: 20 20 31 34 0a 23 64 65 66 69 6e 65 20 50 72 61    14.#define Pra
06e0: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 20  gTyp_INDEX_INFO 
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0700: 20 20 20 31 35 0a 23 64 65 66 69 6e 65 20 50 72     15.#define Pr
0710: 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54  agTyp_INDEX_LIST
0720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0730: 20 20 20 20 31 36 0a 23 64 65 66 69 6e 65 20 50      16.#define P
0740: 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59  ragTyp_INTEGRITY
0750: 5f 43 48 45 43 4b 20 20 20 20 20 20 20 20 20 20  _CHECK          
0760: 20 20 20 20 20 31 37 0a 23 64 65 66 69 6e 65 20       17.#define 
0770: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
0780: 4d 4f 44 45 20 20 20 20 20 20 20 20 20 20 20 20  MODE            
0790: 20 20 20 20 20 20 31 38 0a 23 64 65 66 69 6e 65        18.#define
07a0: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
07b0: 5f 53 49 5a 45 5f 4c 49 4d 49 54 20 20 20 20 20  _SIZE_LIMIT     
07c0: 20 20 20 20 20 20 20 31 39 0a 23 64 65 66 69 6e         19.#defin
07d0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
07e0: 52 4f 58 59 5f 46 49 4c 45 20 20 20 20 20 20 20  ROXY_FILE       
07f0: 20 20 20 20 20 20 20 20 32 30 0a 23 64 65 66 69          20.#defi
0800: 6e 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49  ne PragTyp_LOCKI
0810: 4e 47 5f 4d 4f 44 45 20 20 20 20 20 20 20 20 20  NG_MODE         
0820: 20 20 20 20 20 20 20 20 20 32 31 0a 23 64 65 66           21.#def
0830: 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41 47 45  ine PragTyp_PAGE
0840: 5f 43 4f 55 4e 54 20 20 20 20 20 20 20 20 20 20  _COUNT          
0850: 20 20 20 20 20 20 20 20 20 20 32 32 0a 23 64 65            22.#de
0860: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4d 4d 41  fine PragTyp_MMA
0870: 50 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  P_SIZE          
0880: 20 20 20 20 20 20 20 20 20 20 20 32 33 0a 23 64             23.#d
0890: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41  efine PragTyp_PA
08a0: 47 45 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20  GE_SIZE         
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 32 34 0a 23              24.#
08c0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 53  define PragTyp_S
08d0: 45 43 55 52 45 5f 44 45 4c 45 54 45 20 20 20 20  ECURE_DELETE    
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 0a               25.
08f0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
0900: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 20 20 20  SHRINK_MEMORY   
0910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 36                26
0920: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0930: 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54  _SOFT_HEAP_LIMIT
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
0950: 37 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  7.#define PragTy
0960: 70 5f 53 54 41 54 53 20 20 20 20 20 20 20 20 20  p_STATS         
0970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0980: 32 38 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  28.#define PragT
0990: 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20  yp_SYNCHRONOUS  
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 32 39 0a 23 64 65 66 69 6e 65 20 50 72 61 67   29.#define Prag
09c0: 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 20 20  Typ_TABLE_INFO  
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 20 20 33 30 0a 23 64 65 66 69 6e 65 20 50 72 61    30.#define Pra
09f0: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 20  gTyp_TEMP_STORE 
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 20 20 20 33 31 0a 23 64 65 66 69 6e 65 20 50 72     31.#define Pr
0a20: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
0a30: 5f 44 49 52 45 43 54 4f 52 59 20 20 20 20 20 20  _DIRECTORY      
0a40: 20 20 20 20 33 32 0a 23 64 65 66 69 6e 65 20 50      32.#define P
0a50: 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43  ragTyp_WAL_AUTOC
0a60: 48 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20  HECKPOINT       
0a70: 20 20 20 20 20 33 33 0a 23 64 65 66 69 6e 65 20       33.#define 
0a80: 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43  PragTyp_WAL_CHEC
0a90: 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20 20 20  KPOINT          
0aa0: 20 20 20 20 20 20 33 34 0a 23 64 65 66 69 6e 65        34.#define
0ab0: 20 50 72 61 67 54 79 70 5f 41 43 54 49 56 41 54   PragTyp_ACTIVAT
0ac0: 45 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20 20 20  E_EXTENSIONS    
0ad0: 20 20 20 20 20 20 20 33 35 0a 23 64 65 66 69 6e         35.#defin
0ae0: 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45 59  e PragTyp_HEXKEY
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b00: 20 20 20 20 20 20 20 20 33 36 0a 23 64 65 66 69          36.#defi
0b10: 6e 65 20 50 72 61 67 54 79 70 5f 4b 45 59 20 20  ne PragTyp_KEY  
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b30: 20 20 20 20 20 20 20 20 20 33 37 0a 23 64 65 66           37.#def
0b40: 69 6e 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45  ine PragTyp_REKE
0b50: 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Y               
0b60: 20 20 20 20 20 20 20 20 20 20 33 38 0a 23 64 65            38.#de
0b70: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4c 4f 43  fine PragTyp_LOC
0b80: 4b 5f 53 54 41 54 55 53 20 20 20 20 20 20 20 20  K_STATUS        
0b90: 20 20 20 20 20 20 20 20 20 20 20 33 39 0a 23 64             39.#d
0ba0: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41  efine PragTyp_PA
0bb0: 52 53 45 52 5f 54 52 41 43 45 20 20 20 20 20 20  RSER_TRACE      
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 34 30 0a 23              40.#
0bd0: 64 65 66 69 6e 65 20 50 72 61 67 46 6c 61 67 5f  define PragFlag_
0be0: 4e 65 65 64 53 63 68 65 6d 61 20 20 20 20 20 20  NeedSchema      
0bf0: 20 20 20 20 20 30 78 30 31 0a 73 74 61 74 69 63       0x01.static
0c00: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50   const struct sP
0c10: 72 61 67 6d 61 4e 61 6d 65 73 20 7b 0a 20 20 63  ragmaNames {.  c
0c20: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
0c30: 20 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65   zName;  /* Name
0c40: 20 6f 66 20 70 72 61 67 6d 61 20 2a 2f 0a 20 20   of pragma */.  
0c50: 75 38 20 65 50 72 61 67 54 79 70 3b 20 20 20 20  u8 ePragTyp;    
0c60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 61            /* Pra
0c70: 67 54 79 70 5f 58 58 58 20 76 61 6c 75 65 20 2a  gTyp_XXX value *
0c80: 2f 0a 20 20 75 38 20 6d 50 72 61 67 46 6c 61 67  /.  u8 mPragFlag
0c90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
0ca0: 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 50 72   Zero or more Pr
0cb0: 61 67 46 6c 61 67 5f 58 58 58 20 76 61 6c 75 65  agFlag_XXX value
0cc0: 73 20 2a 2f 0a 20 20 75 33 32 20 69 41 72 67 3b  s */.  u32 iArg;
0cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ce0: 20 2f 2a 20 45 78 74 72 61 20 61 72 67 75 6d 65   /* Extra argume
0cf0: 6e 74 20 2a 2f 0a 7d 20 61 50 72 61 67 6d 61 4e  nt */.} aPragmaN
0d00: 61 6d 65 73 5b 5d 20 3d 20 7b 0a 23 69 66 20 64  ames[] = {.#if d
0d10: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
0d20: 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69  S_CODEC) || defi
0d30: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
0d40: 45 5f 43 45 52 4f 44 29 0a 20 20 7b 20 2f 2a 20  E_CEROD).  { /* 
0d50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 61  zName:     */ "a
0d60: 63 74 69 76 61 74 65 5f 65 78 74 65 6e 73 69 6f  ctivate_extensio
0d70: 6e 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ns",.    /* ePra
0d80: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0d90: 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e  p_ACTIVATE_EXTEN
0da0: 53 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20 65 50  SIONS,.    /* eP
0db0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
0dc0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
0dd0: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
0de0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
0df0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
0e00: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29  VERSION_PRAGMAS)
0e10: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
0e20: 20 20 20 2a 2f 20 22 61 70 70 6c 69 63 61 74 69     */ "applicati
0e30: 6f 6e 5f 69 64 22 2c 0a 20 20 20 20 2f 2a 20 65  on_id",.    /* e
0e40: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
0e50: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
0e60: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
0e70: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
0e80: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
0e90: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
0ea0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0eb0: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
0ec0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
0ed0: 20 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63 75     */ "auto_vacu
0ee0: 75 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  um",.    /* ePra
0ef0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0f00: 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a 20  p_AUTO_VACUUM,. 
0f10: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
0f20: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
0f30: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
0f40: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
0f50: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
0f60: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0f70: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
0f80: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
0f90: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d 41  LITE_OMIT_AUTOMA
0fa0: 54 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b 20 2f  TIC_INDEX).  { /
0fb0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
0fc0: 22 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78  "automatic_index
0fd0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
0fe0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
0ff0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
1000: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1010: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1020: 2a 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  */ SQLITE_AutoIn
1030: 64 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65  dex },.#endif.#e
1040: 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ndif.  { /* zNam
1050: 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79 5f  e:     */ "busy_
1060: 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f 2a  timeout",.    /*
1070: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1080: 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
1090: 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  OUT,.    /* ePra
10a0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
10b0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
10c0: 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66 69  / 0 },.#if !defi
10d0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
10e0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
10f0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1100: 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65 22   */ "cache_size"
1110: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1120: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43  p:  */ PragTyp_C
1130: 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  ACHE_SIZE,.    /
1140: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1150: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1160: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1170: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1180: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1190: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
11a0: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
11b0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
11c0: 2f 20 22 63 61 63 68 65 5f 73 70 69 6c 6c 22 2c  / "cache_spill",
11d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
11e0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
11f0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1200: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1210: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1220: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
1230: 6c 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b  ll },.#endif.  {
1240: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1250: 2f 20 22 63 61 73 65 5f 73 65 6e 73 69 74 69 76  / "case_sensitiv
1260: 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f 2a 20  e_like",.    /* 
1270: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1280: 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49  agTyp_CASE_SENSI
1290: 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20 20 2f  TIVE_LIKE,.    /
12a0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
12b0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
12c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66       */ 0 },.#if
12d0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
12e0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
12f0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1300: 3a 20 20 20 20 20 2a 2f 20 22 63 68 65 63 6b 70  :     */ "checkp
1310: 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63 22 2c  oint_fullfsync",
1320: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1330: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1340: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1350: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1360: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1370: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
1380: 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66 0a  FSync },.#endif.
1390: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
13a0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
13b0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
13c0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
13d0: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22 2c 0a  ollation_list",.
13e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
13f0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f 4c    */ PragTyp_COL
1400: 4c 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20 20 20  LATION_LIST,.   
1410: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1420: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
1430: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1440: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1450: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
1460: 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
1470: 47 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  GS).  { /* zName
1480: 3a 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70 69 6c  :     */ "compil
1490: 65 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20 20 20  e_options",.    
14a0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
14b0: 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45   PragTyp_COMPILE
14c0: 5f 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a  _OPTIONS,.    /*
14d0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
14e0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
14f0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1500: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1510: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
1520: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
1530: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1540: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a  count_changes",.
1550: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1560: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1570: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1580: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1590: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
15a0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
15b0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
15c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
15d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
15e0: 53 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f  S) && SQLITE_OS_
15f0: 57 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  WIN.  { /* zName
1600: 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61 5f 73  :     */ "data_s
1610: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c  tore_directory",
1620: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1630: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44 41  :  */ PragTyp_DA
1640: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
1650: 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  RY,.    /* ePrag
1660: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1670: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1680: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1690: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
16a0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
16b0: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
16c0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61  me:     */ "data
16d0: 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20  base_list",.    
16e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
16f0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53   PragTyp_DATABAS
1700: 45 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a 20 65  E_LIST,.    /* e
1710: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
1720: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
1730: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1740: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1750: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1760: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
1770: 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21 64  R_PRAGMAS) && !d
1780: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1790: 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20  IT_DEPRECATED). 
17a0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
17b0: 20 2a 2f 20 22 64 65 66 61 75 6c 74 5f 63 61 63   */ "default_cac
17c0: 68 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f 2a  he_size",.    /*
17d0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
17e0: 72 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43  ragTyp_DEFAULT_C
17f0: 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  ACHE_SIZE,.    /
1800: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1810: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1820: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1830: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1840: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1850: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
1860: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66  LAG_PRAGMAS).#if
1870: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1880: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
1890: 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
18a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
18b0: 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  ER).  { /* zName
18c0: 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65 72 5f  :     */ "defer_
18d0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20  foreign_keys",. 
18e0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
18f0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
1900: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1910: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1920: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1930: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 7d  QLITE_DeferFKs }
1940: 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ,.#endif.#endif.
1950: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1960: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
1970: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
1980: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65 6d 70  ame:     */ "emp
1990: 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61  ty_result_callba
19a0: 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  cks",.    /* ePr
19b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
19c0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
19d0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
19e0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
19f0: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e 75 6c     */ SQLITE_Nul
1a00: 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23 65 6e  lCallback },.#en
1a10: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1a20: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46  (SQLITE_OMIT_UTF
1a30: 31 36 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  16).  { /* zName
1a40: 3a 20 20 20 20 20 2a 2f 20 22 65 6e 63 6f 64 69  :     */ "encodi
1a50: 6e 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ng",.    /* ePra
1a60: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1a70: 70 5f 45 4e 43 4f 44 49 4e 47 2c 0a 20 20 20 20  p_ENCODING,.    
1a80: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1a90: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1aa0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
1ab0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1ac0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
1ad0: 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
1ae0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1af0: 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 7b 20  IT_TRIGGER).  { 
1b00: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1b10: 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68   "foreign_key_ch
1b20: 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  eck",.    /* ePr
1b30: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1b40: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43  yp_FOREIGN_KEY_C
1b50: 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50 72  HECK,.    /* ePr
1b60: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
1b70: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
1b80: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
1b90: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
1ba0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
1bc0: 4e 5f 4b 45 59 29 0a 20 20 7b 20 2f 2a 20 7a 4e  N_KEY).  { /* zN
1bd0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72  ame:     */ "for
1be0: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 2c 0a  eign_key_list",.
1bf0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1c00: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f 52    */ PragTyp_FOR
1c10: 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 2c 0a 20  EIGN_KEY_LIST,. 
1c20: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1c30: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
1c40: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
1c50: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
1c60: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
1c70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1c80: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
1c90: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1ca0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
1cb0: 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
1cc0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
1cd0: 52 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a  RIGGER).  { /* z
1ce0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f  Name:     */ "fo
1cf0: 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20 20 20  reign_keys",.   
1d00: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1d10: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
1d20: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1d30: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
1d40: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
1d50: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
1d60: 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  },.#endif.#endif
1d70: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1d80: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
1d90: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
1da0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1db0: 20 20 20 20 2a 2f 20 22 66 72 65 65 6c 69 73 74      */ "freelist
1dc0: 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a 20  _count",.    /* 
1dd0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1de0: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
1df0: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
1e00: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1e10: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1e20: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1e30: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1e40: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
1e50: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1e60: 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 5f 63  :     */ "full_c
1e70: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20  olumn_names",.  
1e80: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1e90: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
1ea0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1eb0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
1ec0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
1ed0: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
1ee0: 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  s },.  { /* zNam
1ef0: 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 66  e:     */ "fullf
1f00: 73 79 6e 63 22 2c 0a 20 20 20 20 2f 2a 20 65 50  sync",.    /* eP
1f10: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1f20: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
1f30: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1f40: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1f50: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46 75      */ SQLITE_Fu
1f60: 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69  llFSync },.#endi
1f70: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
1f80: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a  LITE_HAS_CODEC).
1f90: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1fa0: 20 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a 20    */ "hexkey",. 
1fb0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1fc0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 58 4b   */ PragTyp_HEXK
1fd0: 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  EY,.    /* ePrag
1fe0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1ff0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2000: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
2010: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 68 65 78 72  me:     */ "hexr
2020: 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ekey",.    /* eP
2030: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2040: 54 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20 20  Typ_HEXKEY,.    
2050: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2060: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2070: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
2080: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
2090: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
20a0: 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20  AG_PRAGMAS).#if 
20b0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
20c0: 4f 4d 49 54 5f 43 48 45 43 4b 29 0a 20 20 7b 20  OMIT_CHECK).  { 
20d0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
20e0: 20 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f 63   "ignore_check_c
20f0: 6f 6e 73 74 72 61 69 6e 74 73 22 2c 0a 20 20 20  onstraints",.   
2100: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2110: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
2120: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2130: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
2140: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
2150: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
2160: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69   },.#endif.#endi
2170: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2180: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
2190: 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20 7a 4e  ACUUM).  { /* zN
21a0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 63  ame:     */ "inc
21b0: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 22  remental_vacuum"
21c0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
21d0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
21e0: 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55  NCREMENTAL_VACUU
21f0: 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  M,.    /* ePragF
2200: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2210: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2220: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2230: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
2240: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2250: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
2260: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
2270: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64  ame:     */ "ind
2280: 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a  ex_info",.    /*
2290: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
22a0: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46  ragTyp_INDEX_INF
22b0: 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  O,.    /* ePragF
22c0: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
22d0: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
22e0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
22f0: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2300: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64  ame:     */ "ind
2310: 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f 2a  ex_list",.    /*
2320: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2330: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53  ragTyp_INDEX_LIS
2340: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
2350: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2360: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2370: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2380: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
2390: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
23a0: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
23b0: 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a  _CHECK).  { /* z
23c0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
23d0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
23e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
23f0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54    */ PragTyp_INT
2400: 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20  EGRITY_CHECK,.  
2410: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2420: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
2430: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
2440: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
2450: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
2460: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2470: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
2480: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2490: 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f 6d     */ "journal_m
24a0: 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ode",.    /* ePr
24b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
24c0: 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 2c  yp_JOURNAL_MODE,
24d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
24e0: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
24f0: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2500: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2510: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
2520: 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e  e:     */ "journ
2530: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 0a  al_size_limit",.
2540: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2550: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f 55    */ PragTyp_JOU
2560: 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 2c  RNAL_SIZE_LIMIT,
2570: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2580: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2590: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
25a0: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  },.#endif.#if de
25b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
25c0: 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20 7a  _CODEC).  { /* z
25d0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6b 65  Name:     */ "ke
25e0: 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  y",.    /* ePrag
25f0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2600: 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72  _KEY,.    /* ePr
2610: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2620: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2630: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2640: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2650: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
2660: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
2670: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 65 67 61  me:     */ "lega
2680: 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 22 2c  cy_file_format",
2690: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
26a0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
26b0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
26c0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
26d0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
26e0: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
26f0: 6c 65 46 6d 74 20 7d 2c 0a 23 65 6e 64 69 66 0a  leFmt },.#endif.
2700: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2710: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
2720: 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c 49 54  RAGMAS) && SQLIT
2730: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
2740: 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a 20 7a 4e  _STYLE.  { /* zN
2750: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
2760: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 0a 20  k_proxy_file",. 
2770: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2780: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b   */ PragTyp_LOCK
2790: 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a 20 20 20  _PROXY_FILE,.   
27a0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
27b0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
27c0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
27d0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
27e0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
27f0: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2800: 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f 2a 20 7a  E_TEST).  { /* z
2810: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f  Name:     */ "lo
2820: 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20 20 20 20  ck_status",.    
2830: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2840: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54   PragTyp_LOCK_ST
2850: 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ATUS,.    /* ePr
2860: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2870: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2880: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2890: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
28a0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
28b0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
28c0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
28d0: 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20 20 20  king_mode",.    
28e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
28f0: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47   PragTyp_LOCKING
2900: 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _MODE,.    /* eP
2910: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2920: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2930: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2940: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6d  zName:     */ "m
2950: 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a  ax_page_count",.
2960: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2970: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47    */ PragTyp_PAG
2980: 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20  E_COUNT,.    /* 
2990: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
29a0: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
29b0: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
29c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b       */ 0 },.  {
29d0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
29e0: 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 0a 20  / "mmap_size",. 
29f0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2a00: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d 4d 41 50   */ PragTyp_MMAP
2a10: 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _SIZE,.    /* eP
2a20: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2a30: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2a40: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2a50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2a60: 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  age_count",.    
2a70: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2a80: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f   PragTyp_PAGE_CO
2a90: 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  UNT,.    /* ePra
2aa0: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2ab0: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2ac0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2ad0: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2ae0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2af0: 61 67 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f  age_size",.    /
2b00: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2b10: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
2b20: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
2b30: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2b40: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2b50: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2b60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
2b70: 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  EBUG).  { /* zNa
2b80: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 72 73  me:     */ "pars
2b90: 65 72 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f  er_trace",.    /
2ba0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2bb0: 50 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54  PragTyp_PARSER_T
2bc0: 52 41 43 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  RACE,.    /* ePr
2bd0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2be0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2bf0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2c00: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2c10: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
2c20: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
2c30: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 71 75 65 72  me:     */ "quer
2c40: 79 5f 6f 6e 6c 79 22 2c 0a 20 20 20 20 2f 2a 20  y_only",.    /* 
2c50: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2c60: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
2c70: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2c80: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2c90: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
2ca0: 51 75 65 72 79 4f 6e 6c 79 20 7d 2c 0a 23 65 6e  QueryOnly },.#en
2cb0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
2cc0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54  (SQLITE_OMIT_INT
2cd0: 45 47 52 49 54 59 5f 43 48 45 43 4b 29 0a 20 20  EGRITY_CHECK).  
2ce0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2cf0: 2a 2f 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22  */ "quick_check"
2d00: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2d10: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
2d20: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a  NTEGRITY_CHECK,.
2d30: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2d40: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
2d50: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
2d60: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
2d70: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
2d80: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2d90: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
2da0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2db0: 20 20 20 20 2a 2f 20 22 72 65 61 64 5f 75 6e 63      */ "read_unc
2dc0: 6f 6d 6d 69 74 74 65 64 22 2c 0a 20 20 20 20 2f  ommitted",.    /
2dd0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2de0: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
2df0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2e00: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
2e10: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
2e20: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
2e30: 64 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  d },.  { /* zNam
2e40: 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 63 75 72  e:     */ "recur
2e50: 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 2c 0a  sive_triggers",.
2e60: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2e70: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
2e80: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
2e90: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2ea0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2eb0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
2ec0: 72 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  rs },.#endif.#if
2ed0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2ee0: 48 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f  HAS_CODEC).  { /
2ef0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2f00: 22 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20  "rekey",.    /* 
2f10: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2f20: 61 67 54 79 70 5f 52 45 4b 45 59 2c 0a 20 20 20  agTyp_REKEY,.   
2f30: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2f40: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
2f50: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
2f60: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
2f70: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
2f80: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
2f90: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2fa0: 2f 20 22 72 65 76 65 72 73 65 5f 75 6e 6f 72 64  / "reverse_unord
2fb0: 65 72 65 64 5f 73 65 6c 65 63 74 73 22 2c 0a 20  ered_selects",. 
2fc0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2fd0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2fe0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2ff0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3000: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
3010: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
3020: 65 72 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  er },.#endif.#if
3030: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3040: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
3050: 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20  SION_PRAGMAS).  
3060: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3070: 2a 2f 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69  */ "schema_versi
3080: 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  on",.    /* ePra
3090: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
30a0: 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a  p_HEADER_VALUE,.
30b0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
30c0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
30d0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
30e0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
30f0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3100: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
3110: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3120: 20 20 20 2a 2f 20 22 73 65 63 75 72 65 5f 64 65     */ "secure_de
3130: 6c 65 74 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  lete",.    /* eP
3140: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3150: 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45 54  Typ_SECURE_DELET
3160: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
3170: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3180: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3190: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
31a0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
31b0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
31c0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
31d0: 20 20 20 20 20 2a 2f 20 22 73 68 6f 72 74 5f 63       */ "short_c
31e0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20  olumn_names",.  
31f0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3200: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
3210: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
3220: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3230: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
3240: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
3250: 65 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b  es },.#endif.  {
3260: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3270: 2f 20 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79  / "shrink_memory
3280: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3290: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
32a0: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 2c 0a 20  SHRINK_MEMORY,. 
32b0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
32c0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
32d0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
32e0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
32f0: 20 20 20 2a 2f 20 22 73 6f 66 74 5f 68 65 61 70     */ "soft_heap
3300: 5f 6c 69 6d 69 74 22 2c 0a 20 20 20 20 2f 2a 20  _limit",.    /* 
3310: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3320: 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f  agTyp_SOFT_HEAP_
3330: 4c 49 4d 49 54 2c 0a 20 20 20 20 2f 2a 20 65 50  LIMIT,.    /* eP
3340: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3350: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3360: 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65   */ 0 },.#if !de
3370: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3380: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
3390: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
33a0: 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a  TE_DEBUG).  { /*
33b0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
33c0: 73 71 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  sql_trace",.    
33d0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
33e0: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
33f0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3400: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3410: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
3420: 54 45 5f 53 71 6c 54 72 61 63 65 20 7d 2c 0a 23  TE_SqlTrace },.#
3430: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3440: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3450: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
3460: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
3470: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 74 61 74  me:     */ "stat
3480: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
3490: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
34a0: 5f 53 54 41 54 53 2c 0a 20 20 20 20 2f 2a 20 65  _STATS,.    /* e
34b0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
34c0: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
34d0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
34e0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
34f0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
3500: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3510: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  R_PRAGMAS).  { /
3520: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3530: 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a 20  "synchronous",. 
3540: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3550: 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 59 4e 43   */ PragTyp_SYNC
3560: 48 52 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a 20  HRONOUS,.    /* 
3570: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3580: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3590: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
35a0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
35b0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
35c0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48  (SQLITE_OMIT_SCH
35d0: 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  EMA_PRAGMAS).  {
35e0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
35f0: 2f 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c 0a  / "table_info",.
3600: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3610: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 41 42    */ PragTyp_TAB
3620: 4c 45 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20  LE_INFO,.    /* 
3630: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3640: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3650: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
3660: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3670: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
3680: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
3690: 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  ER_PRAGMAS).  { 
36a0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
36b0: 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a 20   "temp_store",. 
36c0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
36d0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d 50   */ PragTyp_TEMP
36e0: 5f 53 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20 65  _STORE,.    /* e
36f0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3700: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3710: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
3720: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3730: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
3740: 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  tory",.    /* eP
3750: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3760: 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44  Typ_TEMP_STORE_D
3770: 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f 2a  IRECTORY,.    /*
3780: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3790: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
37a0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
37b0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
37c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
37d0: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
37e0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
37f0: 3a 20 20 20 20 20 2a 2f 20 22 75 73 65 72 5f 76  :     */ "user_v
3800: 65 72 73 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20  ersion",.    /* 
3810: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3820: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
3830: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
3840: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3850: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3860: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
3870: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3880: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
3890: 41 53 29 0a 23 69 66 20 64 65 66 69 6e 65 64 28  AS).#if defined(
38a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
38b0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
38c0: 2a 2f 20 22 76 64 62 65 5f 61 64 64 6f 70 74 72  */ "vdbe_addoptr
38d0: 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ace",.    /* ePr
38e0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
38f0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3900: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3910: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3920: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62     */ SQLITE_Vdb
3930: 65 41 64 64 6f 70 54 72 61 63 65 20 7d 2c 0a 20  eAddopTrace },. 
3940: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
3950: 20 2a 2f 20 22 76 64 62 65 5f 64 65 62 75 67 22   */ "vdbe_debug"
3960: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3970: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
3980: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
3990: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
39a0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
39b0: 2f 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  / SQLITE_SqlTrac
39c0: 65 7c 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e|SQLITE_VdbeLis
39d0: 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65  ting|SQLITE_Vdbe
39e0: 54 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20  Trace },.  { /* 
39f0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76  zName:     */ "v
3a00: 64 62 65 5f 65 71 70 22 2c 0a 20 20 20 20 2f 2a  dbe_eqp",.    /*
3a10: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3a20: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3a30: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3a40: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3a50: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3a60: 5f 56 64 62 65 45 51 50 20 7d 2c 0a 20 20 7b 20  _VdbeEQP },.  { 
3a70: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3a80: 20 22 76 64 62 65 5f 6c 69 73 74 69 6e 67 22 2c   "vdbe_listing",
3a90: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3aa0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
3ab0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
3ac0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3ad0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3ae0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
3af0: 69 6e 67 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  ing },.  { /* zN
3b00: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62  ame:     */ "vdb
3b10: 65 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a  e_trace",.    /*
3b20: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3b30: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3b40: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3b50: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3b60: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3b70: 5f 56 64 62 65 54 72 61 63 65 20 7d 2c 0a 23 65  _VdbeTrace },.#e
3b80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20  ndif.#endif.#if 
3b90: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3ba0: 4f 4d 49 54 5f 57 41 4c 29 0a 20 20 7b 20 2f 2a  OMIT_WAL).  { /*
3bb0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3bc0: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
3bd0: 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  nt",.    /* ePra
3be0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3bf0: 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50  p_WAL_AUTOCHECKP
3c00: 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  OINT,.    /* ePr
3c10: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3c20: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3c30: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
3c40: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61  Name:     */ "wa
3c50: 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20  l_checkpoint",. 
3c60: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3c70: 20 2a 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f   */ PragTyp_WAL_
3c80: 43 48 45 43 4b 50 4f 49 4e 54 2c 0a 20 20 20 20  CHECKPOINT,.    
3c90: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
3ca0: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
3cb0: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
3cc0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
3cd0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
3ce0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
3cf0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20  FLAG_PRAGMAS).  
3d00: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3d10: 2a 2f 20 22 77 72 69 74 61 62 6c 65 5f 73 63 68  */ "writable_sch
3d20: 65 6d 61 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ema",.    /* ePr
3d30: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3d40: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3d50: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3d60: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3d70: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 57 72 69     */ SQLITE_Wri
3d80: 74 65 53 63 68 65 6d 61 7c 53 51 4c 49 54 45 5f  teSchema|SQLITE_
3d90: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 7d 2c 0a  RecoveryMode },.
3da0: 23 65 6e 64 69 66 0a 7d 3b 0a 2f 2a 20 4e 75 6d  #endif.};./* Num
3db0: 62 65 72 20 6f 66 20 70 72 61 67 6d 61 73 3a 20  ber of pragmas: 
3dc0: 35 36 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  56 on by default
3dd0: 2c 20 36 39 20 74 6f 74 61 6c 2e 20 2a 2f 0a 2f  , 69 total. */./
3de0: 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 61 75 74  * End of the aut
3df0: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
3e00: 61 74 65 64 20 70 72 61 67 6d 61 20 74 61 62 6c  ated pragma tabl
3e10: 65 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..*************
3e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
3e60: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
3e70: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
3e80: 67 20 61 73 20 61 20 73 61 66 65 74 79 20 6c 65  g as a safety le
3e90: 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30 20 66  vel.  Return 0 f
3ea0: 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72  or OFF,.** 1 for
3eb0: 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e   ON or NORMAL an
3ec0: 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52  d 2 for FULL.  R
3ed0: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
3ee0: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
3ef0: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
3f00: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46  argument.  The F
3f10: 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20 64 69  ULL option is di
3f20: 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74  sallowed.** if t
3f30: 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61  he omitFull para
3f40: 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a  meter it 1..**.*
3f50: 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  * Note that the 
3f60: 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20  values returned 
3f70: 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74 68 61  are one less tha
3f80: 74 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61  t the values tha
3f90: 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 70  t.** should be p
3fa0: 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c 69 74  assed into sqlit
3fb0: 65 33 42 74 72 65 65 53 65 74 53 61 66 65 74 79  e3BtreeSetSafety
3fc0: 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20 69 73  Level().  The is
3fd0: 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70   done.** to supp
3fe0: 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c 20 63  ort legacy SQL c
3ff0: 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65 74 79  ode.  The safety
4000: 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f 20 62   level used to b
4010: 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64  e boolean.** and
4020: 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73 20 6d   older scripts m
4030: 61 79 20 68 61 76 65 20 75 73 65 64 20 6e 75 6d  ay have used num
4040: 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46 20 61  bers 0 for OFF a
4050: 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a  nd 1 for ON..*/.
4060: 73 74 61 74 69 63 20 75 38 20 67 65 74 53 61 66  static u8 getSaf
4070: 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63  etyLevel(const c
4080: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74  har *z, int omit
4090: 46 75 6c 6c 2c 20 69 6e 74 20 64 66 6c 74 29 7b  Full, int dflt){
40a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
40c0: 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35   123456789 12345
40d0: 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69 63  6789 */.  static
40e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65 78   const char zTex
40f0: 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65  t[] = "onoffalse
4100: 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20  yestruefull";.  
4110: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20  static const u8 
4120: 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20  iOffset[] = {0, 
4130: 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20  1, 2, 4, 9, 12, 
4140: 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  16};.  static co
4150: 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d  nst u8 iLength[]
4160: 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20   = {2, 2, 3, 5, 
4170: 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74  3, 4, 4};.  stat
4180: 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61 6c  ic const u8 iVal
4190: 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30  ue[] =  {1, 0, 0
41a0: 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20  , 0, 1, 1, 2};. 
41b0: 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28   int i, n;.  if(
41c0: 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
41d0: 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  *z) ){.    retur
41e0: 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f  n (u8)sqlite3Ato
41f0: 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20  i(z);.  }.  n = 
4200: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4210: 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  z);.  for(i=0; i
4220: 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67  <ArraySize(iLeng
4230: 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b  th)-omitFull; i+
4240: 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65 6e  +){.    if( iLen
4250: 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c  gth[i]==n && sql
4260: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a 54  ite3StrNICmp(&zT
4270: 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c  ext[iOffset[i]],
4280: 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  z,n)==0 ){.     
4290: 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69   return iValue[i
42a0: 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  ];.    }.  }.  r
42b0: 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f  eturn dflt;.}../
42c0: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
42d0: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
42e0: 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
42f0: 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65  ue..*/.u8 sqlite
4300: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
4310: 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64  t char *z, int d
4320: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
4330: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
4340: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
4350: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
4360: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
4370: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
4380: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
4390: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
43a0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
43b0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
43c0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
43d0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
43e0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
43f0: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
4400: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
4410: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
4420: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
4430: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
4440: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
4450: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
4460: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
4470: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
4480: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
4490: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
44a0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
44b0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
44c0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
44d0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
44e0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
44f0: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
4500: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
4510: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
4520: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
4530: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
4540: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
4550: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
4560: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
4570: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
4580: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
4590: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
45a0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
45b0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
45c0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
45d0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
45e0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
45f0: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
4600: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
4610: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
4620: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
4630: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
4640: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
4650: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
4660: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
4670: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
4680: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
4690: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
46a0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
46b0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
46c0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
46d0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
46e0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
46f0: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
4700: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
4710: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
4720: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
4730: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
4740: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
4750: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
4760: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
4770: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
4780: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
4790: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
47a0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
47b0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
47c0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
47d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
47e0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
47f0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
4800: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
4810: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
4820: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
4830: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
4840: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
4850: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
4860: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
4870: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
4880: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
4890: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
48a0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
48b0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
48c0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
48d0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
48e0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
48f0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
4900: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
4910: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
4920: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
4930: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
4940: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
4950: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
4960: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
4970: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
4980: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
4990: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
49a0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
49b0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
49c0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
49d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
49e0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
49f0: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
4a00: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
4a10: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
4a20: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
4a30: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
4a40: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
4a50: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
4a60: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
4a70: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
4a80: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
4a90: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
4aa0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
4ab0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
4ac0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
4ad0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
4ae0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
4af0: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
4b00: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
4b10: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
4b20: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
4b30: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
4b40: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
4b50: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
4b60: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
4b70: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
4b80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
4b90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4ba0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
4bb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
4bc0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
4bd0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
4be0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
4bf0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
4c00: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
4c10: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
4c20: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4c30: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
4c40: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
4c50: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
4c60: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
4c70: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
4c80: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
4c90: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
4ca0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
4cb0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
4cc0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
4cd0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
4ce0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
4cf0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
4d00: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
4d10: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
4d20: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
4d30: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
4d40: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
4d50: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
4d60: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
4d70: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
4d80: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
4d90: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
4da0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
4db0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
4dc0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
4dd0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
4de0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
4df0: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
4e00: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
4e10: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
4e20: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
4e30: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
4e40: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
4e50: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
4e60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
4e70: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
4e80: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
4e90: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72   */../*.** Gener
4ea0: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75  ate code to retu
4eb0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  rn a single inte
4ec0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ger value..*/.st
4ed0: 61 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e  atic void return
4ee0: 53 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20  SingleInt(Parse 
4ef0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
4f00: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34  har *zLabel, i64
4f10: 20 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20   value){.  Vdbe 
4f20: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
4f30: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69  dbe(pParse);.  i
4f40: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
4f50: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a  e->nMem;.  i64 *
4f60: 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62  pI64 = sqlite3Db
4f70: 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65  MallocRaw(pParse
4f80: 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c  ->db, sizeof(val
4f90: 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34  ue));.  if( pI64
4fa0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
4fb0: 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a  I64, &value, siz
4fc0: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d  eof(value));.  }
4fd0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  .  sqlite3VdbeAd
4fe0: 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34  dOp4(v, OP_Int64
4ff0: 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68  , 0, mem, 0, (ch
5000: 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54  ar*)pI64, P4_INT
5010: 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  64);.  sqlite3Vd
5020: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
5030: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
5040: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
5050: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
5060: 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53  zLabel, SQLITE_S
5070: 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65  TATIC);.  sqlite
5080: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
5090: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d  P_ResultRow, mem
50a0: 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , 1);.}.../*.** 
50b0: 53 65 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c  Set the safety_l
50c0: 65 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66  evel and pager f
50d0: 6c 61 67 73 20 66 6f 72 20 70 61 67 65 72 20 69  lags for pager i
50e0: 44 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30  Db.  Or if iDb<0
50f0: 0a 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76 61  .** set these va
5100: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67  lues for all pag
5110: 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ers..*/.#ifndef 
5120: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
5130: 52 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63  R_PRAGMAS.static
5140: 20 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65   void setAllPage
5150: 72 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a  rFlags(sqlite3 *
5160: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61  db){.  if( db->a
5170: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
5180: 20 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61   Db *pDb = db->a
5190: 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20  Db;.    int n = 
51a0: 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73  db->nDb;.    ass
51b0: 65 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c  ert( SQLITE_Full
51c0: 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c  FSync==PAGER_FUL
51d0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
51e0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70  sert( SQLITE_Ckp
51f0: 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45  tFullFSync==PAGE
5200: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
5210: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
5220: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
5230: 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50  l==PAGER_CACHESP
5240: 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ILL );.    asser
5250: 74 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53  t( (PAGER_FULLFS
5260: 59 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54  YNC | PAGER_CKPT
5270: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
5280: 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20  ER_CACHESPILL). 
5290: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20              ==  
52a0: 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b  PAGER_FLAGS_MASK
52b0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
52c0: 28 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  (pDb->safety_lev
52d0: 65 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48  el & PAGER_SYNCH
52e0: 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44  RONOUS_MASK)==pD
52f0: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
5300: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 6e  );.    while( (n
5310: 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20 20  --) > 0 ){.     
5320: 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b   if( pDb->pBt ){
5330: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5340: 42 74 72 65 65 53 65 74 50 61 67 65 72 46 6c 61  BtreeSetPagerFla
5350: 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20  gs(pDb->pBt,.   
5360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
5370: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
5380: 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50  | (db->flags & P
5390: 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29  AGER_FLAGS_MASK)
53a0: 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   );.      }.    
53b0: 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20    pDb++;.    }. 
53c0: 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66   }.}.#else.# def
53d0: 69 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46  ine setAllPagerF
53e0: 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f  lags(X)  /* no-o
53f0: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  p */.#endif.../*
5400: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d  .** Return a hum
5410: 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65  an-readable name
5420: 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e   for a constrain
5430: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74  t resolution act
5440: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ion..*/.#ifndef 
5450: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
5460: 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63  IGN_KEY.static c
5470: 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f  onst char *actio
5480: 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29  nName(u8 action)
5490: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
54a0: 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28  zName;.  switch(
54b0: 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63   action ){.    c
54c0: 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20  ase OE_SetNull: 
54d0: 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55   zName = "SET NU
54e0: 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  LL";        brea
54f0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53  k;.    case OE_S
5500: 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d  etDflt:  zName =
5510: 20 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20   "SET DEFAULT"; 
5520: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
5530: 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20  ase OE_Cascade: 
5540: 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44   zName = "CASCAD
5550: 45 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61  E";         brea
5560: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52  k;.    case OE_R
5570: 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d  estrict: zName =
5580: 20 22 52 45 53 54 52 49 43 54 22 3b 20 20 20 20   "RESTRICT";    
5590: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
55a0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
55b0: 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54   zName = "NO ACT
55c0: 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20  ION";  .        
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
55e0: 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45  sert( action==OE
55f0: 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a  _None ); break;.
5600: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61    }.  return zNa
5610: 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  me;.}.#endif.../
5620: 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65  *.** Parameter e
5630: 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65  Mode must be one
5640: 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f   of the PAGER_JO
5650: 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f  URNALMODE_XXX co
5660: 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e  nstants.** defin
5670: 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54  ed in pager.h. T
5680: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  his function ret
5690: 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61  urns the associa
56a0: 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a  ted lowercase.**
56b0: 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61   journal-mode na
56c0: 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  me..*/.const cha
56d0: 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
56e0: 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d  lModename(int eM
56f0: 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63  ode){.  static c
5700: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f  har * const azMo
5710: 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  deName[] = {.   
5720: 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73   "delete", "pers
5730: 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72  ist", "off", "tr
5740: 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79  uncate", "memory
5750: 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ".#ifndef SQLITE
5760: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c  _OMIT_WAL.     ,
5770: 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20   "wal".#endif.  
5780: 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  };.  assert( PAG
5790: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
57a0: 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73  ELETE==0 );.  as
57b0: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
57c0: 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d  NALMODE_PERSIST=
57d0: 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
57e0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
57f0: 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73  E_OFF==2 );.  as
5800: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
5810: 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
5820: 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==3 );.  assert(
5830: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
5840: 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a  DE_MEMORY==4 );.
5850: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
5860: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d  JOURNALMODE_WAL=
5870: 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =5 );.  assert( 
5880: 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64  eMode>=0 && eMod
5890: 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d  e<=ArraySize(azM
58a0: 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69  odeName) );..  i
58b0: 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53  f( eMode==ArrayS
58c0: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
58d0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65  ) return 0;.  re
58e0: 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b  turn azModeName[
58f0: 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  eMode];.}../*.**
5900: 20 50 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d   Process a pragm
5910: 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a  a statement.  .*
5920: 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65  *.** Pragmas are
5930: 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a   of this form:.*
5940: 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41  *.**      PRAGMA
5950: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b   [database.]id [
5960: 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54  = value].**.** T
5970: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69  he identifier mi
5980: 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74  ght also be a st
5990: 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65  ring.  The value
59a0: 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e   is a string, an
59b0: 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c  d.** identifier,
59c0: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49   or a number.  I
59d0: 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74  f minusFlag is t
59e0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  rue, then the va
59f0: 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62  lue is.** a numb
5a00: 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63  er that was prec
5a10: 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20  eded by a minus 
5a20: 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sign..**.** If t
5a30: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
5a40: 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68  "database.id" th
5a50: 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64  en pId1 is the d
5a60: 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20  atabase name.** 
5a70: 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20  and pId2 is the 
5a80: 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74  id.  If the left
5a90: 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69   side is just "i
5aa0: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
5ab0: 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49  the.** id and pI
5ac0: 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20  d2 is any empty 
5ad0: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20  string..*/.void 
5ae0: 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20  sqlite3Pragma(. 
5af0: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
5b00: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20  .  Token *pId1, 
5b10: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
5b20: 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73  part of [databas
5b30: 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20  e.]id field */. 
5b40: 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20   Token *pId2,   
5b50: 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70       /* Second p
5b60: 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65  art of [database
5b70: 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e  .]id field, or N
5b80: 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ULL */.  Token *
5b90: 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20  pValue,      /* 
5ba0: 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65  Token for <value
5bb0: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
5bc0: 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20  int minusFlag   
5bd0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
5be0: 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64   '-' sign preced
5bf0: 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b  ed <value> */.){
5c00: 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d  .  char *zLeft =
5c10: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c   0;       /* Nul
5c20: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
5c30: 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f  8 string <id> */
5c40: 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20  .  char *zRight 
5c50: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c  = 0;      /* Nul
5c60: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
5c70: 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e  8 string <value>
5c80: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  , or NULL */.  c
5c90: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
5ca0: 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74   0;   /* The dat
5cb0: 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  abase name */.  
5cc0: 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20  Token *pId;     
5cd0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
5ce0: 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20  r to <id> token 
5cf0: 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74  */.  char *aFcnt
5d00: 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41  l[4];       /* A
5d10: 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54  rgument to SQLIT
5d20: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
5d30: 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
5d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
5d50: 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72  tabase index for
5d60: 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20   <database> */. 
5d70: 20 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d   int lwr, upr, m
5d80: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  id;           /*
5d90: 20 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62   Binary search b
5da0: 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72  ounds */.  int r
5db0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
5dc0: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
5dd0: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
5de0: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
5df0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
5e00: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
5e10: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
5e20: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
5e30: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e50: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
5e60: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
5e70: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
5e80: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
5e90: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
5ea0: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
5eb0: 65 6d 65 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20  ement */..  if( 
5ec0: 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20  v==0 ) return;. 
5ed0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 75 6e 4f   sqlite3VdbeRunO
5ee0: 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50  nlyOnce(v);.  pP
5ef0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
5f00: 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72 65 74 20  .  /* Interpret 
5f10: 74 68 65 20 5b 64 61 74 61 62 61 73 65 2e 5d 20  the [database.] 
5f20: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
5f30: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44  ma statement. iD
5f40: 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e  b is the.  ** in
5f50: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
5f60: 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61 20  ase this pragma 
5f70: 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64  is being applied
5f80: 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e   to in db.aDb[].
5f90: 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69   */.  iDb = sqli
5fa0: 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70  te3TwoPartName(p
5fb0: 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64  Parse, pId1, pId
5fc0: 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20  2, &pId);.  if( 
5fd0: 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a  iDb<0 ) return;.
5fe0: 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
5ff0: 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  [iDb];..  /* If 
6000: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
6010: 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69  e has been expli
6020: 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70  citly named as p
6030: 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  art of the .  **
6040: 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75   pragma, make su
6050: 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a  re it is open. .
6060: 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d    */.  if( iDb==
6070: 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e  1 && sqlite3Open
6080: 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50 61  TempDatabase(pPa
6090: 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  rse) ){.    retu
60a0: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74  rn;.  }..  zLeft
60b0: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
60c0: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29  omToken(db, pId)
60d0: 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29  ;.  if( !zLeft )
60e0: 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d   return;.  if( m
60f0: 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20  inusFlag ){.    
6100: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
6110: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54  MPrintf(db, "-%T
6120: 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65  ", pValue);.  }e
6130: 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  lse{.    zRight 
6140: 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f  = sqlite3NameFro
6150: 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75  mToken(db, pValu
6160: 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  e);.  }..  asser
6170: 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62  t( pId2 );.  zDb
6180: 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70   = pId2->n>0 ? p
6190: 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20  Db->zName : 0;. 
61a0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 75 74 68   if( sqlite3Auth
61b0: 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51  Check(pParse, SQ
61c0: 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65  LITE_PRAGMA, zLe
61d0: 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  ft, zRight, zDb)
61e0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61   ){.    goto pra
61f0: 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  gma_out;.  }..  
6200: 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51 4c 49 54  /* Send an SQLIT
6210: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66  E_FCNTL_PRAGMA f
6220: 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ile-control to t
6230: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46  he underlying VF
6240: 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  S.  ** connectio
6250: 6e 2e 20 20 49 66 20 69 74 20 72 65 74 75 72 6e  n.  If it return
6260: 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65  s SQLITE_OK, the
6270: 6e 20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68  n assume that th
6280: 65 20 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c  e VFS.  ** handl
6290: 65 64 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e  ed the pragma an
62a0: 64 20 67 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d  d generate a no-
62b0: 6f 70 20 70 72 65 70 61 72 65 64 20 73 74 61 74  op prepared stat
62c0: 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46  ement..  */.  aF
62d0: 63 6e 74 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  cntl[0] = 0;.  a
62e0: 46 63 6e 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74  Fcntl[1] = zLeft
62f0: 3b 0a 20 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20  ;.  aFcntl[2] = 
6300: 7a 52 69 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c  zRight;.  aFcntl
6310: 5b 33 5d 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  [3] = 0;.  db->b
6320: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
6330: 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
6340: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
6350: 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54  l(db, zDb, SQLIT
6360: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20  E_FCNTL_PRAGMA, 
6370: 28 76 6f 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a  (void*)aFcntl);.
6380: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
6390: 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 61  _OK ){.    if( a
63a0: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
63b0: 20 20 69 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50    int mem = ++pP
63c0: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
63d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
63e0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
63f0: 38 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46  8, 0, mem, 0, aF
6400: 63 6e 74 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20  cntl[0], 0);.   
6410: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
6420: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
6430: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6440: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
6450: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
6460: 22 72 65 73 75 6c 74 22 2c 20 53 51 4c 49 54 45  "result", SQLITE
6470: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
6480: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
6490: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
64a0: 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20  w, mem, 1);.    
64b0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
64c0: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
64d0: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
64e0: 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _out;.  }.  if( 
64f0: 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  rc!=SQLITE_NOTFO
6500: 55 4e 44 20 29 7b 0a 20 20 20 20 69 66 28 20 61  UND ){.    if( a
6510: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
6520: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
6530: 67 28 70 50 61 72 73 65 2c 20 22 25 73 22 2c 20  g(pParse, "%s", 
6540: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
6550: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
6560: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
6570: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72  .    pParse->nEr
6580: 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  r++;.    pParse-
6590: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f  >rc = rc;.    go
65a0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
65b0: 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20   }..  /* Locate 
65c0: 74 68 65 20 70 72 61 67 6d 61 20 69 6e 20 74 68  the pragma in th
65d0: 65 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a  e lookup table *
65e0: 2f 0a 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75  /.  lwr = 0;.  u
65f0: 70 72 20 3d 20 41 72 72 61 79 53 69 7a 65 28 61  pr = ArraySize(a
6600: 50 72 61 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a  PragmaNames)-1;.
6610: 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70    while( lwr<=up
6620: 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28  r ){.    mid = (
6630: 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20  lwr+upr)/2;.    
6640: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72  rc = sqlite3_str
6650: 69 63 6d 70 28 7a 4c 65 66 74 2c 20 61 50 72 61  icmp(zLeft, aPra
6660: 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e  gmaNames[mid].zN
6670: 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ame);.    if( rc
6680: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
6690: 20 69 66 28 20 72 63 3c 30 20 29 7b 0a 20 20 20   if( rc<0 ){.   
66a0: 20 20 20 75 70 72 20 3d 20 6d 69 64 20 2d 20 31     upr = mid - 1
66b0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
66c0: 20 20 20 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31     lwr = mid + 1
66d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
66e0: 28 20 6c 77 72 3e 75 70 72 20 29 20 67 6f 74 6f  ( lwr>upr ) goto
66f0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20   pragma_out;..  
6700: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
6710: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6720: 20 69 73 20 6c 6f 61 64 65 64 20 69 66 20 74 68   is loaded if th
6730: 65 20 70 72 61 67 6d 61 20 72 65 71 75 69 72 65  e pragma require
6740: 73 20 74 68 61 74 20 2a 2f 0a 20 20 69 66 28 20  s that */.  if( 
6750: 28 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69  (aPragmaNames[mi
6760: 64 5d 2e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  d].mPragFlag & P
6770: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
6780: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
6790: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
67a0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
67b0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
67c0: 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f   }..  /* Jump to
67d0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
67e0: 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20   pragma handler 
67f0: 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 61 50 72  */.  switch( aPr
6800: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65  agmaNames[mid].e
6810: 50 72 61 67 54 79 70 20 29 7b 0a 20 20 0a 23 69  PragTyp ){.  .#i
6820: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
6830: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
6840: 47 4d 41 53 29 20 26 26 20 21 64 65 66 69 6e 65  GMAS) && !define
6850: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  d(SQLITE_OMIT_DE
6860: 50 52 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20  PRECATED).  /*. 
6870: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
6880: 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63  abase.]default_c
6890: 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20  ache_size.  **  
68a0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
68b0: 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  .]default_cache_
68c0: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
68d0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
68e0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
68f0: 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73  ent persistent s
6900: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
6910: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
6920: 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ize.  The value 
6930: 72 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20  returned is the 
6940: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
6950: 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20  f.  ** pages in 
6960: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20  the page cache. 
6970: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
6980: 20 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63   sets both the c
6990: 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65  urrent.  ** page
69a0: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
69b0: 65 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73  e and the persis
69c0: 74 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20  tent page cache 
69d0: 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20  size value.  ** 
69e0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
69f0: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a  tabase file..  *
6a00: 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72  *.  ** Older ver
6a10: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
6a20: 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65  would set the de
6a30: 66 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65  fault cache size
6a40: 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74   to a.  ** negat
6a50: 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e  ive number to in
6a60: 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f  dicate synchrono
6a70: 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64  us=OFF.  These d
6a80: 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ays, synchronous
6a90: 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20  .  ** is always 
6aa0: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65  on by default re
6ab0: 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
6ac0: 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61  sign of the defa
6ad0: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
6ae0: 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e  ize.  But contin
6af0: 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61  ue to take the a
6b00: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
6b10: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
6b20: 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20  he.  ** size of 
6b30: 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61  historical compa
6b40: 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20  tibility..  */. 
6b50: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45   case PragTyp_DE
6b60: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
6b70: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
6b80: 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56  onst int iLn = V
6b90: 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e  DBE_OFFSET_LINEN
6ba0: 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63  O(2);.    static
6bb0: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
6bc0: 74 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d  t getCacheSize[]
6bd0: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
6be0: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20  Transaction, 0, 
6bf0: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  0,        0},   
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c10: 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20        /* 0 */.  
6c20: 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
6c30: 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20  kie,  0, 1,     
6c40: 20 20 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54     BTREE_DEFAULT
6c50: 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f  _CACHE_SIZE},  /
6c60: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 1 */.      { O
6c70: 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31  P_IfPos,       1
6c80: 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 8,        0},.
6c90: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
6ca0: 65 72 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20  er,     0, 2,   
6cb0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
6cc0: 20 4f 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20   OP_Subtract,   
6cd0: 20 31 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d   1, 2,        1}
6ce0: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50  ,.      { OP_IfP
6cf0: 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20  os,       1, 8, 
6d00: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
6d10: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
6d20: 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20     0, 1,        
6d30: 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  0},             
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36              /* 6
6d50: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e   */.      { OP_N
6d60: 6f 6f 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30  oop,        0, 0
6d70: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
6d80: 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
6d90: 77 2c 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20  w,   1, 1,      
6da0: 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20    0},.    };.   
6db0: 20 69 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 73   int addr;.    s
6dc0: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
6dd0: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
6de0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
6df0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6e00: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
6e10: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
6e20: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
6e30: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
6e40: 45 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c  E, "cache_size",
6e50: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
6e60: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
6e70: 4d 65 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20  Mem += 2;.      
6e80: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
6e90: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
6ea0: 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63 68  rraySize(getCach
6eb0: 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65  eSize), getCache
6ec0: 53 69 7a 65 2c 69 4c 6e 29 3b 0a 20 20 20 20 20  Size,iLn);.     
6ed0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
6ee0: 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44  geP1(v, addr, iD
6ef0: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
6f00: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
6f10: 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20   addr+1, iDb);. 
6f20: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
6f30: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
6f40: 2b 36 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55  +6, SQLITE_DEFAU
6f50: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 29 3b 0a  LT_CACHE_SIZE);.
6f60: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6f70: 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69   int size = sqli
6f80: 74 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69  te3AbsInt32(sqli
6f90: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29  te3Atoi(zRight))
6fa0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
6fb0: 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
6fc0: 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44  on(pParse, 0, iD
6fd0: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
6fe0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
6ff0: 50 5f 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c  P_Integer, size,
7000: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
7010: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
7020: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44  OP_SetCookie, iD
7030: 62 2c 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54  b, BTREE_DEFAULT
7040: 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 31 29 3b  _CACHE_SIZE, 1);
7050: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
7060: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
7070: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
7080: 29 20 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e  ) );.      pDb->
7090: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
70a0: 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20  ize = size;.    
70b0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
70c0: 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e  tCacheSize(pDb->
70d0: 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  pBt, pDb->pSchem
70e0: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
70f0: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
7100: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21  .  }.#endif /* !
7110: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
7120: 52 5f 50 52 41 47 4d 41 53 20 26 26 20 21 53 51  R_PRAGMAS && !SQ
7130: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
7140: 41 54 45 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65  ATED */..#if !de
7150: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
7160: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
7170: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
7180: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61  MA [database.]pa
7190: 67 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52  ge_size.  **  PR
71a0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
71b0: 70 61 67 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a  page_size=N.  **
71c0: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
71d0: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
71e0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
71f0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 64 61   for the.  ** da
7200: 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
7210: 20 69 6e 20 62 79 74 65 73 2e 20 20 54 68 65 20   in bytes.  The 
7220: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73  second form sets
7230: 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61   the.  ** databa
7240: 73 65 20 70 61 67 65 20 73 69 7a 65 20 76 61 6c  se page size val
7250: 75 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20 63  ue.  The value c
7260: 61 6e 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69  an only be set i
7270: 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62  f.  ** the datab
7280: 61 73 65 20 68 61 73 20 6e 6f 74 20 79 65 74 20  ase has not yet 
7290: 62 65 65 6e 20 63 72 65 61 74 65 64 2e 0a 20 20  been created..  
72a0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
72b0: 70 5f 50 41 47 45 5f 53 49 5a 45 3a 20 7b 0a 20  p_PAGE_SIZE: {. 
72c0: 20 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20     Btree *pBt = 
72d0: 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73  pDb->pBt;.    as
72e0: 73 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a  sert( pBt!=0 );.
72f0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
7300: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a  ){.      int siz
7310: 65 20 3d 20 41 4c 57 41 59 53 28 70 42 74 29 20  e = ALWAYS(pBt) 
7320: 3f 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  ? sqlite3BtreeGe
7330: 74 50 61 67 65 53 69 7a 65 28 70 42 74 29 20 3a  tPageSize(pBt) :
7340: 20 30 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   0;.      return
7350: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
7360: 2c 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 20 73  , "page_size", s
7370: 69 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  ize);.    }else{
7380: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63  .      /* Malloc
7390: 20 6d 61 79 20 66 61 69 6c 20 77 68 65 6e 20 73   may fail when s
73a0: 65 74 74 69 6e 67 20 74 68 65 20 70 61 67 65 2d  etting the page-
73b0: 73 69 7a 65 2c 20 61 73 20 74 68 65 72 65 20 69  size, as there i
73c0: 73 20 61 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20  s an internal.  
73d0: 20 20 20 20 2a 2a 20 62 75 66 66 65 72 20 74 68      ** buffer th
73e0: 61 74 20 74 68 65 20 70 61 67 65 72 20 6d 6f 64  at the pager mod
73f0: 75 6c 65 20 72 65 73 69 7a 65 73 20 75 73 69 6e  ule resizes usin
7400: 67 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f  g sqlite3_reallo
7410: 63 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  c()..      */.  
7420: 20 20 20 20 64 62 2d 3e 6e 65 78 74 50 61 67 65      db->nextPage
7430: 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74  size = sqlite3At
7440: 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  oi(zRight);.    
7450: 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d    if( SQLITE_NOM
7460: 45 4d 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  EM==sqlite3Btree
7470: 53 65 74 50 61 67 65 53 69 7a 65 28 70 42 74 2c  SetPageSize(pBt,
7480: 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a   db->nextPagesiz
7490: 65 2c 2d 31 2c 30 29 20 29 7b 0a 20 20 20 20 20  e,-1,0) ){.     
74a0: 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69     db->mallocFai
74b0: 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d  led = 1;.      }
74c0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
74d0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
74e0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
74f0: 73 65 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74  se.]secure_delet
7500: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
7510: 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65  database.]secure
7520: 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20  _delete=ON/OFF. 
7530: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72   **.  ** The fir
7540: 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20  st form reports 
7550: 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74  the current sett
7560: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
7570: 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 20 66   secure_delete f
7580: 6c 61 67 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  lag.  The second
7590: 20 66 6f 72 6d 20 63 68 61 6e 67 65 73 20 74 68   form changes th
75a0: 65 20 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a  e secure_delete.
75b0: 20 20 2a 2a 20 66 6c 61 67 20 73 65 74 74 69 6e    ** flag settin
75c0: 67 20 61 6e 64 20 72 65 70 6f 72 74 73 20 74 68  g and reports th
75d0: 65 6e 65 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f  enew value..  */
75e0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
75f0: 53 45 43 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b  SECURE_DELETE: {
7600: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
7610: 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20  = pDb->pBt;.    
7620: 69 6e 74 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20  int b = -1;.    
7630: 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29  assert( pBt!=0 )
7640: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
7650: 20 29 7b 0a 20 20 20 20 20 20 62 20 3d 20 73 71   ){.      b = sq
7660: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
7670: 7a 52 69 67 68 74 2c 20 30 29 3b 0a 20 20 20 20  zRight, 0);.    
7680: 7d 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e  }.    if( pId2->
7690: 6e 3d 3d 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a  n==0 && b>=0 ){.
76a0: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
76b0: 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
76c0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
76d0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
76e0: 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65 74  BtreeSecureDelet
76f0: 65 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  e(db->aDb[ii].pB
7700: 74 2c 20 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20  t, b);.      }. 
7710: 20 20 20 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c     }.    b = sql
7720: 69 74 65 33 42 74 72 65 65 53 65 63 75 72 65 44  ite3BtreeSecureD
7730: 65 6c 65 74 65 28 70 42 74 2c 20 62 29 3b 0a 20  elete(pBt, b);. 
7740: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
7750: 6e 74 28 70 50 61 72 73 65 2c 20 22 73 65 63 75  nt(pParse, "secu
7760: 72 65 5f 64 65 6c 65 74 65 22 2c 20 62 29 3b 0a  re_delete", b);.
7770: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
7780: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
7790: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78  A [database.]max
77a0: 5f 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a  _page_count.  **
77b0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
77c0: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
77d0: 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  nt=N.  **.  ** T
77e0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
77f0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
7800: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
7810: 65 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e  e.  ** maximum n
7820: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
7830: 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
7840: 69 6c 65 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20  ile.  The .  ** 
7850: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65  second form atte
7860: 6d 70 74 73 20 74 6f 20 63 68 61 6e 67 65 20 74  mpts to change t
7870: 68 69 73 20 73 65 74 74 69 6e 67 2e 20 20 42 6f  his setting.  Bo
7880: 74 68 0a 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65  th.  ** forms re
7890: 74 75 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74  turn the current
78a0: 20 73 65 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20   setting..  **. 
78b0: 20 2a 2a 20 54 68 65 20 61 62 73 6f 6c 75 74 65   ** The absolute
78c0: 20 76 61 6c 75 65 20 6f 66 20 4e 20 69 73 20 75   value of N is u
78d0: 73 65 64 2e 20 20 54 68 69 73 20 69 73 20 75 6e  sed.  This is un
78e0: 64 6f 63 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d  documented and m
78f0: 69 67 68 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65  ight.  ** change
7900: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 70 75 72 70  .  The only purp
7910: 6f 73 65 20 69 73 20 74 6f 20 70 72 6f 76 69 64  ose is to provid
7920: 65 20 61 6e 20 65 61 73 79 20 77 61 79 20 74 6f  e an easy way to
7930: 20 74 65 73 74 0a 20 20 2a 2a 20 74 68 65 20 73   test.  ** the s
7940: 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 29  qlite3AbsInt32()
7950: 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a   function..  **.
7960: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7970: 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75  tabase.]page_cou
7980: 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  nt.  **.  ** Ret
7990: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
79a0: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
79b0: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
79c0: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
79d0: 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e  ragTyp_PAGE_COUN
79e0: 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 52 65  T: {.    int iRe
79f0: 67 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  g;.    sqlite3Co
7a00: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
7a10: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
7a20: 20 69 52 65 67 20 3d 20 2b 2b 70 50 61 72 73 65   iReg = ++pParse
7a30: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20  ->nMem;.    if( 
7a40: 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a  sqlite3Tolower(z
7a50: 4c 65 66 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b  Left[0])=='p' ){
7a60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
7a70: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50  beAddOp2(v, OP_P
7a80: 61 67 65 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69  agecount, iDb, i
7a90: 52 65 67 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Reg);.    }else{
7aa0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
7ab0: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d  beAddOp3(v, OP_M
7ac0: 61 78 50 67 63 6e 74 2c 20 69 44 62 2c 20 69 52  axPgcnt, iDb, iR
7ad0: 65 67 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  eg, .           
7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
7af0: 69 74 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c  ite3AbsInt32(sql
7b00: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
7b10: 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  ));.    }.    sq
7b20: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
7b30: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
7b40: 20 69 52 65 67 2c 20 31 29 3b 0a 20 20 20 20 73   iReg, 1);.    s
7b50: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
7b60: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
7b70: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
7b80: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
7b90: 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c  AME_NAME, zLeft,
7ba0: 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
7bb0: 54 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  T);.    break;. 
7bc0: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
7bd0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
7be0: 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20  ]locking_mode.  
7bf0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
7c00: 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f  base.]locking_mo
7c10: 64 65 20 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63  de = (normal|exc
7c20: 6c 75 73 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63  lusive).  */.  c
7c30: 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b  ase PragTyp_LOCK
7c40: 49 4e 47 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20  ING_MODE: {.    
7c50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 52 65 74  const char *zRet
7c60: 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20   = "normal";.   
7c70: 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20 67 65 74   int eMode = get
7c80: 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67  LockingMode(zRig
7c90: 68 74 29 3b 0a 0a 20 20 20 20 69 66 28 20 70 49  ht);..    if( pI
7ca0: 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64  d2->n==0 && eMod
7cb0: 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  e==PAGER_LOCKING
7cc0: 4d 4f 44 45 5f 51 55 45 52 59 20 29 7b 0a 20 20  MODE_QUERY ){.  
7cd0: 20 20 20 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50      /* Simple "P
7ce0: 52 41 47 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f  RAGMA locking_mo
7cf0: 64 65 3b 22 20 73 74 61 74 65 6d 65 6e 74 2e 20  de;" statement. 
7d00: 54 68 69 73 20 69 73 20 61 20 71 75 65 72 79 20  This is a query 
7d10: 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  for.      ** the
7d20: 20 63 75 72 72 65 6e 74 20 64 65 66 61 75 6c 74   current default
7d30: 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77   locking mode (w
7d40: 68 69 63 68 20 6d 61 79 20 62 65 20 64 69 66 66  hich may be diff
7d50: 65 72 65 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a  erent to.      *
7d60: 2a 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f  * the locking-mo
7d70: 64 65 20 6f 66 20 74 68 65 20 6d 61 69 6e 20 64  de of the main d
7d80: 61 74 61 62 61 73 65 29 2e 0a 20 20 20 20 20 20  atabase)..      
7d90: 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  */.      eMode =
7da0: 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64   db->dfltLockMod
7db0: 65 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  e;.    }else{.  
7dc0: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
7dd0: 72 3b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  r;.      if( pId
7de0: 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20  2->n==0 ){.     
7df0: 20 20 20 2f 2a 20 54 68 69 73 20 69 6e 64 69 63     /* This indic
7e00: 61 74 65 73 20 74 68 61 74 20 6e 6f 20 64 61 74  ates that no dat
7e10: 61 62 61 73 65 20 6e 61 6d 65 20 77 61 73 20 73  abase name was s
7e20: 70 65 63 69 66 69 65 64 20 61 73 20 70 61 72 74  pecified as part
7e30: 0a 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74  .        ** of t
7e40: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
7e50: 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
7e60: 74 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65  the locking-mode
7e70: 20 6d 75 73 74 20 62 65 0a 20 20 20 20 20 20 20   must be.       
7e80: 20 2a 2a 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61   ** set on all a
7e90: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
7ea0: 73 2c 20 61 73 20 77 65 6c 6c 20 61 73 20 74 68  s, as well as th
7eb0: 65 20 6d 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a  e main db file..
7ec0: 20 20 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20          **.     
7ed0: 20 20 20 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20     ** Also, the 
7ee0: 73 71 6c 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b  sqlite3.dfltLock
7ef0: 4d 6f 64 65 20 76 61 72 69 61 62 6c 65 20 69 73  Mode variable is
7f00: 20 73 65 74 20 73 6f 20 74 68 61 74 0a 20 20 20   set so that.   
7f10: 20 20 20 20 20 2a 2a 20 61 6e 79 20 73 75 62 73       ** any subs
7f20: 65 71 75 65 6e 74 6c 79 20 61 74 74 61 63 68 65  equently attache
7f30: 64 20 64 61 74 61 62 61 73 65 73 20 61 6c 73 6f  d databases also
7f40: 20 75 73 65 20 74 68 65 20 73 70 65 63 69 66 69   use the specifi
7f50: 65 64 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f  ed.        ** lo
7f60: 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20  cking mode..    
7f70: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 69      */.        i
7f80: 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 20 20 61  nt ii;.        a
7f90: 73 73 65 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e  ssert(pDb==&db->
7fa0: 61 44 62 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  aDb[0]);.       
7fb0: 20 66 6f 72 28 69 69 3d 32 3b 20 69 69 3c 64 62   for(ii=2; ii<db
7fc0: 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
7fd0: 20 20 20 20 20 20 20 20 70 50 61 67 65 72 20 3d          pPager =
7fe0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
7ff0: 65 72 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  er(db->aDb[ii].p
8000: 42 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  Bt);.          s
8010: 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69  qlite3PagerLocki
8020: 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  ngMode(pPager, e
8030: 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 20 20 7d  Mode);.        }
8040: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 64 66 6c  .        db->dfl
8050: 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29  tLockMode = (u8)
8060: 65 4d 6f 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20  eMode;.      }. 
8070: 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71       pPager = sq
8080: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
8090: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20  pDb->pBt);.     
80a0: 20 65 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33   eMode = sqlite3
80b0: 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65  PagerLockingMode
80c0: 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b  (pPager, eMode);
80d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61 73 73 65  .    }..    asse
80e0: 72 74 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52  rt( eMode==PAGER
80f0: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52  _LOCKINGMODE_NOR
8100: 4d 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20  MAL.            
8110: 7c 7c 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  || eMode==PAGER_
8120: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c  LOCKINGMODE_EXCL
8130: 55 53 49 56 45 20 29 3b 0a 20 20 20 20 69 66 28  USIVE );.    if(
8140: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
8150: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
8160: 49 56 45 20 29 7b 0a 20 20 20 20 20 20 7a 52 65  IVE ){.      zRe
8170: 74 20 3d 20 22 65 78 63 6c 75 73 69 76 65 22 3b  t = "exclusive";
8180: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
8190: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
81a0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  (v, 1);.    sqli
81b0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
81c0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
81d0: 4e 41 4d 45 2c 20 22 6c 6f 63 6b 69 6e 67 5f 6d  NAME, "locking_m
81e0: 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ode", SQLITE_STA
81f0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
8200: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
8210: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
8220: 20 30 2c 20 7a 52 65 74 2c 20 30 29 3b 0a 20 20   0, zRet, 0);.  
8230: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8240: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
8250: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
8260: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
8270: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
8280: 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c  atabase.]journal
8290: 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47  _mode.  **  PRAG
82a0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f  MA [database.]jo
82b0: 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d 0a 20 20 2a  urnal_mode =.  *
82c0: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
82d0: 20 20 20 20 20 20 20 28 64 65 6c 65 74 65 7c 70         (delete|p
82e0: 65 72 73 69 73 74 7c 6f 66 66 7c 74 72 75 6e 63  ersist|off|trunc
82f0: 61 74 65 7c 6d 65 6d 6f 72 79 7c 77 61 6c 7c 6f  ate|memory|wal|o
8300: 66 66 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ff).  */.  case 
8310: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
8320: 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20  MODE: {.    int 
8330: 65 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 2f 2a  eMode;        /*
8340: 20 4f 6e 65 20 6f 66 20 74 68 65 20 50 41 47 45   One of the PAGE
8350: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58  R_JOURNALMODE_XX
8360: 58 20 73 79 6d 62 6f 6c 73 20 2a 2f 0a 20 20 20  X symbols */.   
8370: 20 69 6e 74 20 69 69 3b 20 20 20 20 20 20 20 20   int ii;        
8380: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
8390: 65 72 20 2a 2f 0a 0a 20 20 20 20 73 71 6c 69 74  er */..    sqlit
83a0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
83b0: 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  (v, 1);.    sqli
83c0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
83d0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
83e0: 4e 41 4d 45 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d  NAME, "journal_m
83f0: 6f 64 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ode", SQLITE_STA
8400: 54 49 43 29 3b 0a 0a 20 20 20 20 69 66 28 20 7a  TIC);..    if( z
8410: 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20  Right==0 ){.    
8420: 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
8430: 20 6e 6f 20 22 3d 4d 4f 44 45 22 20 70 61 72 74   no "=MODE" part
8440: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 2c 20   of the pragma, 
8450: 64 6f 20 61 20 71 75 65 72 79 20 66 6f 72 20 74  do a query for t
8460: 68 65 0a 20 20 20 20 20 20 2a 2a 20 63 75 72 72  he.      ** curr
8470: 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20  ent mode */.    
8480: 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f    eMode = PAGER_
8490: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52  JOURNALMODE_QUER
84a0: 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  Y;.    }else{.  
84b0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
84c0: 7a 4d 6f 64 65 3b 0a 20 20 20 20 20 20 69 6e 74  zMode;.      int
84d0: 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c   n = sqlite3Strl
84e0: 65 6e 33 30 28 7a 52 69 67 68 74 29 3b 0a 20 20  en30(zRight);.  
84f0: 20 20 20 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b      for(eMode=0;
8500: 20 28 7a 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65   (zMode = sqlite
8510: 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
8520: 28 65 4d 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f  (eMode))!=0; eMo
8530: 64 65 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  de++){.        i
8540: 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  f( sqlite3StrNIC
8550: 6d 70 28 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65  mp(zRight, zMode
8560: 2c 20 6e 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  , n)==0 ) break;
8570: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
8580: 66 28 20 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20  f( !zMode ){.   
8590: 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 22       /* If the "
85a0: 3d 4d 4f 44 45 22 20 70 61 72 74 20 64 6f 65 73  =MODE" part does
85b0: 20 6e 6f 74 20 6d 61 74 63 68 20 61 6e 79 20 6b   not match any k
85c0: 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64  nown journal mod
85d0: 65 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  e,.        ** th
85e0: 65 6e 20 64 6f 20 61 20 71 75 65 72 79 20 2a 2f  en do a query */
85f0: 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
8600: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
8610: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 20 20  DE_QUERY;.      
8620: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
8630: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55  eMode==PAGER_JOU
8640: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26  RNALMODE_QUERY &
8650: 26 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a  & pId2->n==0 ){.
8660: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
8670: 20 22 50 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c   "PRAGMA journal
8680: 5f 6d 6f 64 65 22 20 69 6e 74 6f 20 22 50 52 41  _mode" into "PRA
8690: 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c  GMA main.journal
86a0: 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20 20 20 20 20  _mode" */.      
86b0: 69 44 62 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  iDb = 0;.      p
86c0: 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20  Id2->n = 1;.    
86d0: 7d 0a 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d  }.    for(ii=db-
86e0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
86f0: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i--){.      if( 
8700: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20  db->aDb[ii].pBt 
8710: 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70  && (ii==iDb || p
8720: 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20  Id2->n==0) ){.  
8730: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
8740: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 69  eUsesBtree(v, ii
8750: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
8760: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
8770: 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20  OP_JournalMode, 
8780: 69 69 2c 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20  ii, 1, eMode);. 
8790: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
87a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
87b0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
87c0: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62  ow, 1, 1);.    b
87d0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
87e0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
87f0: 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f  tabase.]journal_
8800: 73 69 7a 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20  size_limit.  ** 
8810: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
8820: 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f  e.]journal_size_
8830: 6c 69 6d 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a  limit=N.  **.  *
8840: 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74 68 65  * Get or set the
8850: 20 73 69 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72   size limit on r
8860: 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20  ollback journal 
8870: 66 69 6c 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61  files..  */.  ca
8880: 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e  se PragTyp_JOURN
8890: 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b  AL_SIZE_LIMIT: {
88a0: 0a 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67  .    Pager *pPag
88b0: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
88c0: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
88d0: 3b 0a 20 20 20 20 69 36 34 20 69 4c 69 6d 69 74  ;.    i64 iLimit
88e0: 20 3d 20 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a   = -2;.    if( z
88f0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
8900: 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 52 69  qlite3Atoi64(zRi
8910: 67 68 74 2c 20 26 69 4c 69 6d 69 74 2c 20 73 71  ght, &iLimit, sq
8920: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52  lite3Strlen30(zR
8930: 69 67 68 74 29 2c 20 53 51 4c 49 54 45 5f 55 54  ight), SQLITE_UT
8940: 46 38 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69  F8);.      if( i
8950: 4c 69 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69  Limit<-1 ) iLimi
8960: 74 20 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20  t = -1;.    }.  
8970: 20 20 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74    iLimit = sqlit
8980: 65 33 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69  e3PagerJournalSi
8990: 7a 65 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20  zeLimit(pPager, 
89a0: 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74  iLimit);.    ret
89b0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
89c0: 72 73 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f 73 69  rse, "journal_si
89d0: 7a 65 5f 6c 69 6d 69 74 22 2c 20 69 4c 69 6d 69  ze_limit", iLimi
89e0: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
89f0: 20 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51   }..#endif /* SQ
8a00: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
8a10: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 20 20 2f 2a  PRAGMAS */..  /*
8a20: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
8a30: 61 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61  atabase.]auto_va
8a40: 63 75 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47 4d  cuum.  **  PRAGM
8a50: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75 74  A [database.]aut
8a60: 6f 5f 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a  o_vacuum=N.  **.
8a70: 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20    ** Get or set 
8a80: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
8a90: 20 64 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d   database 'auto-
8aa0: 76 61 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65  vacuum' paramete
8ab0: 72 2e 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75  r..  ** The valu
8ac0: 65 20 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20  e is one of:  0 
8ad0: 4e 4f 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e  NONE 1 FULL 2 IN
8ae0: 43 52 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23  CREMENTAL.  */.#
8af0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8b00: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
8b10: 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 55 54  case PragTyp_AUT
8b20: 4f 5f 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20  O_VACUUM: {.    
8b30: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62  Btree *pBt = pDb
8b40: 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72  ->pBt;.    asser
8b50: 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20  t( pBt!=0 );.   
8b60: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
8b70: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
8b80: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 61  leInt(pParse, "a
8b90: 75 74 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c  uto_vacuum", sql
8ba0: 69 74 65 33 42 74 72 65 65 47 65 74 41 75 74 6f  ite3BtreeGetAuto
8bb0: 56 61 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20  Vacuum(pBt));.  
8bc0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
8bd0: 6e 74 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75  nt eAuto = getAu
8be0: 74 6f 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29  toVacuum(zRight)
8bf0: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
8c00: 65 41 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74  eAuto>=0 && eAut
8c10: 6f 3c 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62  o<=2 );.      db
8c20: 2d 3e 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20  ->nextAutovac = 
8c30: 28 75 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20  (u8)eAuto;.     
8c40: 20 2f 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f   /* Call SetAuto
8c50: 56 61 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20  Vacuum() to set 
8c60: 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69  initialize the i
8c70: 6e 74 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64  nternal auto and
8c80: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76  .      ** incr-v
8c90: 61 63 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69  acuum flags. Thi
8ca0: 73 20 69 73 20 72 65 71 75 69 72 65 64 20 69 6e  s is required in
8cb0: 20 63 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65   case this conne
8cc0: 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63  ction.      ** c
8cd0: 72 65 61 74 65 73 20 74 68 65 20 64 61 74 61 62  reates the datab
8ce0: 61 73 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20  ase file. It is 
8cf0: 69 6d 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69  important that i
8d00: 74 20 69 73 20 63 72 65 61 74 65 64 0a 20 20 20  t is created.   
8d10: 20 20 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f     ** as an auto
8d20: 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20  -vacuum capable 
8d30: 64 62 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  db..      */.   
8d40: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
8d50: 74 72 65 65 53 65 74 41 75 74 6f 56 61 63 75 75  treeSetAutoVacuu
8d60: 6d 28 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20  m(pBt, eAuto);. 
8d70: 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
8d80: 49 54 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f  ITE_OK && (eAuto
8d90: 3d 3d 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29  ==1 || eAuto==2)
8da0: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57   ){.        /* W
8db0: 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20  hen setting the 
8dc0: 61 75 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65  auto_vacuum mode
8dd0: 20 74 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c   to either "full
8de0: 22 20 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a  " or .        **
8df0: 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20   "incremental", 
8e00: 77 72 69 74 65 20 74 68 65 20 76 61 6c 75 65 20  write the value 
8e10: 6f 66 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68  of meta[6] in th
8e20: 65 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20  e database.     
8e30: 20 20 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f     ** file. Befo
8e40: 72 65 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65  re writing to me
8e50: 74 61 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61  ta[6], check tha
8e60: 74 20 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61  t meta[3] indica
8e70: 74 65 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  tes.        ** t
8e80: 68 61 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20  hat this really 
8e90: 69 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  is an auto-vacuu
8ea0: 6d 20 63 61 70 61 62 6c 65 20 64 61 74 61 62 61  m capable databa
8eb0: 73 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  se..        */. 
8ec0: 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f         static co
8ed0: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
8ee0: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
8ef0: 28 32 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61  (2);.        sta
8f00: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
8f10: 4c 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20  List setMeta6[] 
8f20: 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20  = {.          { 
8f30: 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20  OP_Transaction, 
8f40: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c     0,         1,
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f60: 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
8f70: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52            { OP_R
8f80: 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30  eadCookie,     0
8f90: 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20  ,         1,    
8fa0: 20 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45       BTREE_LARGE
8fb0: 53 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20  ST_ROOT_PAGE},. 
8fc0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66           { OP_If
8fd0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c  ,             1,
8fe0: 20 20 20 20 20 20 20 20 20 30 2c 20 20 20 20 20           0,     
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20              0}, 
9000: 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20     /* 2 */.     
9010: 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20       { OP_Halt, 
9020: 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
9030: 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20  _OK, OE_Abort,  
9040: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
9050: 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 3 */.         
9060: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
9070: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
9080: 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   1,             
9090: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20      0},    /* 4 
90a0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f  */.          { O
90b0: 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20  P_SetCookie,    
90c0: 20 20 30 2c 20 20 20 20 20 20 20 20 20 42 54 52    0,         BTR
90d0: 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20  EE_INCR_VACUUM, 
90e0: 31 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a 20  1},    /* 5 */. 
90f0: 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20         };.      
9100: 20 20 69 6e 74 20 69 41 64 64 72 3b 0a 20 20 20    int iAddr;.   
9110: 20 20 20 20 20 69 41 64 64 72 20 3d 20 73 71 6c       iAddr = sql
9120: 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
9130: 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73  t(v, ArraySize(s
9140: 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65 74  etMeta6), setMet
9150: 61 36 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20  a6, iLn);.      
9160: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
9170: 6e 67 65 50 31 28 76 2c 20 69 41 64 64 72 2c 20  ngeP1(v, iAddr, 
9180: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71  iDb);.        sq
9190: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
91a0: 31 28 76 2c 20 69 41 64 64 72 2b 31 2c 20 69 44  1(v, iAddr+1, iD
91b0: 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  b);.        sqli
91c0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28  te3VdbeChangeP2(
91d0: 76 2c 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64  v, iAddr+2, iAdd
91e0: 72 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71  r+4);.        sq
91f0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
9200: 31 28 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41  1(v, iAddr+4, eA
9210: 75 74 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20  uto-1);.        
9220: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
9230: 65 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20  eP1(v, iAddr+5, 
9240: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71  iDb);.        sq
9250: 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
9260: 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20  ee(v, iDb);.    
9270: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
9280: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
9290: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
92a0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 6e  MA [database.]in
92b0: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
92c0: 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f  (N).  **.  ** Do
92d0: 20 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72   N steps of incr
92e0: 65 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e  emental vacuumin
92f0: 67 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e  g on a database.
9300: 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .  */.#ifndef SQ
9310: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
9320: 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67  CUUM.  case Prag
9330: 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f  Typ_INCREMENTAL_
9340: 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e  VACUUM: {.    in
9350: 74 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a  t iLimit, addr;.
9360: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
9370: 30 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74  0 || !sqlite3Get
9380: 49 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69  Int32(zRight, &i
9390: 4c 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74  Limit) || iLimit
93a0: 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69  <=0 ){.      iLi
93b0: 6d 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66  mit = 0x7fffffff
93c0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
93d0: 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65  te3BeginWriteOpe
93e0: 72 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30  ration(pParse, 0
93f0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69  , iDb);.    sqli
9400: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9410: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69   OP_Integer, iLi
9420: 6d 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64  mit, 1);.    add
9430: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
9440: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72  ddOp1(v, OP_Incr
9450: 56 61 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64  Vacuum, iDb); Vd
9460: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
9470: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9480: 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp1(v, OP_Resul
9490: 74 52 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71  tRow, 1);.    sq
94a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
94b0: 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
94c0: 20 2d 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65   -1);.    sqlite
94d0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
94e0: 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72  P_IfPos, 1, addr
94f0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
9500: 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
9510: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
9520: 64 64 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ddr);.    break;
9530: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
9540: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9550: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20  _PAGER_PRAGMAS. 
9560: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
9570: 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68   [database.]cach
9580: 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41  e_size.  **  PRA
9590: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63  GMA [database.]c
95a0: 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a  ache_size=N.  **
95b0: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
95c0: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
95d0: 20 63 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73   current local s
95e0: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
95f0: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
9600: 69 7a 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20  ize. The second 
9610: 66 6f 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f  form sets the lo
9620: 63 61 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  cal.  ** page ca
9630: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20  che size value. 
9640: 20 49 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76   If N is positiv
9650: 65 20 74 68 65 6e 20 74 68 61 74 20 69 73 20 74  e then that is t
9660: 68 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f  he.  ** number o
9670: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 63  f pages in the c
9680: 61 63 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e  ache.  If N is n
9690: 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68  egative, then th
96a0: 65 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  e.  ** number of
96b0: 20 70 61 67 65 73 20 69 73 20 61 64 6a 75 73 74   pages is adjust
96c0: 65 64 20 73 6f 20 74 68 61 74 20 74 68 65 20 63  ed so that the c
96d0: 61 63 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62  ache uses -N kib
96e0: 69 62 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d  ibytes.  ** of m
96f0: 65 6d 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61  emory..  */.  ca
9700: 73 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45  se PragTyp_CACHE
9710: 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73  _SIZE: {.    ass
9720: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
9730: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
9740: 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69  iDb, 0) );.    i
9750: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
9760: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
9770: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 63 61 63  Int(pParse, "cac
9780: 68 65 5f 73 69 7a 65 22 2c 20 70 44 62 2d 3e 70  he_size", pDb->p
9790: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
97a0: 7a 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ze);.    }else{.
97b0: 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d        int size =
97c0: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
97d0: 67 68 74 29 3b 0a 20 20 20 20 20 20 70 44 62 2d  ght);.      pDb-
97e0: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
97f0: 73 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20  size = size;.   
9800: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
9810: 65 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d  etCacheSize(pDb-
9820: 3e 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65  >pBt, pDb->pSche
9830: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b  ma->cache_size);
9840: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
9850: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
9860: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
9870: 73 65 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29  se.]mmap_size(N)
9880: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20  .  **.  ** Used 
9890: 74 6f 20 73 65 74 20 6d 61 70 70 69 6e 67 20 73  to set mapping s
98a0: 69 7a 65 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d  ize limit. The m
98b0: 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69  apping size limi
98c0: 74 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 20 74  t is.  ** used t
98d0: 6f 20 6c 69 6d 69 74 20 74 68 65 20 61 67 67 72  o limit the aggr
98e0: 65 67 61 74 65 20 73 69 7a 65 20 6f 66 20 61 6c  egate size of al
98f0: 6c 20 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64 20  l memory mapped 
9900: 72 65 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20  regions of the. 
9910: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c   ** database fil
9920: 65 2e 20 49 66 20 74 68 69 73 20 70 61 72 61 6d  e. If this param
9930: 65 74 65 72 20 69 73 20 73 65 74 20 74 6f 20 7a  eter is set to z
9940: 65 72 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79  ero, then memory
9950: 20 6d 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73   mapping.  ** is
9960: 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c   not used at all
9970: 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74  .  If N is negat
9980: 69 76 65 2c 20 74 68 65 6e 20 74 68 65 20 64 65  ive, then the de
9990: 66 61 75 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70  fault memory map
99a0: 0a 20 20 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65  .  ** limit dete
99b0: 72 6d 69 6e 65 64 20 62 79 20 73 71 6c 69 74 65  rmined by sqlite
99c0: 33 5f 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f  3_config(SQLITE_
99d0: 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45  CONFIG_MMAP_SIZE
99e0: 29 20 69 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54  ) is set..  ** T
99f0: 68 65 20 70 61 72 61 6d 65 74 65 72 20 4e 20 69  he parameter N i
9a00: 73 20 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79  s measured in by
9a10: 74 65 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  tes..  **.  ** T
9a20: 68 69 73 20 76 61 6c 75 65 20 69 73 20 61 64 76  his value is adv
9a30: 69 73 6f 72 79 2e 20 20 54 68 65 20 75 6e 64 65  isory.  The unde
9a40: 72 6c 79 69 6e 67 20 56 46 53 20 69 73 20 66 72  rlying VFS is fr
9a50: 65 65 20 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70  ee to memory map
9a60: 0a 20 20 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20  .  ** as little 
9a70: 6f 72 20 61 73 20 6d 75 63 68 20 61 73 20 69 74  or as much as it
9a80: 20 77 61 6e 74 73 2e 20 20 45 78 63 65 70 74 2c   wants.  Except,
9a90: 20 69 66 20 4e 20 69 73 20 73 65 74 20 74 6f 20   if N is set to 
9aa0: 30 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  0 then the.  ** 
9ab0: 75 70 70 65 72 20 6c 61 79 65 72 73 20 77 69 6c  upper layers wil
9ac0: 6c 20 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 74  l never invoke t
9ad0: 68 65 20 78 46 65 74 63 68 20 69 6e 74 65 72 66  he xFetch interf
9ae0: 61 63 65 73 20 74 6f 20 74 68 65 20 56 46 53 2e  aces to the VFS.
9af0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
9b00: 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20  gTyp_MMAP_SIZE: 
9b10: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e  {.    sqlite3_in
9b20: 74 36 34 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49  t64 sz;.#if SQLI
9b30: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
9b40: 3e 30 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  >0.    assert( s
9b50: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
9b60: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
9b70: 29 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  ) );.    if( zRi
9b80: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ght ){.      int
9b90: 20 69 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   ii;.      sqlit
9ba0: 65 33 41 74 6f 69 36 34 28 7a 52 69 67 68 74 2c  e3Atoi64(zRight,
9bb0: 20 26 73 7a 2c 20 73 71 6c 69 74 65 33 53 74 72   &sz, sqlite3Str
9bc0: 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 2c 20 53  len30(zRight), S
9bd0: 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20  QLITE_UTF8);.   
9be0: 20 20 20 69 66 28 20 73 7a 3c 30 20 29 20 73 7a     if( sz<0 ) sz
9bf0: 20 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c   = sqlite3Global
9c00: 43 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20  Config.szMmap;. 
9c10: 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e       if( pId2->n
9c20: 3d 3d 30 20 29 20 64 62 2d 3e 73 7a 4d 6d 61 70  ==0 ) db->szMmap
9c30: 20 3d 20 73 7a 3b 0a 20 20 20 20 20 20 66 6f 72   = sz;.      for
9c40: 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69  (ii=db->nDb-1; i
9c50: 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20  i>=0; ii--){.   
9c60: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62       if( db->aDb
9c70: 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d  [ii].pBt && (ii=
9c80: 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d  =iDb || pId2->n=
9c90: 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  =0) ){.         
9ca0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
9cb0: 4d 6d 61 70 4c 69 6d 69 74 28 64 62 2d 3e 61 44  MmapLimit(db->aD
9cc0: 62 5b 69 69 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a  b[ii].pBt, sz);.
9cd0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
9ce0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 7a 20 3d  }.    }.    sz =
9cf0: 20 2d 31 3b 0a 20 20 20 20 72 63 20 3d 20 73 71   -1;.    rc = sq
9d00: 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72  lite3_file_contr
9d10: 6f 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49  ol(db, zDb, SQLI
9d20: 54 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49  TE_FCNTL_MMAP_SI
9d30: 5a 45 2c 20 26 73 7a 29 3b 0a 23 65 6c 73 65 0a  ZE, &sz);.#else.
9d40: 20 20 20 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20      sz = 0;.    
9d50: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
9d60: 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 72  #endif.    if( r
9d70: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
9d80: 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67        returnSing
9d90: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6d  leInt(pParse, "m
9da0: 6d 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a  map_size", sz);.
9db0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63      }else if( rc
9dc0: 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e  !=SQLITE_NOTFOUN
9dd0: 44 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73  D ){.      pPars
9de0: 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20  e->nErr++;.     
9df0: 20 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63   pParse->rc = rc
9e00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
9e10: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
9e20: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
9e30: 73 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41  store.  **   PRA
9e40: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d  GMA temp_store =
9e50: 20 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f   "default"|"memo
9e60: 72 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a  ry"|"file".  **.
9e70: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
9e80: 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  et the local val
9e90: 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73  ue of the temp_s
9ea0: 74 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  tore flag.  Chan
9eb0: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f  ging.  ** the lo
9ec0: 63 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e  cal value does n
9ed0: 6f 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20  ot make changes 
9ee0: 74 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65  to the disk file
9ef0: 20 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74   and the default
9f00: 0a 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c  .  ** value will
9f10: 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65   be restored the
9f20: 20 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64   next time the d
9f30: 61 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65  atabase is opene
9f40: 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74  d..  **.  ** Not
9f50: 65 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73  e that it is pos
9f60: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69  sible for the li
9f70: 62 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69  brary compile-ti
9f80: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20  me options to.  
9f90: 2a 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  ** override this
9fa0: 20 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20   setting.  */.  
9fb0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
9fc0: 50 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69  P_STORE: {.    i
9fd0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
9fe0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
9ff0: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 65 6d  Int(pParse, "tem
a000: 70 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65  p_store", db->te
a010: 6d 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d  mp_store);.    }
a020: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e  else{.      chan
a030: 67 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50  geTempStorage(pP
a040: 61 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20  arse, zRight);. 
a050: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
a060: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
a070: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
a080: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
a090: 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f  *   PRAGMA temp_
a0a0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
a0b0: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
a0c0: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
a0d0: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
a0e0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
a0f0: 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f   the temp_store_
a100: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
a110: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
a120: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
a130: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
a140: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
a150: 72 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65  r temporary file
a160: 73 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20  s..  ** Setting 
a170: 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67  to a null string
a180: 20 72 65 76 65 72 74 73 20 74 6f 20 74 68 65 20   reverts to the 
a190: 64 65 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72  default temporar
a1a0: 79 20 64 69 72 65 63 74 6f 72 79 20 73 65 61 72  y directory sear
a1b0: 63 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70  ch..  ** If temp
a1c0: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory 
a1d0: 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e  is changed, then
a1e0: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
a1f0: 74 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a  torage..  **.  *
a200: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
a210: 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45  _TEMP_STORE_DIRE
a220: 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28  CTORY: {.    if(
a230: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
a240: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74 65    if( sqlite3_te
a250: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a  mp_directory ){.
a260: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
a270: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
a280: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
a290: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
a2a0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
a2b0: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
a2c0: 20 20 20 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f      "temp_store_
a2d0: 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49  directory", SQLI
a2e0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
a2f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a300: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
a310: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71  ng8, 0, 1, 0, sq
a320: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
a330: 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  tory, 0);.      
a340: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
a350: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
a360: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
a370: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23    }.    }else{.#
a380: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
a390: 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28  IT_WSD.      if(
a3a0: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
a3b0: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
a3c0: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
a3d0: 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e  te3OsAccess(db->
a3e0: 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51  pVfs, zRight, SQ
a3f0: 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44  LITE_ACCESS_READ
a400: 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20  WRITE, &res);.  
a410: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
a420: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
a430: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
a440: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
a450: 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72  Parse, "not a wr
a460: 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79  itable directory
a470: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  ");.          go
a480: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
a490: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
a4a0: 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54  .      if( SQLIT
a4b0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a  E_TEMP_STORE==0.
a4c0: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
a4d0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20  E_TEMP_STORE==1 
a4e0: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
a4f0: 65 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20  e<=1).       || 
a500: 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f  (SQLITE_TEMP_STO
a510: 52 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d  RE==2 && db->tem
a520: 70 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20  p_store==1).    
a530: 20 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76    ){.        inv
a540: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
a550: 67 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ge(pParse);.    
a560: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
a570: 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74  3_free(sqlite3_t
a580: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a  emp_directory);.
a590: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
a5a0: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73  [0] ){.        s
a5b0: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
a5c0: 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f  ctory = sqlite3_
a5d0: 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52  mprintf("%s", zR
a5e0: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ight);.      }el
a5f0: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
a600: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
a610: 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ry = 0;.      }.
a620: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
a630: 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20  _OMIT_WSD */.   
a640: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
a650: 7d 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53  }..#if SQLITE_OS
a660: 5f 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  _WIN.  /*.  **  
a670: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
a680: 72 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a  re_directory.  *
a690: 2a 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f  *   PRAGMA data_
a6a0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
a6b0: 3d 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f  = ""|"directory_
a6c0: 6e 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20  name".  **.  ** 
a6d0: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
a6e0: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
a6f0: 20 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f   the data_store_
a700: 64 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20  directory flag. 
a710: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
a720: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
a730: 73 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f  specific directo
a740: 72 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f  ry to be used fo
a750: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
a760: 20 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20   that.  ** were 
a770: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
a780: 20 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61   relative pathna
a790: 6d 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20  me.  Setting to 
a7a0: 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65  a null string re
a7b0: 76 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68  verts.  ** to th
a7c0: 65 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61  e default databa
a7d0: 73 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68  se directory, wh
a7e0: 69 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65  ich for database
a7f0: 20 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64   files specified
a800: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c   with.  ** a rel
a810: 61 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20  ative path will 
a820: 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65  probably be base
a830: 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74  d on the current
a840: 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
a850: 68 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e  he.  ** process.
a860: 20 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20    Database file 
a870: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61  specified with a
a880: 6e 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20  n absolute path 
a890: 61 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64  are not impacted
a8a0: 0a 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65  .  ** by this se
a8b0: 74 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73  tting, regardles
a8c0: 73 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a  s of its value..
a8d0: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
a8e0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54   PragTyp_DATA_ST
a8f0: 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b  ORE_DIRECTORY: {
a900: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
a910: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
a920: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
a930: 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20  tory ){.        
a940: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
a950: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
a960: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a970: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
a980: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a   COLNAME_NAME, .
a990: 20 20 20 20 20 20 20 20 20 20 20 20 22 64 61 74              "dat
a9a0: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
a9b0: 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  y", SQLITE_STATI
a9c0: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
a9d0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
a9e0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
a9f0: 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f 64 61  1, 0, sqlite3_da
aa00: 74 61 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29  ta_directory, 0)
aa10: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
aa20: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
aa30: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
aa40: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1);.      }.    
aa50: 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53  }else{.#ifndef S
aa60: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
aa70: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
aa80: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  0] ){.        in
aa90: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72  t res;.        r
aaa0: 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63  c = sqlite3OsAcc
aab0: 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52  ess(db->pVfs, zR
aac0: 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43  ight, SQLITE_ACC
aad0: 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26  ESS_READWRITE, &
aae0: 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
aaf0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
ab00: 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  || res==0 ){.   
ab10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
ab20: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
ab30: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
ab40: 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20  irectory");.    
ab50: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
ab60: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d  a_out;.        }
ab70: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
ab80: 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69  qlite3_free(sqli
ab90: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
aba0: 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a  ry);.      if( z
abb0: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
abc0: 20 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61      sqlite3_data
abd0: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c  _directory = sql
abe0: 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73  ite3_mprintf("%s
abf0: 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
ac00: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
ac10: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
ac20: 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20  rectory = 0;.   
ac30: 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
ac40: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a  QLITE_OMIT_WSD *
ac50: 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  /.    }.    brea
ac60: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23  k;.  }.#endif..#
ac70: 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
ac80: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20  _LOCKING_STYLE. 
ac90: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
aca0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
acb0: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a  k_proxy_file.  *
acc0: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
acd0: 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79  base.]lock_proxy
ace0: 5f 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22  _file = ":auto:"
acf0: 7c 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68  |"lock_file_path
ad00: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
ad10: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  rn or set the va
ad20: 6c 75 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f  lue of the lock_
ad30: 70 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e  proxy_file flag.
ad40: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
ad50: 74 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61  the value sets a
ad60: 20 73 70 65 63 69 66 69 63 20 66 69 6c 65 20 74   specific file t
ad70: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
ad80: 74 61 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f  tabase access lo
ad90: 63 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  cks..  **.  */. 
ada0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
adb0: 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b  CK_PROXY_FILE: {
adc0: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
add0: 20 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20   ){.      Pager 
ade0: 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65  *pPager = sqlite
adf0: 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d  3BtreePager(pDb-
ae00: 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 63 68 61  >pBt);.      cha
ae10: 72 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61  r *proxy_file_pa
ae20: 74 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20  th = NULL;.     
ae30: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70   sqlite3_file *p
ae40: 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61  File = sqlite3Pa
ae50: 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b  gerFile(pPager);
ae60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73  .      sqlite3Os
ae70: 46 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28  FileControlHint(
ae80: 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45  pFile, SQLITE_GE
ae90: 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c  T_LOCKPROXYFILE,
aea0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
aeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 26 70 72               &pr
aec0: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a  oxy_file_path);.
aed0: 20 20 20 20 20 20 0a 20 20 20 20 20 20 69 66 28        .      if(
aee0: 20 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68   proxy_file_path
aef0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
af00: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
af10: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  s(v, 1);.       
af20: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
af30: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
af40: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20  NAME_NAME, .    
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af60: 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63 6b 5f            "lock_
af70: 70 72 6f 78 79 5f 66 69 6c 65 22 2c 20 53 51 4c  proxy_file", SQL
af80: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
af90: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
afa0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
afb0: 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70  ing8, 0, 1, 0, p
afc0: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 2c 20  roxy_file_path, 
afd0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
afe0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
aff0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
b000: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
b010: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50    }else{.      P
b020: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
b030: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
b040: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
b050: 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a    sqlite3_file *
b060: 70 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50  pFile = sqlite3P
b070: 61 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29  agerFile(pPager)
b080: 3b 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b  ;.      int res;
b090: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
b0a0: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
b0b0: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
b0c0: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
b0d0: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
b0e0: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b110: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
b120: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20   else {.        
b130: 72 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c  res=sqlite3OsFil
b140: 65 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20  eControl(pFile, 
b150: 53 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50  SQLITE_SET_LOCKP
b160: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
b170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b190: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  NULL);.      }. 
b1a0: 20 20 20 20 20 69 66 28 20 72 65 73 21 3d 53 51       if( res!=SQ
b1b0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
b1c0: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
b1d0: 73 67 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c  sg(pParse, "fail
b1e0: 65 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70  ed to set lock p
b1f0: 72 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20  roxy file");.   
b200: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
b210: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
b220: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
b230: 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
b240: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
b250: 4e 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20  NG_STYLE */     
b260: 20 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a   .    .  /*.  **
b270: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
b280: 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73  ase.]synchronous
b290: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
b2a0: 64 61 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72  database.]synchr
b2b0: 6f 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52  onous=OFF|ON|NOR
b2c0: 4d 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20  MAL|FULL.  **.  
b2d0: 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74  ** Return or set
b2e0: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
b2f0: 20 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e   of the synchron
b300: 6f 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ous flag.  Chang
b310: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
b320: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
b330: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
b340: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
b350: 61 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66  and the.  ** def
b360: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will 
b370: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
b380: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
b390: 74 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f  tabase is.  ** o
b3a0: 70 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61  pened..  */.  ca
b3b0: 73 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48  se PragTyp_SYNCH
b3c0: 52 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66  RONOUS: {.    if
b3d0: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
b3e0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
b3f0: 6e 74 28 70 50 61 72 73 65 2c 20 22 73 79 6e 63  nt(pParse, "sync
b400: 68 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73  hronous", pDb->s
b410: 61 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a  afety_level-1);.
b420: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b430: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
b440: 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20  mmit ){.        
b450: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
b460: 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20  pParse, .       
b470: 20 20 20 20 20 22 53 61 66 65 74 79 20 6c 65 76       "Safety lev
b480: 65 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68  el may not be ch
b490: 61 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74  anged inside a t
b4a0: 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20  ransaction");.  
b4b0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
b4c0: 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c     pDb->safety_l
b4d0: 65 76 65 6c 20 3d 20 67 65 74 53 61 66 65 74 79  evel = getSafety
b4e0: 4c 65 76 65 6c 28 7a 52 69 67 68 74 2c 30 2c 31  Level(zRight,0,1
b4f0: 29 2b 31 3b 0a 20 20 20 20 20 20 20 20 73 65 74  )+1;.        set
b500: 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62  AllPagerFlags(db
b510: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
b520: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
b530: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
b540: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
b550: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
b560: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
b570: 5f 50 52 41 47 4d 41 53 0a 20 20 63 61 73 65 20  _PRAGMAS.  case 
b580: 50 72 61 67 54 79 70 5f 46 4c 41 47 3a 20 7b 0a  PragTyp_FLAG: {.
b590: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d      if( zRight==
b5a0: 30 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  0 ){.      retur
b5b0: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
b5c0: 65 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  e, aPragmaNames[
b5d0: 6d 69 64 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20  mid].zName,.    
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 61 50   (db->flags & aP
b600: 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e  ragmaNames[mid].
b610: 69 41 72 67 29 21 3d 30 20 29 3b 0a 20 20 20 20  iArg)!=0 );.    
b620: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
b630: 20 6d 61 73 6b 20 3d 20 61 50 72 61 67 6d 61 4e   mask = aPragmaN
b640: 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 3b 20  ames[mid].iArg; 
b650: 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69     /* Mask of bi
b660: 74 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65  ts to set or cle
b670: 61 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ar. */.      if(
b680: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
b690: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  =0 ){.        /*
b6a0: 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70   Foreign key sup
b6b0: 70 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20  port may not be 
b6c0: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
b6d0: 6c 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20  led while not.  
b6e0: 20 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f        ** in auto
b6f0: 2d 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a  -commit mode.  *
b700: 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26  /.        mask &
b710: 3d 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69  = ~(SQLITE_Forei
b720: 67 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d  gnKeys);.      }
b730: 0a 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  ..      if( sqli
b740: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
b750: 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20  ight, 0) ){.    
b760: 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d      db->flags |=
b770: 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c   mask;.      }el
b780: 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
b790: 66 6c 61 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a  flags &= ~mask;.
b7a0: 20 20 20 20 20 20 20 20 69 66 28 20 6d 61 73 6b          if( mask
b7b0: 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  ==SQLITE_DeferFK
b7c0: 73 20 29 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s ) db->nDeferre
b7d0: 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20  dImmCons = 0;.  
b7e0: 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
b7f0: 4d 61 6e 79 20 6f 66 20 74 68 65 20 66 6c 61 67  Many of the flag
b800: 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69 66 79 20  -pragmas modify 
b810: 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74  the code generat
b820: 65 64 20 62 79 20 74 68 65 20 53 51 4c 20 0a 20  ed by the SQL . 
b830: 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72       ** compiler
b840: 20 28 65 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e   (eg. count_chan
b850: 67 65 73 29 2e 20 53 6f 20 61 64 64 20 61 6e 20  ges). So add an 
b860: 6f 70 63 6f 64 65 20 74 6f 20 65 78 70 69 72 65  opcode to expire
b870: 20 61 6c 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f   all.      ** co
b880: 6d 70 69 6c 65 64 20 53 51 4c 20 73 74 61 74 65  mpiled SQL state
b890: 6d 65 6e 74 73 20 61 66 74 65 72 20 6d 6f 64 69  ments after modi
b8a0: 66 79 69 6e 67 20 61 20 70 72 61 67 6d 61 20 76  fying a pragma v
b8b0: 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  alue..      */. 
b8c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b8d0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70  AddOp2(v, OP_Exp
b8e0: 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  ire, 0, 0);.    
b8f0: 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61    setAllPagerFla
b900: 67 73 28 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20  gs(db);.    }.  
b910: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
b920: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
b930: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 20  IT_FLAG_PRAGMAS 
b940: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
b950: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
b960: 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a  RAGMAS.  /*.  **
b970: 20 20 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f     PRAGMA table_
b980: 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20  info(<table>).  
b990: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 61  **.  ** Return a
b9a0: 20 73 69 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20   single row for 
b9b0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  each column of t
b9c0: 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20  he named table. 
b9d0: 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20  The columns of. 
b9e0: 20 2a 2a 20 74 68 65 20 72 65 74 75 72 6e 65 64   ** the returned
b9f0: 20 64 61 74 61 20 73 65 74 20 61 72 65 3a 0a 20   data set are:. 
ba00: 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20   **.  ** cid:   
ba10: 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28       Column id (
ba20: 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d 20 6c 65  numbered from le
ba30: 66 74 20 74 6f 20 72 69 67 68 74 2c 20 73 74 61  ft to right, sta
ba40: 72 74 69 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a  rting at 0).  **
ba50: 20 6e 61 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c   name:       Col
ba60: 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79  umn name.  ** ty
ba70: 70 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  pe:       Column
ba80: 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 74 79 70   declaration typ
ba90: 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a  e..  ** notnull:
baa0: 20 20 20 20 54 72 75 65 20 69 66 20 27 4e 4f 54      True if 'NOT
bab0: 20 4e 55 4c 4c 27 20 69 73 20 70 61 72 74 20 6f   NULL' is part o
bac0: 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61  f column declara
bad0: 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76  tion.  ** dflt_v
bae0: 61 6c 75 65 3a 20 54 68 65 20 64 65 66 61 75 6c  alue: The defaul
baf0: 74 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  t value for the 
bb00: 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a  column, if any..
bb10: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
bb20: 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20  Typ_TABLE_INFO: 
bb30: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
bb40: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
bb50: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
bb60: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
bb70: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
bb80: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
bb90: 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20     int i, k;.   
bba0: 20 20 20 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d     int nHidden =
bbb0: 20 30 3b 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e   0;.      Column
bbc0: 20 2a 70 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e   *pCol;.      In
bbd0: 64 65 78 20 2a 70 50 6b 20 3d 20 73 71 6c 69 74  dex *pPk = sqlit
bbe0: 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
bbf0: 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20 73  x(pTab);.      s
bc00: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
bc10: 43 6f 6c 73 28 76 2c 20 36 29 3b 0a 20 20 20 20  Cols(v, 6);.    
bc20: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
bc30: 20 36 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   6;.      sqlite
bc40: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
bc50: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
bc60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bc70: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
bc80: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
bc90: 22 63 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54  "cid", SQLITE_ST
bca0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
bcb0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
bcc0: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
bcd0: 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53  _NAME, "name", S
bce0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
bcf0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bd00: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
bd10: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
bd20: 74 79 70 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  type", SQLITE_ST
bd30: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
bd40: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
bd50: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
bd60: 5f 4e 41 4d 45 2c 20 22 6e 6f 74 6e 75 6c 6c 22  _NAME, "notnull"
bd70: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
bd80: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
bd90: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
bda0: 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   4, COLNAME_NAME
bdb0: 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20  , "dflt_value", 
bdc0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
bdd0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bde0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35  eSetColName(v, 5
bdf0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
be00: 22 70 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  "pk", SQLITE_STA
be10: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
be20: 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e  te3ViewGetColumn
be30: 4e 61 6d 65 73 28 70 50 61 72 73 65 2c 20 70 54  Names(pParse, pT
be40: 61 62 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  ab);.      for(i
be50: 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61  =0, pCol=pTab->a
be60: 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f  Col; i<pTab->nCo
be70: 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b  l; i++, pCol++){
be80: 0a 20 20 20 20 20 20 20 20 69 66 28 20 49 73 48  .        if( IsH
be90: 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c  iddenColumn(pCol
bea0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6e  ) ){.          n
beb0: 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20  Hidden++;.      
bec0: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
bed0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
bee0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bef0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
bf00: 20 69 2d 6e 48 69 64 64 65 6e 2c 20 31 29 3b 0a   i-nHidden, 1);.
bf10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bf20: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
bf30: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
bf40: 2c 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 30  , pCol->zName, 0
bf50: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
bf60: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
bf70: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
bf80: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
bf90: 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43  pCol->zType ? pC
bfa0: 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20 22 22 2c 20  ol->zType : "", 
bfb0: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
bfc0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
bfd0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 28 70 43   OP_Integer, (pC
bfe0: 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20  ol->notNull ? 1 
bff0: 3a 20 30 29 2c 20 34 29 3b 0a 20 20 20 20 20 20  : 0), 4);.      
c000: 20 20 69 66 28 20 70 43 6f 6c 2d 3e 7a 44 66 6c    if( pCol->zDfl
c010: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  t ){.          s
c020: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
c030: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
c040: 30 2c 20 35 2c 20 30 2c 20 28 63 68 61 72 2a 29  0, 5, 0, (char*)
c050: 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 20 30 29 3b  pCol->zDflt, 0);
c060: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
c070: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
c080: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c090: 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 29 3b 0a 20  P_Null, 0, 5);. 
c0a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
c0b0: 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46   if( (pCol->colF
c0c0: 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50  lags & COLFLAG_P
c0d0: 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20  RIMKEY)==0 ){.  
c0e0: 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20          k = 0;. 
c0f0: 20 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28         }else if(
c100: 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20   pPk==0 ){.     
c110: 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20       k = 1;.    
c120: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c130: 20 20 20 20 20 66 6f 72 28 6b 3d 31 3b 20 41 4c       for(k=1; AL
c140: 57 41 59 53 28 6b 3c 3d 70 54 61 62 2d 3e 6e 43  WAYS(k<=pTab->nC
c150: 6f 6c 29 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f  ol) && pPk->aiCo
c160: 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b  lumn[k-1]!=i; k+
c170: 2b 29 7b 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20  +){}.        }. 
c180: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c190: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
c1a0: 6e 74 65 67 65 72 2c 20 6b 2c 20 36 29 3b 0a 20  nteger, k, 6);. 
c1b0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c1c0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
c1d0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b  esultRow, 1, 6);
c1e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
c1f0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
c200: 61 73 65 20 50 72 61 67 54 79 70 5f 53 54 41 54  ase PragTyp_STAT
c210: 53 3a 20 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  S: {.    Index *
c220: 70 49 64 78 3b 0a 20 20 20 20 48 61 73 68 45 6c  pIdx;.    HashEl
c230: 65 6d 20 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73  em *i;.    v = s
c240: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
c250: 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74  arse);.    sqlit
c260: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
c270: 28 76 2c 20 34 29 3b 0a 20 20 20 20 70 50 61 72  (v, 4);.    pPar
c280: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20  se->nMem = 4;.  
c290: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
c2a0: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
c2b0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69  , iDb);.    sqli
c2c0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c2d0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
c2e0: 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53  NAME, "table", S
c2f0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c300: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c310: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
c320: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e  OLNAME_NAME, "in
c330: 64 65 78 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  dex", SQLITE_STA
c340: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
c350: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
c360: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
c370: 4d 45 2c 20 22 77 69 64 74 68 22 2c 20 53 51 4c  ME, "width", SQL
c380: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c390: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
c3a0: 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c  olName(v, 3, COL
c3b0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 68 65 69 67  NAME_NAME, "heig
c3c0: 68 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ht", SQLITE_STAT
c3d0: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 73  IC);.    for(i=s
c3e0: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
c3f0: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 74 62  pDb->pSchema->tb
c400: 6c 48 61 73 68 29 3b 20 69 3b 20 69 3d 73 71 6c  lHash); i; i=sql
c410: 69 74 65 48 61 73 68 4e 65 78 74 28 69 29 29 7b  iteHashNext(i)){
c420: 0a 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54  .      Table *pT
c430: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
c440: 61 74 61 28 69 29 3b 0a 20 20 20 20 20 20 73 71  ata(i);.      sq
c450: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c460: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c470: 2c 20 31 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e  , 1, 0, pTab->zN
c480: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  ame, 0);.      s
c490: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c4a0: 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20  (v, OP_Null, 0, 
c4b0: 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2);.      sqlite
c4c0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c4d0: 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20  P_Integer,.     
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4f0: 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69 74        (int)sqlit
c500: 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70 54  e3LogEstToInt(pT
c510: 61 62 2d 3e 73 7a 54 61 62 52 6f 77 29 2c 20 33  ab->szTabRow), 3
c520: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c530: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c540: 5f 49 6e 74 65 67 65 72 2c 20 28 69 6e 74 29 70  _Integer, (int)p
c550: 54 61 62 2d 3e 6e 52 6f 77 45 73 74 2c 20 34 29  Tab->nRowEst, 4)
c560: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c570: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c580: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29  ResultRow, 1, 4)
c590: 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78  ;.      for(pIdx
c5a0: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
c5b0: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
c5c0: 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20  pNext){.        
c5d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c5e0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
c5f0: 20 30 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e   0, 2, 0, pIdx->
c600: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
c610: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c620: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c630: 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c650: 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67   (int)sqlite3Log
c660: 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e 73  EstToInt(pIdx->s
c670: 7a 49 64 78 52 6f 77 29 2c 20 33 29 3b 0a 20 20  zIdxRow), 3);.  
c680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c690: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c6a0: 74 65 67 65 72 2c 20 28 69 6e 74 29 70 49 64 78  teger, (int)pIdx
c6b0: 2d 3e 61 69 52 6f 77 45 73 74 5b 30 5d 2c 20 34  ->aiRowEst[0], 4
c6c0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c6d0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c6e0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
c6f0: 20 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   4);.      }.   
c700: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
c710: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
c720: 49 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20  INDEX_INFO: if( 
c730: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e  zRight ){.    In
c740: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54  dex *pIdx;.    T
c750: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
c760: 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46 69  pIdx = sqlite3Fi
c770: 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52 69 67  ndIndex(db, zRig
c780: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
c790: 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20 20  ( pIdx ){.      
c7a0: 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 70 54 61  int i;.      pTa
c7b0: 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c 65  b = pIdx->pTable
c7c0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c7d0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
c7e0: 20 33 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73   3);.      pPars
c7f0: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
c800: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
c810: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
c820: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  e, iDb);.      s
c830: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
c840: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
c850: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 6e 6f 22  ME_NAME, "seqno"
c860: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
c870: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c880: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
c890: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
c8a0: 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45 5f  , "cid", SQLITE_
c8b0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
c8c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
c8d0: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
c8e0: 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c  ME_NAME, "name",
c8f0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
c900: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
c910: 69 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b  i<pIdx->nKeyCol;
c920: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
c930: 31 36 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e  16 cnum = pIdx->
c940: 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20  aiColumn[i];.   
c950: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c960: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c970: 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20  eger, i, 1);.   
c980: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c990: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c9a0: 65 67 65 72 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a  eger, cnum, 2);.
c9b0: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
c9c0: 70 54 61 62 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20  pTab->nCol>cnum 
c9d0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c9e0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
c9f0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
ca00: 2c 20 30 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b  , 0, pTab->aCol[
ca10: 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b  cnum].zName, 0);
ca20: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ca30: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ca40: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33  _ResultRow, 1, 3
ca50: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
ca60: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
ca70: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e   case PragTyp_IN
ca80: 44 45 58 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52  DEX_LIST: if( zR
ca90: 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65  ight ){.    Inde
caa0: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62  x *pIdx;.    Tab
cab0: 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e  le *pTab;.    in
cac0: 74 20 69 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  t i;.    pTab = 
cad0: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
cae0: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
caf0: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
cb00: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
cb10: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
cb20: 73 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  se);.      sqlit
cb30: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
cb40: 28 76 2c 20 33 29 3b 0a 20 20 20 20 20 20 70 50  (v, 3);.      pP
cb50: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a  arse->nMem = 3;.
cb60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
cb70: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
cb80: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
cb90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
cba0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
cbb0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71  LNAME_NAME, "seq
cbc0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
cbd0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
cbe0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
cbf0: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
cc00: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
cc10: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
cc20: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
cc30: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
cc40: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 75 6e 69 71  NAME_NAME, "uniq
cc50: 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ue", SQLITE_STAT
cc60: 49 43 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70  IC);.      for(p
cc70: 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
cc80: 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20 70 49 64  , i=0; pIdx; pId
cc90: 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 69  x=pIdx->pNext, i
cca0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
ccb0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ccc0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c  , OP_Integer, i,
ccd0: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
cce0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
ccf0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
cd00: 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61   2, 0, pIdx->zNa
cd10: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
cd20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cd30: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
cd40: 20 70 49 64 78 2d 3e 6f 6e 45 72 72 6f 72 21 3d   pIdx->onError!=
cd50: 4f 45 5f 4e 6f 6e 65 2c 20 33 29 3b 0a 20 20 20  OE_None, 3);.   
cd60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cd70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
cd80: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
cd90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
cda0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
cdb0: 65 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41  e PragTyp_DATABA
cdc0: 53 45 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69  SE_LIST: {.    i
cdd0: 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65  nt i;.    sqlite
cde0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
cdf0: 76 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 3);.    pPars
ce00: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
ce10: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
ce20: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
ce30: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22  NAME_NAME, "seq"
ce40: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
ce50: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
ce60: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
ce70: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
ce80: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
ce90: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
cea0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
ceb0: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
cec0: 4e 41 4d 45 2c 20 22 66 69 6c 65 22 2c 20 53 51  NAME, "file", SQ
ced0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
cee0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
cef0: 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
cf00: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d    if( db->aDb[i]
cf10: 2e 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  .pBt==0 ) contin
cf20: 75 65 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  ue;.      assert
cf30: 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ( db->aDb[i].zNa
cf40: 6d 65 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73  me!=0 );.      s
cf50: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cf60: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
cf70: 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  i, 1);.      sql
cf80: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
cf90: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
cfa0: 20 32 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69   2, 0, db->aDb[i
cfb0: 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ].zName, 0);.   
cfc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cfd0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
cfe0: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20  g8, 0, 3, 0,.   
cff0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42          sqlite3B
d000: 74 72 65 65 47 65 74 46 69 6c 65 6e 61 6d 65 28  treeGetFilename(
d010: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 2c  db->aDb[i].pBt),
d020: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
d030: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d040: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
d050: 20 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   3);.    }.  }. 
d060: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
d070: 50 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f  PragTyp_COLLATIO
d080: 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e  N_LIST: {.    in
d090: 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 48 61 73  t i = 0;.    Has
d0a0: 68 45 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 73 71  hElem *p;.    sq
d0b0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
d0c0: 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70  ols(v, 2);.    p
d0d0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b  Parse->nMem = 2;
d0e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d0f0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
d100: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d110: 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  seq", SQLITE_STA
d120: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
d130: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d140: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
d150: 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49  ME, "name", SQLI
d160: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d170: 66 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68  for(p=sqliteHash
d180: 46 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c  First(&db->aColl
d190: 53 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74  Seq); p; p=sqlit
d1a0: 65 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20  eHashNext(p)){. 
d1b0: 20 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43       CollSeq *pC
d1c0: 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a  oll = (CollSeq *
d1d0: 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28  )sqliteHashData(
d1e0: 70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  p);.      sqlite
d1f0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d200: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2b 2b 2c 20  P_Integer, i++, 
d210: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
d220: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
d230: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
d240: 20 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65   0, pColl->zName
d250: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
d260: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d270: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
d280: 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  , 2);.    }.  }.
d290: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
d2a0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  /* SQLITE_OMIT_S
d2b0: 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f  CHEMA_PRAGMAS */
d2c0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
d2d0: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
d2e0: 59 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  Y.  case PragTyp
d2f0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53  _FOREIGN_KEY_LIS
d300: 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  T: if( zRight ){
d310: 0a 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a  .    FKey *pFK;.
d320: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
d330: 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69  .    pTab = sqli
d340: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
d350: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
d360: 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20     if( pTab ){. 
d370: 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33       v = sqlite3
d380: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
d390: 0a 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54 61  .      pFK = pTa
d3a0: 62 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20 20  b->pFKey;.      
d3b0: 69 66 28 20 70 46 4b 20 29 7b 0a 20 20 20 20 20  if( pFK ){.     
d3c0: 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20     int i = 0; . 
d3d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d3e0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
d3f0: 38 29 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72  8);.        pPar
d400: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20  se->nMem = 8;.  
d410: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
d420: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
d430: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
d440: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d450: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
d460: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69  COLNAME_NAME, "i
d470: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
d480: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
d490: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d4a0: 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
d4b0: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
d4c0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d4d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d4e0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
d4f0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d500: 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53  table", SQLITE_S
d510: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
d520: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d530: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
d540: 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 72 6f 6d 22  AME_NAME, "from"
d550: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d560: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d570: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d580: 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 4, COLNAME_NA
d590: 4d 45 2c 20 22 74 6f 22 2c 20 53 51 4c 49 54 45  ME, "to", SQLITE
d5a0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
d5b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
d5c0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f  ColName(v, 5, CO
d5d0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f  LNAME_NAME, "on_
d5e0: 75 70 64 61 74 65 22 2c 20 53 51 4c 49 54 45 5f  update", SQLITE_
d5f0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
d600: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
d610: 6f 6c 4e 61 6d 65 28 76 2c 20 36 2c 20 43 4f 4c  olName(v, 6, COL
d620: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 64  NAME_NAME, "on_d
d630: 65 6c 65 74 65 22 2c 20 53 51 4c 49 54 45 5f 53  elete", SQLITE_S
d640: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
d650: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d660: 6c 4e 61 6d 65 28 76 2c 20 37 2c 20 43 4f 4c 4e  lName(v, 7, COLN
d670: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6d 61 74 63 68  AME_NAME, "match
d680: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d690: 29 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65  );.        while
d6a0: 28 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20  (pFK){.         
d6b0: 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20   int j;.        
d6c0: 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b    for(j=0; j<pFK
d6d0: 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20  ->nCol; j++){.  
d6e0: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
d6f0: 7a 43 6f 6c 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c  zCol = pFK->aCol
d700: 5b 6a 5d 2e 7a 43 6f 6c 3b 0a 20 20 20 20 20 20  [j].zCol;.      
d710: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 44        char *zOnD
d720: 65 6c 65 74 65 20 3d 20 28 63 68 61 72 20 2a 29  elete = (char *)
d730: 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e  actionName(pFK->
d740: 61 41 63 74 69 6f 6e 5b 30 5d 29 3b 0a 20 20 20  aAction[0]);.   
d750: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
d760: 4f 6e 55 70 64 61 74 65 20 3d 20 28 63 68 61 72  OnUpdate = (char
d770: 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46   *)actionName(pF
d780: 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 3b 0a  K->aAction[1]);.
d790: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d7a0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d7b0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20   OP_Integer, i, 
d7c0: 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  1);.            
d7d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d7e0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
d7f0: 20 6a 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20   j, 2);.        
d800: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d810: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d820: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 46  ng8, 0, 3, 0, pF
d830: 4b 2d 3e 7a 54 6f 2c 20 30 29 3b 0a 20 20 20 20  K->zTo, 0);.    
d840: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d850: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
d860: 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30  String8, 0, 4, 0
d870: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
d880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d890: 70 54 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e  pTab->aCol[pFK->
d8a0: 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a  aCol[j].iFrom].z
d8b0: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
d8c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d8d0: 65 41 64 64 4f 70 34 28 76 2c 20 7a 43 6f 6c 20  eAddOp4(v, zCol 
d8e0: 3f 20 4f 50 5f 53 74 72 69 6e 67 38 20 3a 20 4f  ? OP_String8 : O
d8f0: 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 2c 20 30 2c  P_Null, 0, 5, 0,
d900: 20 7a 43 6f 6c 2c 20 30 29 3b 0a 20 20 20 20 20   zCol, 0);.     
d910: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d920: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
d930: 74 72 69 6e 67 38 2c 20 30 2c 20 36 2c 20 30 2c  tring8, 0, 6, 0,
d940: 20 7a 4f 6e 55 70 64 61 74 65 2c 20 30 29 3b 0a   zOnUpdate, 0);.
d950: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d960: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
d970: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
d980: 37 2c 20 30 2c 20 7a 4f 6e 44 65 6c 65 74 65 2c  7, 0, zOnDelete,
d990: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
d9a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d9b0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
d9c0: 2c 20 30 2c 20 38 2c 20 30 2c 20 22 4e 4f 4e 45  , 0, 8, 0, "NONE
d9d0: 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  ", 0);.         
d9e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d9f0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
da00: 74 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20  tRow, 1, 8);.   
da10: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
da20: 20 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20     ++i;.        
da30: 20 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65    pFK = pFK->pNe
da40: 78 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20  xtFrom;.        
da50: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
da60: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
da70: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
da80: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
da90: 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66  IGN_KEY) */..#if
daa0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
dab0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66  _FOREIGN_KEY.#if
dac0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
dad0: 5f 54 52 49 47 47 45 52 0a 20 20 63 61 73 65 20  _TRIGGER.  case 
dae0: 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f  PragTyp_FOREIGN_
daf0: 4b 45 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20  KEY_CHECK: {.   
db00: 20 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20 20   FKey *pFK;     
db10: 20 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6f 72          /* A for
db20: 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
db30: 69 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65  int */.    Table
db40: 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
db50: 20 20 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c 65    /* Child table
db60: 20 63 6f 6e 74 61 69 6e 20 22 52 45 46 45 52 45   contain "REFERE
db70: 4e 43 45 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f  NCES" keyword */
db80: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 50 61 72  .    Table *pPar
db90: 65 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 50  ent;        /* P
dba0: 61 72 65 6e 74 20 74 61 62 6c 65 20 74 68 61 74  arent table that
dbb0: 20 63 68 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f   child points to
dbc0: 20 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   */.    Index *p
dbd0: 49 64 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Idx;           /
dbe0: 2a 20 49 6e 64 65 78 20 69 6e 20 74 68 65 20 70  * Index in the p
dbf0: 61 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20  arent table */. 
dc00: 20 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20     int i;       
dc10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
dc20: 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65  p counter:  Fore
dc30: 69 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20 66  ign key number f
dc40: 6f 72 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69  or pTab */.    i
dc50: 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20  nt j;           
dc60: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
dc70: 75 6e 74 65 72 3a 20 20 46 69 65 6c 64 20 6f 66  unter:  Field of
dc80: 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
dc90: 20 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c 65 6d   */.    HashElem
dca0: 20 2a 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f   *k;           /
dcb0: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20  * Loop counter: 
dcc0: 20 4e 65 78 74 20 74 61 62 6c 65 20 69 6e 20 73   Next table in s
dcd0: 63 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74  chema */.    int
dce0: 20 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   x;             
dcf0: 20 20 20 20 2f 2a 20 72 65 73 75 6c 74 20 76 61      /* result va
dd00: 72 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e  riable */.    in
dd10: 74 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20  t regResult;    
dd20: 20 20 20 20 20 2f 2a 20 33 20 72 65 67 69 73 74       /* 3 regist
dd30: 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 65  ers to hold a re
dd40: 73 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20  sult row */.    
dd50: 69 6e 74 20 72 65 67 4b 65 79 3b 20 20 20 20 20  int regKey;     
dd60: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
dd70: 65 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66  er to hold key f
dd80: 6f 72 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20  or checking the 
dd90: 46 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  FK */.    int re
dda0: 67 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20  gRow;           
ddb0: 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20 74 6f   /* Registers to
ddc0: 20 68 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d   hold a row from
ddd0: 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74   pTab */.    int
dde0: 20 61 64 64 72 54 6f 70 3b 20 20 20 20 20 20 20   addrTop;       
ddf0: 20 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20      /* Top of a 
de00: 6c 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20 66 6f  loop checking fo
de10: 72 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20  reign keys */.  
de20: 20 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20    int addrOk;   
de30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70           /* Jump
de40: 20 68 65 72 65 20 69 66 20 74 68 65 20 6b 65 79   here if the key
de50: 20 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e   is OK */.    in
de60: 74 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20 20  t *aiCols;      
de70: 20 20 20 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f       /* child to
de80: 20 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d   parent column m
de90: 61 70 70 69 6e 67 20 2a 2f 0a 0a 20 20 20 20 72  apping */..    r
dea0: 65 67 52 65 73 75 6c 74 20 3d 20 70 50 61 72 73  egResult = pPars
deb0: 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20 20 20 70  e->nMem+1;.    p
dec0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34  Parse->nMem += 4
ded0: 3b 0a 20 20 20 20 72 65 67 4b 65 79 20 3d 20 2b  ;.    regKey = +
dee0: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
def0: 20 20 20 72 65 67 52 6f 77 20 3d 20 2b 2b 70 50     regRow = ++pP
df00: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
df10: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
df20: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
df30: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
df40: 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20  mCols(v, 4);.   
df50: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
df60: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
df70: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c  NAME_NAME, "tabl
df80: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
df90: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
dfa0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
dfb0: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
dfc0: 2c 20 22 72 6f 77 69 64 22 2c 20 53 51 4c 49 54  , "rowid", SQLIT
dfd0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
dfe0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
dff0: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
e000: 4d 45 5f 4e 41 4d 45 2c 20 22 70 61 72 65 6e 74  ME_NAME, "parent
e010: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
e020: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
e030: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
e040: 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  3, COLNAME_NAME,
e050: 20 22 66 6b 69 64 22 2c 20 53 51 4c 49 54 45 5f   "fkid", SQLITE_
e060: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
e070: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
e080: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
e090: 29 3b 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69 74  );.    k = sqlit
e0a0: 65 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e  eHashFirst(&db->
e0b0: 61 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61  aDb[iDb].pSchema
e0c0: 2d 3e 74 62 6c 48 61 73 68 29 3b 0a 20 20 20 20  ->tblHash);.    
e0d0: 77 68 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20  while( k ){.    
e0e0: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
e0f0: 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 73          pTab = s
e100: 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
e110: 65 28 70 50 61 72 73 65 2c 20 30 2c 20 7a 52 69  e(pParse, 0, zRi
e120: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20  ght, zDb);.     
e130: 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20     k = 0;.      
e140: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
e150: 54 61 62 20 3d 20 28 54 61 62 6c 65 2a 29 73 71  Tab = (Table*)sq
e160: 6c 69 74 65 48 61 73 68 44 61 74 61 28 6b 29 3b  liteHashData(k);
e170: 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 73 71 6c  .        k = sql
e180: 69 74 65 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a  iteHashNext(k);.
e190: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
e1a0: 28 20 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61  ( pTab==0 || pTa
e1b0: 62 2d 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f  b->pFKey==0 ) co
e1c0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71  ntinue;.      sq
e1d0: 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70  lite3TableLock(p
e1e0: 50 61 72 73 65 2c 20 69 44 62 2c 20 70 54 61 62  Parse, iDb, pTab
e1f0: 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d  ->tnum, 0, pTab-
e200: 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69  >zName);.      i
e210: 66 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65  f( pTab->nCol+re
e220: 67 52 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65  gRow>pParse->nMe
e230: 6d 20 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  m ) pParse->nMem
e240: 20 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20   = pTab->nCol + 
e250: 72 65 67 52 6f 77 3b 0a 20 20 20 20 20 20 73 71  regRow;.      sq
e260: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70  lite3OpenTable(p
e270: 50 61 72 73 65 2c 20 30 2c 20 69 44 62 2c 20 70  Parse, 0, iDb, p
e280: 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  Tab, OP_OpenRead
e290: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
e2a0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
e2b0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 72 65 67  _String8, 0, reg
e2c0: 52 65 73 75 6c 74 2c 20 30 2c 20 70 54 61 62 2d  Result, 0, pTab-
e2d0: 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20  >zName,.        
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2f0: 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  P4_TRANSIENT);. 
e300: 20 20 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46       for(i=1, pF
e310: 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70  K=pTab->pFKey; p
e320: 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b  FK; i++, pFK=pFK
e330: 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20  ->pNextFrom){.  
e340: 20 20 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20        pParent = 
e350: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
e360: 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a  (db, pFK->zTo, z
e370: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  Db);.        if(
e380: 20 70 50 61 72 65 6e 74 3d 3d 30 20 29 20 63 6f   pParent==0 ) co
e390: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
e3a0: 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20  pIdx = 0;.      
e3b0: 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f    sqlite3TableLo
e3c0: 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20  ck(pParse, iDb, 
e3d0: 70 50 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30  pParent->tnum, 0
e3e0: 2c 20 70 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65  , pParent->zName
e3f0: 29 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20 73  );.        x = s
e400: 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
e410: 64 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72  dex(pParse, pPar
e420: 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c  ent, pFK, &pIdx,
e430: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28   0);.        if(
e440: 20 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20   x==0 ){.       
e450: 20 20 20 69 66 28 20 70 49 64 78 3d 3d 30 20 29     if( pIdx==0 )
e460: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
e470: 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70  lite3OpenTable(p
e480: 50 61 72 73 65 2c 20 69 2c 20 69 44 62 2c 20 70  Parse, i, iDb, p
e490: 50 61 72 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52  Parent, OP_OpenR
e4a0: 65 61 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ead);.          
e4b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
e4c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e4d0: 64 4f 70 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52  dOp3(v, OP_OpenR
e4e0: 65 61 64 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e  ead, i, pIdx->tn
e4f0: 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  um, iDb);.      
e500: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e510: 65 53 65 74 50 34 4b 65 79 49 6e 66 6f 28 70 50  eSetP4KeyInfo(pP
e520: 61 72 73 65 2c 20 70 49 64 78 29 3b 0a 20 20 20  arse, pIdx);.   
e530: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
e540: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
e550: 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    k = 0;.       
e560: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
e570: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
e580: 20 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65    assert( pParse
e590: 2d 3e 6e 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d  ->nErr>0 || pFK=
e5a0: 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
e5b0: 70 46 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  pFK ) break;.   
e5c0: 20 20 20 69 66 28 20 70 50 61 72 73 65 2d 3e 6e     if( pParse->n
e5d0: 54 61 62 3c 69 20 29 20 70 50 61 72 73 65 2d 3e  Tab<i ) pParse->
e5e0: 6e 54 61 62 20 3d 20 69 3b 0a 20 20 20 20 20 20  nTab = i;.      
e5f0: 61 64 64 72 54 6f 70 20 3d 20 73 71 6c 69 74 65  addrTop = sqlite
e600: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
e610: 50 5f 52 65 77 69 6e 64 2c 20 30 29 3b 20 56 64  P_Rewind, 0); Vd
e620: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
e630: 20 20 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46       for(i=1, pF
e640: 4b 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70  K=pTab->pFKey; p
e650: 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b  FK; i++, pFK=pFK
e660: 2d 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20  ->pNextFrom){.  
e670: 20 20 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20        pParent = 
e680: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
e690: 28 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a  (db, pFK->zTo, z
e6a0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64  Db);.        pId
e6b0: 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61  x = 0;.        a
e6c0: 69 43 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20  iCols = 0;.     
e6d0: 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29     if( pParent )
e6e0: 7b 0a 20 20 20 20 20 20 20 20 20 20 78 20 3d 20  {.          x = 
e6f0: 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
e700: 6e 64 65 78 28 70 50 61 72 73 65 2c 20 70 50 61  ndex(pParse, pPa
e710: 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78  rent, pFK, &pIdx
e720: 2c 20 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20  , &aiCols);.    
e730: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 78 3d        assert( x=
e740: 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  =0 );.        }.
e750: 20 20 20 20 20 20 20 20 61 64 64 72 4f 6b 20 3d          addrOk =
e760: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
e770: 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20  Label(v);.      
e780: 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 26 26    if( pParent &&
e790: 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20   pIdx==0 ){.    
e7a0: 20 20 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d        int iKey =
e7b0: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46   pFK->aCol[0].iF
e7c0: 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61  rom;.          a
e7d0: 73 73 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26  ssert( iKey>=0 &
e7e0: 26 20 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f  & iKey<pTab->nCo
e7f0: 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  l );.          i
e800: 66 28 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69  f( iKey!=pTab->i
e810: 50 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  PKey ){.        
e820: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e830: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75  ddOp3(v, OP_Colu
e840: 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67  mn, 0, iKey, reg
e850: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
e860: 20 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44    sqlite3ColumnD
e870: 65 66 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20  efault(v, pTab, 
e880: 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20  iKey, regRow);. 
e890: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e8a0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
e8b0: 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f  OP_IsNull, regRo
e8c0: 77 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65  w, addrOk); Vdbe
e8d0: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
e8e0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e8f0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
e900: 5f 4d 75 73 74 42 65 49 6e 74 2c 20 72 65 67 52  _MustBeInt, regR
e910: 6f 77 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  ow, .           
e920: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
e930: 75 72 72 65 6e 74 41 64 64 72 28 76 29 2b 33 29  urrentAddr(v)+3)
e940: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
e950: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
e960: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
e970: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e980: 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30  2(v, OP_Rowid, 0
e990: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
e9a0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
e9b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e9c0: 70 33 28 76 2c 20 4f 50 5f 4e 6f 74 45 78 69 73  p3(v, OP_NotExis
e9d0: 74 73 2c 20 69 2c 20 30 2c 20 72 65 67 52 6f 77  ts, i, 0, regRow
e9e0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
e9f0: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
ea00: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
ea10: 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 61  v, OP_Goto, 0, a
ea20: 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  ddrOk);.        
ea30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
ea40: 70 48 65 72 65 28 76 2c 20 73 71 6c 69 74 65 33  pHere(v, sqlite3
ea50: 56 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28  VdbeCurrentAddr(
ea60: 76 29 2d 32 29 3b 0a 20 20 20 20 20 20 20 20 7d  v)-2);.        }
ea70: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
ea80: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e  for(j=0; j<pFK->
ea90: 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nCol; j++){.    
eaa0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
eab0: 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
eac0: 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c  OfTable(v, pTab,
ead0: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20   0,.            
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaf0: 61 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b  aiCols ? aiCols[
eb00: 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a  j] : pFK->aCol[j
eb10: 5d 2e 69 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b  ].iFrom, regRow+
eb20: 6a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  j);.            
eb30: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
eb40: 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20  2(v, OP_IsNull, 
eb50: 72 65 67 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b  regRow+j, addrOk
eb60: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
eb70: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  v);.          }.
eb80: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
eb90: 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  arent ){.       
eba0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ebb0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 4d 61 6b  AddOp4(v, OP_Mak
ebc0: 65 52 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c  eRecord, regRow,
ebd0: 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b   pFK->nCol, regK
ebe0: 65 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey,.            
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 20 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66    sqlite3IndexAf
ec10: 66 69 6e 69 74 79 53 74 72 28 76 2c 70 49 64 78  finityStr(v,pIdx
ec20: 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20  ), pFK->nCol);. 
ec30: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ec40: 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28  e3VdbeAddOp4Int(
ec50: 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20  v, OP_Found, i, 
ec60: 61 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20  addrOk, regKey, 
ec70: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
ec80: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
ec90: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
eca0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
ecb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ecc0: 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c  (v, OP_Rowid, 0,
ecd0: 20 72 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20   regResult+1);. 
ece0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ecf0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
ed00: 74 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65  tring8, 0, regRe
ed10: 73 75 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20  sult+2, 0, .    
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed30: 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20        pFK->zTo, 
ed40: 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  P4_TRANSIENT);. 
ed50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ed60: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
ed70: 6e 74 65 67 65 72 2c 20 69 2d 31 2c 20 72 65 67  nteger, i-1, reg
ed80: 52 65 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20  Result+3);.     
ed90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
eda0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
edb0: 74 52 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c  tRow, regResult,
edc0: 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   4);.        sql
edd0: 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c  ite3VdbeResolveL
ede0: 61 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b  abel(v, addrOk);
edf0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ee00: 44 62 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c  DbFree(db, aiCol
ee10: 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  s);.      }.    
ee20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ee30: 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20  Op2(v, OP_Next, 
ee40: 30 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b 20 56  0, addrTop+1); V
ee50: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
ee60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ee70: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
ee80: 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rTop);.    }.  }
ee90: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
eea0: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
eeb0: 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
eec0: 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21  ) */.#endif /* !
eed0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
eee0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
eef0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45   */..#ifndef NDE
ef00: 42 55 47 0a 20 20 63 61 73 65 20 50 72 61 67 54  BUG.  case PragT
ef10: 79 70 5f 50 41 52 53 45 52 5f 54 52 41 43 45 3a  yp_PARSER_TRACE:
ef20: 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
ef30: 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73  t ){.      if( s
ef40: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
ef50: 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20  (zRight, 0) ){. 
ef60: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
ef70: 72 73 65 72 54 72 61 63 65 28 73 74 64 65 72 72  rserTrace(stderr
ef80: 2c 20 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20  , "parser: ");. 
ef90: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
efa0: 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65      sqlite3Parse
efb0: 72 54 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20  rTrace(0, 0);.  
efc0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
efd0: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a    break;.#endif.
efe0: 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20  .  /* Reinstall 
eff0: 74 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f  the LIKE and GLO
f000: 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68  B functions.  Th
f010: 65 20 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b  e variant of LIK
f020: 45 0a 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c  E.  ** used will
f030: 20 62 65 20 63 61 73 65 20 73 65 6e 73 69 74 69   be case sensiti
f040: 76 65 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64  ve or not depend
f050: 69 6e 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a  ing on the RHS..
f060: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
f070: 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49 54 49  Typ_CASE_SENSITI
f080: 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69  VE_LIKE: {.    i
f090: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
f0a0: 20 20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74     sqlite3Regist
f0b0: 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
f0c0: 64 62 2c 20 73 71 6c 69 74 65 33 47 65 74 42 6f  db, sqlite3GetBo
f0d0: 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29  olean(zRight, 0)
f0e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
f0f0: 72 65 61 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53  reak;..#ifndef S
f100: 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f  QLITE_INTEGRITY_
f110: 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a  CHECK_ERROR_MAX.
f120: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
f130: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
f140: 45 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65  ERROR_MAX 100.#e
f150: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
f160: 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
f170: 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50  ITY_CHECK.  /* P
f180: 72 61 67 6d 61 20 22 71 75 69 63 6b 5f 63 68 65  ragma "quick_che
f190: 63 6b 22 20 69 73 20 72 65 64 75 63 65 64 20 76  ck" is reduced v
f1a0: 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20  ersion of .  ** 
f1b0: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20  integrity_check 
f1c0: 64 65 73 69 67 6e 65 64 20 74 6f 20 64 65 74 65  designed to dete
f1d0: 63 74 20 6d 6f 73 74 20 64 61 74 61 62 61 73 65  ct most database
f1e0: 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a   corruption.  **
f1f0: 20 77 69 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66   without most of
f200: 20 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66   the overhead of
f210: 20 61 20 66 75 6c 6c 20 69 6e 74 65 67 72 69 74   a full integrit
f220: 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20  y-check..  */.  
f230: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 54  case PragTyp_INT
f240: 45 47 52 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a  EGRITY_CHECK: {.
f250: 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64      int i, j, ad
f260: 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20  dr, mxErr;..    
f270: 2f 2a 20 43 6f 64 65 20 74 68 61 74 20 61 70 70  /* Code that app
f280: 65 61 72 73 20 61 74 20 74 68 65 20 65 6e 64 20  ears at the end 
f290: 6f 66 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  of the integrity
f2a0: 20 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65   check.  If no e
f2b0: 72 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73  rror.    ** mess
f2c0: 61 67 65 73 20 68 61 76 65 20 62 65 65 6e 20 67  ages have been g
f2d0: 65 6e 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74  enerated, output
f2e0: 20 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20   OK.  Otherwise 
f2f0: 6f 75 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a  output the.    *
f300: 2a 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a  * error message.
f310: 20 20 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69      */.    stati
f320: 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20  c const int iLn 
f330: 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49  = VDBE_OFFSET_LI
f340: 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61  NENO(2);.    sta
f350: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
f360: 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d  List endCode[] =
f370: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 41 64   {.      { OP_Ad
f380: 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20 30 2c  dImm,      1, 0,
f390: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
f3a0: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 0 */.      { O
f3b0: 50 5f 49 66 4e 65 67 2c 20 20 20 20 20 20 20 31  P_IfNeg,       1
f3c0: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
f3d0: 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
f3e0: 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20   { OP_String8,  
f3f0: 20 20 20 30 2c 20 33 2c 20 20 20 20 20 20 20 20     0, 3,        
f400: 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20  0},    /* 2 */. 
f410: 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
f420: 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20 20 20  Row,   3, 1,    
f430: 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a      0},.    };..
f440: 20 20 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20      int isQuick 
f450: 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  = (sqlite3Tolowe
f460: 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27  r(zLeft[0])=='q'
f470: 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  );..    /* If th
f480: 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  e PRAGMA command
f490: 20 77 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d   was of the form
f4a0: 20 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e   "PRAGMA <db>.in
f4b0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
f4c0: 20 20 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20      ** then iDb 
f4d0: 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e  is set to the in
f4e0: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
f4f0: 61 73 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ase identified b
f500: 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49  y <db>..    ** I
f510: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
f520: 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61   integrity of da
f530: 74 61 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20  tabase iDb only 
f540: 69 73 20 76 65 72 69 66 69 65 64 20 62 79 0a 20  is verified by. 
f550: 20 20 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63     ** the VDBE c
f560: 72 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20  reated below..  
f570: 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65    **.    ** Othe
f580: 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f  rwise, if the co
f590: 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79  mmand was simply
f5a0: 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   "PRAGMA integri
f5b0: 74 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20  ty_check" (or.  
f5c0: 20 20 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69    ** "PRAGMA qui
f5d0: 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e  ck_check"), then
f5e0: 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 30   iDb is set to 0
f5f0: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  . In this case, 
f600: 73 65 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74  set iDb.    ** t
f610: 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e  o -1 here, to in
f620: 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65 20  dicate that the 
f630: 56 44 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69  VDBE should veri
f640: 66 79 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  fy the integrity
f650: 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61  .    ** of all a
f660: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
f670: 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  s.  */.    asser
f680: 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  t( iDb>=0 );.   
f690: 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20   assert( iDb==0 
f6a0: 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20  || pId2->z );.  
f6b0: 20 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30    if( pId2->z==0
f6c0: 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20   ) iDb = -1;..  
f6d0: 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
f6e0: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
f6f0: 20 2a 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e   */.    pParse->
f700: 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 71  nMem = 6;.    sq
f710: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
f720: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73  ols(v, 1);.    s
f730: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
f740: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
f750: 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 74 65 67 72  ME_NAME, "integr
f760: 69 74 79 5f 63 68 65 63 6b 22 2c 20 53 51 4c 49  ity_check", SQLI
f770: 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20  TE_STATIC);..   
f780: 20 2f 2a 20 53 65 74 20 74 68 65 20 6d 61 78 69   /* Set the maxi
f790: 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74 20  mum error count 
f7a0: 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d 20 53  */.    mxErr = S
f7b0: 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f  QLITE_INTEGRITY_
f7c0: 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b  CHECK_ERROR_MAX;
f7d0: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
f7e0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
f7f0: 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c  GetInt32(zRight,
f800: 20 26 6d 78 45 72 72 29 3b 0a 20 20 20 20 20 20   &mxErr);.      
f810: 69 66 28 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a  if( mxErr<=0 ){.
f820: 20 20 20 20 20 20 20 20 6d 78 45 72 72 20 3d 20          mxErr = 
f830: 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59  SQLITE_INTEGRITY
f840: 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58  _CHECK_ERROR_MAX
f850: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
f860: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f870: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
f880: 67 65 72 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20  ger, mxErr, 1); 
f890: 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73   /* reg[1] holds
f8a0: 20 65 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a   errors left */.
f8b0: 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e  .    /* Do an in
f8c0: 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e  tegrity check on
f8d0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 66   each database f
f8e0: 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69  ile */.    for(i
f8f0: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
f900: 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45  ++){.      HashE
f910: 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20 48 61  lem *x;.      Ha
f920: 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20  sh *pTbls;.     
f930: 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20   int cnt = 0;.. 
f940: 20 20 20 20 20 69 66 28 20 4f 4d 49 54 5f 54 45       if( OMIT_TE
f950: 4d 50 44 42 20 26 26 20 69 3d 3d 31 20 29 20 63  MPDB && i==1 ) c
f960: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69  ontinue;.      i
f970: 66 28 20 69 44 62 3e 3d 30 20 26 26 20 69 21 3d  f( iDb>=0 && i!=
f980: 69 44 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  iDb ) continue;.
f990: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f  .      sqlite3Co
f9a0: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
f9b0: 50 61 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20  Parse, i);.     
f9c0: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
f9d0: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
f9e0: 49 66 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61  IfPos, 1); /* Ha
f9f0: 6c 74 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72  lt if out of err
fa00: 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 56 64 62  ors */.      Vdb
fa10: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
fa20: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
fa30: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
fa40: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  , 0, 0);.      s
fa50: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
fa60: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20  re(v, addr);..  
fa70: 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74      /* Do an int
fa80: 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20  egrity check of 
fa90: 74 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20  the B-Tree.     
faa0: 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65 67   **.      ** Beg
fab0: 69 6e 20 62 79 20 66 69 6c 6c 69 6e 67 20 72 65  in by filling re
fac0: 67 69 73 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e  gisters 2, 3, ..
fad0: 2e 20 77 69 74 68 20 74 68 65 20 72 6f 6f 74 20  . with the root 
fae0: 70 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20  pages numbers.  
faf0: 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74      ** for all t
fb00: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
fb10: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
fb20: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
fb30: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
fb40: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
fb50: 28 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20  (db, i, 0) );.  
fb60: 20 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d      pTbls = &db-
fb70: 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[i].pSchema-
fb80: 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20  >tblHash;.      
fb90: 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68  for(x=sqliteHash
fba0: 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b  First(pTbls); x;
fbb0: 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   x=sqliteHashNex
fbc0: 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54  t(x)){.        T
fbd0: 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
fbe0: 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a  iteHashData(x);.
fbf0: 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70          Index *p
fc00: 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28  Idx;.        if(
fc10: 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
fc20: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
fc30: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
fc40: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54  , OP_Integer, pT
fc50: 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29  ab->tnum, 2+cnt)
fc60: 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65  ;.          Vdbe
fc70: 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22  Comment((v, "%s"
fc80: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b  , pTab->zName));
fc90: 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b  .          cnt++
fca0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
fcb0: 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61      for(pIdx=pTa
fcc0: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
fcd0: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
fce0: 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t){.          sq
fcf0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
fd00: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
fd10: 49 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74  Idx->tnum, 2+cnt
fd20: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64 62  );.          Vdb
fd30: 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73  eComment((v, "%s
fd40: 22 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 29  ", pIdx->zName))
fd50: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b  ;.          cnt+
fd60: 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
fd70: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d     }..      /* M
fd80: 61 6b 65 20 73 75 72 65 20 73 75 66 66 69 63 69  ake sure suffici
fd90: 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ent number of re
fda0: 67 69 73 74 65 72 73 20 68 61 76 65 20 62 65 65  gisters have bee
fdb0: 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  n allocated */. 
fdc0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
fdd0: 6d 20 3d 20 4d 41 58 28 20 70 50 61 72 73 65 2d  m = MAX( pParse-
fde0: 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a  >nMem, cnt+8 );.
fdf0: 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65  .      /* Do the
fe00: 20 62 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74   b-tree integrit
fe10: 79 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20  y checks */.    
fe20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
fe30: 4f 70 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72  Op3(v, OP_Integr
fe40: 69 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31  ityCk, 2, cnt, 1
fe50: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
fe60: 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
fe70: 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64  (u8)i);.      ad
fe80: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
fe90: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e  AddOp1(v, OP_IsN
fea0: 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f 76  ull, 2); VdbeCov
feb0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
fec0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
fed0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
fee0: 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20   0, 3, 0,.      
fef0: 20 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74     sqlite3MPrint
ff00: 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61  f(db, "*** in da
ff10: 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22  tabase %s ***\n"
ff20: 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
ff30: 6d 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34  me),.         P4
ff40: 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20  _DYNAMIC);.     
ff50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ff60: 70 33 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32  p3(v, OP_Move, 2
ff70: 2c 20 34 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  , 4, 1);.      s
ff80: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
ff90: 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34  (v, OP_Concat, 4
ffa0: 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20 20 20 73  , 3, 2);.      s
ffb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ffc0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
ffd0: 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  , 2, 1);.      s
ffe0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
fff0: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20  re(v, addr);..  
10000 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
10010 20 61 6c 6c 20 74 68 65 20 69 6e 64 69 63 65 73   all the indices
10020 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64   are constructed
10030 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20 20   correctly..    
10040 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28 78    */.      for(x
10050 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
10060 28 70 54 62 6c 73 29 3b 20 78 20 26 26 20 21 69  (pTbls); x && !i
10070 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65  sQuick; x=sqlite
10080 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20  HashNext(x)){.  
10090 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61        Table *pTa
100a0 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61  b = sqliteHashDa
100b0 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49  ta(x);.        I
100c0 6e 64 65 78 20 2a 70 49 64 78 2c 20 2a 70 50 6b  ndex *pIdx, *pPk
100d0 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20  ;.        Index 
100e0 2a 70 50 72 69 6f 72 20 3d 20 30 3b 0a 20 20 20  *pPrior = 0;.   
100f0 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70       int loopTop
10100 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 44  ;.        int iD
10110 61 74 61 43 75 72 2c 20 69 49 64 78 43 75 72 3b  ataCur, iIdxCur;
10120 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 31 20  .        int r1 
10130 3d 20 2d 31 3b 0a 0a 20 20 20 20 20 20 20 20 69  = -1;..        i
10140 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d  f( pTab->pIndex=
10150 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
10160 20 20 20 20 20 20 20 70 50 6b 20 3d 20 48 61 73         pPk = Has
10170 52 6f 77 69 64 28 70 54 61 62 29 20 3f 20 30 20  Rowid(pTab) ? 0 
10180 3a 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79  : sqlite3Primary
10190 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a  KeyIndex(pTab);.
101a0 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
101b0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
101c0 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29  (v, OP_IfPos, 1)
101d0 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75  ;  /* Stop if ou
101e0 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20  t of errors */. 
101f0 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72         VdbeCover
10200 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
10210 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10220 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c  2(v, OP_Halt, 0,
10230 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
10240 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
10250 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 20  (v, addr);.     
10260 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 61     sqlite3ExprCa
10270 63 68 65 43 6c 65 61 72 28 70 50 61 72 73 65 29  cheClear(pParse)
10280 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10290 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64  3OpenTableAndInd
102a0 69 63 65 73 28 70 50 61 72 73 65 2c 20 70 54 61  ices(pParse, pTa
102b0 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 0a  b, OP_OpenRead,.
102c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102e0 20 20 20 31 2c 20 30 2c 20 26 69 44 61 74 61 43     1, 0, &iDataC
102f0 75 72 2c 20 26 69 49 64 78 43 75 72 29 3b 0a 20  ur, &iIdxCur);. 
10300 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10310 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
10320 6e 74 65 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20  nteger, 0, 7);. 
10330 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20         for(j=0, 
10340 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
10350 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
10360 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b  dx->pNext, j++){
10370 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10380 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
10390 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 38  OP_Integer, 0, 8
103a0 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e  +j); /* index en
103b0 74 72 69 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f  tries counter */
103c0 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
103d0 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
103e0 3d 20 4d 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d  = MAX(pParse->nM
103f0 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20 20 20 20  em, 8+j);.      
10400 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10410 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64  Op2(v, OP_Rewind
10420 2c 20 69 44 61 74 61 43 75 72 2c 20 30 29 3b 20  , iDataCur, 0); 
10430 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
10440 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70  .        loopTop
10450 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
10460 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
10470 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20  m, 7, 1);.      
10480 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
10490 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
104a0 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
104b0 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
104c0 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20        int jmp2, 
104d0 6a 6d 70 33 2c 20 6a 6d 70 34 3b 0a 20 20 20 20  jmp3, jmp4;.    
104e0 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70        if( pPk==p
104f0 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  Idx ) continue;.
10500 20 20 20 20 20 20 20 20 20 20 72 31 20 3d 20 73            r1 = s
10510 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e  qlite3GenerateIn
10520 64 65 78 4b 65 79 28 70 50 61 72 73 65 2c 20 70  dexKey(pParse, p
10530 49 64 78 2c 20 69 44 61 74 61 43 75 72 2c 20 30  Idx, iDataCur, 0
10540 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20 20 20  , 0, &jmp3,.    
10550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10570 20 20 20 70 50 72 69 6f 72 2c 20 72 31 29 3b 0a     pPrior, r1);.
10580 20 20 20 20 20 20 20 20 20 20 70 50 72 69 6f 72            pPrior
10590 20 3d 20 70 49 64 78 3b 0a 20 20 20 20 20 20 20   = pIdx;.       
105a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
105b0 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
105c0 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20  m, 8+j, 1);  /* 
105d0 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72 79 20  increment entry 
105e0 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20  count */.       
105f0 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65     jmp2 = sqlite
10600 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76  3VdbeAddOp4Int(v
10610 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78  , OP_Found, iIdx
10620 43 75 72 2b 6a 2c 20 30 2c 20 72 31 2c 0a 20 20  Cur+j, 0, r1,.  
10630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10650 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d      pIdx->nColum
10660 6e 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  n); VdbeCoverage
10670 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
10680 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10690 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
106a0 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d  , -1); /* Decrem
106b0 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20  ent error limit 
106c0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  */.          sql
106d0 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
106e0 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
106f0 20 33 2c 20 30 2c 20 22 72 6f 77 20 22 2c 20 50   3, 0, "row ", P
10700 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
10710 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10720 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
10730 63 61 74 2c 20 37 2c 20 33 2c 20 33 29 3b 0a 20  cat, 7, 3, 3);. 
10740 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
10750 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
10760 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20  _String8, 0, 4, 
10770 30 2c 20 22 20 6d 69 73 73 69 6e 67 20 66 72 6f  0, " missing fro
10780 6d 20 69 6e 64 65 78 20 22 2c 0a 20 20 20 20 20  m index ",.     
10790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107a0 20 20 20 20 20 20 20 50 34 5f 53 54 41 54 49 43         P4_STATIC
107b0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
107c0 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
107d0 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20  , OP_Concat, 4, 
107e0 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 3);.         
107f0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10800 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
10810 2c 20 30 2c 20 34 2c 20 30 2c 20 70 49 64 78 2d  , 0, 4, 0, pIdx-
10820 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53  >zName, P4_TRANS
10830 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20  IENT);.         
10840 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10850 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
10860 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   4, 3, 3);.     
10870 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10880 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
10890 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20  ultRow, 3, 1);. 
108a0 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20           jmp4 = 
108b0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
108c0 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
108d0 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
108e0 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
108f0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28  lite3VdbeAddOp0(
10900 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20  v, OP_Halt);.   
10910 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10920 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
10930 70 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  p4);.          s
10940 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
10950 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20  re(v, jmp2);.   
10960 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10970 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76  beResolveLabel(v
10980 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20  , jmp3);.       
10990 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
109a0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
109b0 4f 50 5f 4e 65 78 74 2c 20 69 44 61 74 61 43 75  OP_Next, iDataCu
109c0 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62  r, loopTop); Vdb
109d0 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
109e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
109f0 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f  eJumpHere(v, loo
10a00 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66  pTop-1);.#ifndef
10a10 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
10a20 45 45 43 4f 55 4e 54 0a 20 20 20 20 20 20 20 20  EECOUNT.        
10a30 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10a40 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
10a50 20 30 2c 20 32 2c 20 30 2c 20 0a 20 20 20 20 20   0, 2, 0, .     
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a70 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  "wrong # of entr
10a80 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22 2c 20  ies in index ", 
10a90 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
10aa0 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64      for(j=0, pId
10ab0 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
10ac0 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
10ad0 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20  >pNext, j++){.  
10ae0 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d          if( pPk=
10af0 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65  =pIdx ) continue
10b00 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 72  ;.          addr
10b10 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
10b20 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20  rrentAddr(v);.  
10b30 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10b40 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10b50 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32  IfPos, 1, addr+2
10b60 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
10b70 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
10b80 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10b90 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30  v, OP_Halt, 0, 0
10ba0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10bb0 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10bc0 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78  , OP_Count, iIdx
10bd0 43 75 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20  Cur+j, 3);.     
10be0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10bf0 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c  AddOp3(v, OP_Eq,
10c00 20 38 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29   8+j, addr+8, 3)
10c10 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
10c20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10c30 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35  ite3VdbeChangeP5
10c40 28 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  (v, SQLITE_NOTNU
10c50 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  LL);.          s
10c60 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10c70 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
10c80 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20  , -1);.         
10c90 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10ca0 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
10cb0 2c 20 30 2c 20 33 2c 20 30 2c 20 70 49 64 78 2d  , 0, 3, 0, pIdx-
10cc0 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53  >zName, P4_TRANS
10cd0 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20  IENT);.         
10ce0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10cf0 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
10d00 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20   3, 2, 7);.     
10d10 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10d20 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
10d30 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20  ultRow, 7, 1);. 
10d40 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20         }.#endif 
10d50 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  /* SQLITE_OMIT_B
10d60 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20  TREECOUNT */.   
10d70 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20     } .    }.    
10d80 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
10d90 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
10da0 72 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65  rraySize(endCode
10db0 29 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29  ), endCode, iLn)
10dc0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
10dd0 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64  eChangeP2(v, add
10de0 72 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20  r, -mxErr);.    
10df0 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
10e00 65 72 65 28 76 2c 20 61 64 64 72 2b 31 29 3b 0a  ere(v, addr+1);.
10e10 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
10e20 68 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b  hangeP4(v, addr+
10e30 32 2c 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54  2, "ok", P4_STAT
10e40 49 43 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  IC);.  }.  break
10e50 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
10e60 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
10e70 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e  Y_CHECK */..#ifn
10e80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
10e90 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20  UTF16.  /*.  ** 
10ea0 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
10eb0 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  g.  **   PRAGMA 
10ec0 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d  encoding = "utf-
10ed0 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66  8"|"utf-16"|"utf
10ee0 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65  -16le"|"utf-16be
10ef0 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69  ".  **.  ** In i
10f00 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74  ts first form, t
10f10 68 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72  his pragma retur
10f20 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  ns the encoding 
10f30 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a  of the main.  **
10f40 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
10f50 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  e database is no
10f60 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69  t initialized, i
10f70 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  t is initialized
10f80 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20   now..  **.  ** 
10f90 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
10fa0 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69  of this pragma i
10fb0 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  s a no-op if the
10fc0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
10fd0 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74  ile.  ** has not
10fe0 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e   already been in
10ff0 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68  itialized. In th
11000 69 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20  is case it sets 
11010 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a  the default.  **
11020 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77   encoding that w
11030 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
11040 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
11050 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20  e file if a new 
11060 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65  file.  ** is cre
11070 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73  ated. If an exis
11080 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61  ting main databa
11090 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65  se file is opene
110a0 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  d, then the.  **
110b0 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
110c0 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65  coding for the e
110d0 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
110e0 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a   is used..  ** .
110f0 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65    ** In all case
11100 73 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  s new databases 
11110 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
11120 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64  e ATTACH command
11130 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65   are.  ** create
11140 64 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d  d to use the sam
11150 65 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65  e default text e
11160 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d  ncoding as the m
11170 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66  ain database. If
11180 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  .  ** the main d
11190 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
111a0 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
111b0 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20   and/or created 
111c0 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a  when ATTACH.  **
111d0 20 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68   is executed, th
111e0 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72  is is done befor
111f0 65 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65  e the ATTACH ope
11200 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  ration..  **.  *
11210 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  * In the second 
11220 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61  form this pragma
11230 20 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65   sets the text e
11240 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73  ncoding to be us
11250 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64  ed in.  ** new d
11260 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72  atabase files cr
11270 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73  eated using this
11280 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
11290 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a  . It is only.  *
112a0 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f  * useful if invo
112b0 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ked immediately 
112c0 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64  after the main d
112d0 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20  atabase i.  */. 
112e0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e   case PragTyp_EN
112f0 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74  CODING: {.    st
11300 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
11310 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20  t EncName {.    
11320 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20    char *zName;. 
11330 20 20 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20       u8 enc;.   
11340 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20   } encnames[] = 
11350 7b 0a 20 20 20 20 20 20 7b 20 22 55 54 46 38 22  {.      { "UTF8"
11360 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46  ,     SQLITE_UTF
11370 38 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  8        },.    
11380 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20    { "UTF-8",    
11390 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20  SQLITE_UTF8     
113a0 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
113b0 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f  e element [1] */
113c0 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
113d0 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  le", SQLITE_UTF1
113e0 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d  6LE     },  /* M
113f0 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
11400 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  2] */.      { "U
11410 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45  TF-16be", SQLITE
11420 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20  _UTF16BE     }, 
11430 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
11440 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20  ent [3] */.     
11450 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53   { "UTF16le",  S
11460 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20  QLITE_UTF16LE   
11470 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
11480 46 31 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f  F16be",  SQLITE_
11490 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20  UTF16BE     },. 
114a0 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c       { "UTF-16",
114b0 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
114c0 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49        }, /* SQLI
114d0 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a  TE_UTF16NATIVE *
114e0 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36  /.      { "UTF16
114f0 22 2c 20 20 20 20 30 20 20 20 20 20 20 20 20 20  ",    0         
11500 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53           }, /* S
11510 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
11520 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20  E */.      { 0, 
11530 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63  0 }.    };.    c
11540 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e  onst struct EncN
11550 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69  ame *pEnc;.    i
11560 66 28 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20  f( !zRight ){   
11570 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f   /* "PRAGMA enco
11580 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69  ding" */.      i
11590 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
115a0 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
115b0 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
115c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
115d0 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
115e0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
115f0 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
11600 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
11610 45 2c 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53  E, "encoding", S
11620 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
11630 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11640 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72  AddOp2(v, OP_Str
11650 69 6e 67 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20  ing8, 0, 1);.   
11660 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61     assert( encna
11670 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d  mes[SQLITE_UTF8]
11680 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  .enc==SQLITE_UTF
11690 38 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  8 );.      asser
116a0 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49  t( encnames[SQLI
116b0 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d  TE_UTF16LE].enc=
116c0 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
116d0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
116e0 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45   encnames[SQLITE
116f0 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53  _UTF16BE].enc==S
11700 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b  QLITE_UTF16BE );
11710 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
11720 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31  beChangeP4(v, -1
11730 2c 20 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70  , encnames[ENC(p
11740 50 61 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d  Parse->db)].zNam
11750 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  e, P4_STATIC);. 
11760 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11770 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
11780 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
11790 20 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20     }else{       
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117b0 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f   /* "PRAGMA enco
117c0 64 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20  ding = XXX" */. 
117d0 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61       /* Only cha
117e0 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  nge the value of
117f0 20 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74   sqlite.enc if t
11800 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
11810 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20  le is not.      
11820 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  ** initialized. 
11830 49 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  If the main data
11840 62 61 73 65 20 65 78 69 73 74 73 2c 20 74 68 65  base exists, the
11850 20 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20   new sqlite.enc 
11860 76 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77  value.      ** w
11870 69 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74  ill be overwritt
11880 65 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  en when the sche
11890 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65  ma is next loade
118a0 64 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  d. If it does no
118b0 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61  t.      ** alrea
118c0 64 79 20 65 78 69 73 74 73 2c 20 69 74 20 77 69  dy exists, it wi
118d0 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20 74 6f  ll be created to
118e0 20 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63   use the new enc
118f0 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20  oding value..   
11900 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
11910 0a 20 20 20 20 20 20 20 20 21 28 44 62 48 61 73  .        !(DbHas
11920 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20  Property(db, 0, 
11930 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
11940 29 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62  ) || .        Db
11950 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
11960 30 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20  0, DB_Empty) .  
11970 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66      ){.        f
11980 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65  or(pEnc=&encname
11990 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d  s[0]; pEnc->zNam
119a0 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20  e; pEnc++){.    
119b0 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c        if( 0==sql
119c0 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
119d0 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29  ht, pEnc->zName)
119e0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
119f0 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 20  ENC(pParse->db) 
11a00 3d 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45  = pEnc->enc ? pE
11a10 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45  nc->enc : SQLITE
11a20 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20  _UTF16NATIVE;.  
11a30 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
11a40 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
11a50 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
11a60 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20  f( !pEnc->zName 
11a70 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
11a80 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
11a90 72 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65  rse, "unsupporte
11aa0 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c  d encoding: %s",
11ab0 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20   zRight);.      
11ac0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
11ad0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
11ae0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
11af0 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23  OMIT_UTF16 */..#
11b00 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
11b10 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  IT_SCHEMA_VERSIO
11b20 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20  N_PRAGMAS.  /*. 
11b30 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
11b40 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76  tabase.]schema_v
11b50 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52  ersion.  **   PR
11b60 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
11b70 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d  schema_version =
11b80 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
11b90 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
11ba0 61 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65  atabase.]user_ve
11bb0 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41  rsion.  **   PRA
11bc0 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75  GMA [database.]u
11bd0 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69  ser_version = <i
11be0 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
11bf0 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
11c00 62 61 73 65 2e 5d 66 72 65 65 6c 69 73 74 5f 63  base.]freelist_c
11c10 6f 75 6e 74 20 3d 20 3c 69 6e 74 65 67 65 72 3e  ount = <integer>
11c20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  **.  **   PRA
11c30 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61  GMA [database.]a
11c40 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20  pplication_id.  
11c50 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
11c60 61 62 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69  abase.]applicati
11c70 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72  on_id = <integer
11c80 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  >.  **.  ** The 
11c90 70 72 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f  pragma's schema_
11ca0 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72  version and user
11cb0 5f 76 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65  _version are use
11cc0 64 20 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a  d to set or get.
11cd0 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
11ce0 66 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  f the schema-ver
11cf0 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65  sion and user-ve
11d00 72 73 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76  rsion, respectiv
11d10 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74  ely. Both.  ** t
11d20 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
11d30 6e 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76  n and the user-v
11d40 65 72 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69  ersion are 32-bi
11d50 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
11d60 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e  s.  ** stored in
11d70 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
11d80 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ader..  **.  ** 
11d90 54 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  The schema-cooki
11da0 65 20 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c  e is usually onl
11db0 79 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e  y manipulated in
11dc0 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69  ternally by SQLi
11dd0 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69  te. It.  ** is i
11de0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51  ncremented by SQ
11df0 4c 69 74 65 20 77 68 65 6e 65 76 65 72 20 74 68  Lite whenever th
11e00 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
11e10 61 20 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62  a is modified (b
11e20 79 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20  y.  ** creating 
11e30 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61  or dropping a ta
11e40 62 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54  ble or index). T
11e50 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
11e60 6e 20 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a  n is used by.  *
11e70 2a 20 53 51 4c 69 74 65 20 65 61 63 68 20 74 69  * SQLite each ti
11e80 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65 78  me a query is ex
11e90 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65  ecuted to ensure
11ea0 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e   that the intern
11eb0 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66  al cache.  ** of
11ec0 20 74 68 65 20 73 63 68 65 6d 61 20 75 73 65 64   the schema used
11ed0 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20   when compiling 
11ee0 74 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61  the SQL query ma
11ef0 74 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61  tches the schema
11f00 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74   of.  ** the dat
11f10 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68  abase against wh
11f20 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64  ich the compiled
11f30 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c   query is actual
11f40 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a  ly executed..  *
11f50 2a 20 53 75 62 76 65 72 74 69 6e 67 20 74 68 69  * Subverting thi
11f60 73 20 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75  s mechanism by u
11f70 73 69 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68  sing "PRAGMA sch
11f80 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20  ema_version" to 
11f90 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20  modify.  ** the 
11fa0 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69  schema-version i
11fb0 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61  s potentially da
11fc0 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20  ngerous and may 
11fd0 6c 65 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a  lead to program.
11fe0 20 20 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20    ** crashes or 
11ff0 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
12000 69 6f 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61  ion. Use with ca
12010 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a  ution!.  **.  **
12020 20 54 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   The user-versio
12030 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e  n is not used in
12040 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69  ternally by SQLi
12050 74 65 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73  te. It may be us
12060 65 64 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69  ed by.  ** appli
12070 63 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20  cations for any 
12080 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20  purpose..  */.  
12090 63 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 41  case PragTyp_HEA
120a0 44 45 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20  DER_VALUE: {.   
120b0 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 20 20 20   int iCookie;   
120c0 2f 2a 20 43 6f 6f 6b 69 65 20 69 6e 64 65 78 2e  /* Cookie index.
120d0 20 31 20 66 6f 72 20 73 63 68 65 6d 61 2d 63 6f   1 for schema-co
120e0 6f 6b 69 65 2c 20 36 20 66 6f 72 20 75 73 65 72  okie, 6 for user
120f0 2d 63 6f 6f 6b 69 65 2e 20 2a 2f 0a 20 20 20 20  -cookie. */.    
12100 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
12110 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20  tree(v, iDb);.  
12120 20 20 73 77 69 74 63 68 28 20 7a 4c 65 66 74 5b    switch( zLeft[
12130 30 5d 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  0] ){.      case
12140 20 27 61 27 3a 20 63 61 73 65 20 27 41 27 3a 0a   'a': case 'A':.
12150 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20          iCookie 
12160 3d 20 42 54 52 45 45 5f 41 50 50 4c 49 43 41 54  = BTREE_APPLICAT
12170 49 4f 4e 5f 49 44 3b 0a 20 20 20 20 20 20 20 20  ION_ID;.        
12180 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
12190 65 20 27 66 27 3a 20 63 61 73 65 20 27 46 27 3a  e 'f': case 'F':
121a0 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65  .        iCookie
121b0 20 3d 20 42 54 52 45 45 5f 46 52 45 45 5f 50 41   = BTREE_FREE_PA
121c0 47 45 5f 43 4f 55 4e 54 3b 0a 20 20 20 20 20 20  GE_COUNT;.      
121d0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
121e0 61 73 65 20 27 73 27 3a 20 63 61 73 65 20 27 53  ase 's': case 'S
121f0 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b  ':.        iCook
12200 69 65 20 3d 20 42 54 52 45 45 5f 53 43 48 45 4d  ie = BTREE_SCHEM
12210 41 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20  A_VERSION;.     
12220 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
12230 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20  default:.       
12240 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45   iCookie = BTREE
12250 5f 55 53 45 52 5f 56 45 52 53 49 4f 4e 3b 0a 20  _USER_VERSION;. 
12260 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
12270 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 7a 52 69    }..    if( zRi
12280 67 68 74 20 26 26 20 69 43 6f 6f 6b 69 65 21 3d  ght && iCookie!=
12290 42 54 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f  BTREE_FREE_PAGE_
122a0 43 4f 55 4e 54 20 29 7b 0a 20 20 20 20 20 20 2f  COUNT ){.      /
122b0 2a 20 57 72 69 74 65 20 74 68 65 20 73 70 65 63  * Write the spec
122c0 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c  ified cookie val
122d0 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74  ue */.      stat
122e0 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
122f0 69 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20  ist setCookie[] 
12300 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
12310 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
12320 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20   0,  1,  0},    
12330 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 0 */.        
12340 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
12350 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c       0,  1,  0},
12360 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20      /* 1 */.    
12370 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b      { OP_SetCook
12380 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20  ie,      0,  0, 
12390 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a   1},    /* 2 */.
123a0 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69        };.      i
123b0 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65  nt addr = sqlite
123c0 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
123d0 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43  , ArraySize(setC
123e0 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69  ookie), setCooki
123f0 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
12400 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
12410 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a  (v, addr, iDb);.
12420 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12430 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
12440 72 2b 31 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  r+1, sqlite3Atoi
12450 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20  (zRight));.     
12460 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
12470 67 65 50 31 28 76 2c 20 61 64 64 72 2b 32 2c 20  geP1(v, addr+2, 
12480 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
12490 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28  te3VdbeChangeP2(
124a0 76 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f 6b  v, addr+2, iCook
124b0 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ie);.    }else{.
124c0 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68        /* Read th
124d0 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b  e specified cook
124e0 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ie value */.    
124f0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
12500 64 62 65 4f 70 4c 69 73 74 20 72 65 61 64 43 6f  dbeOpList readCo
12510 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  okie[] = {.     
12520 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74     { OP_Transact
12530 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c 20  ion,     0,  0, 
12540 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
12550 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61          { OP_Rea
12560 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  dCookie,      0,
12570 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    1,  0},    /* 
12580 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  1 */.        { O
12590 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 20  P_ResultRow,    
125a0 20 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20     1,  1,  0}.  
125b0 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
125c0 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
125d0 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
125e0 41 72 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f  ArraySize(readCo
125f0 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b 69  okie), readCooki
12600 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
12610 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
12620 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a  (v, addr, iDb);.
12630 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12640 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
12650 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+1, iDb);.     
12660 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
12670 67 65 50 33 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP3(v, addr+1, 
12680 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20  iCookie);.      
12690 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
126a0 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
126b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
126c0 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
126d0 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65  OLNAME_NAME, zLe
126e0 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  ft, SQLITE_TRANS
126f0 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  IENT);.    }.  }
12700 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
12710 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
12720 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50  SCHEMA_VERSION_P
12730 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
12740 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
12750 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
12760 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  GS.  /*.  **   P
12770 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70  RAGMA compile_op
12780 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tions.  **.  ** 
12790 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73  Return the names
127a0 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d   of all compile-
127b0 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65  time options use
127c0 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c  d in this build,
127d0 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e  .  ** one option
127e0 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20   per row..  */. 
127f0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f   case PragTyp_CO
12800 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b  MPILE_OPTIONS: {
12810 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a  .    int i = 0;.
12820 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
12830 7a 4f 70 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  zOpt;.    sqlite
12840 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
12850 76 2c 20 31 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 1);.    pPars
12860 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20  e->nMem = 1;.   
12870 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
12880 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
12890 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70  NAME_NAME, "comp
128a0 69 6c 65 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c  ile_option", SQL
128b0 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
128c0 20 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20   while( (zOpt = 
128d0 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f  sqlite3_compileo
128e0 70 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21  ption_get(i++))!
128f0 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
12900 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
12910 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
12920 31 2c 20 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a  1, 0, zOpt, 0);.
12930 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12940 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
12950 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
12960 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
12970 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
12980 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
12990 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a  OPTION_DIAGS */.
129a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
129b0 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20  OMIT_WAL.  /*.  
129c0 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
129d0 61 62 61 73 65 2e 5d 77 61 6c 5f 63 68 65 63 6b  abase.]wal_check
129e0 70 6f 69 6e 74 20 3d 20 70 61 73 73 69 76 65 7c  point = passive|
129f0 66 75 6c 6c 7c 72 65 73 74 61 72 74 0a 20 20 2a  full|restart.  *
12a00 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  *.  ** Checkpoin
12a10 74 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  t the database..
12a20 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
12a30 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49  Typ_WAL_CHECKPOI
12a40 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 42  NT: {.    int iB
12a50 74 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62  t = (pId2->z?iDb
12a60 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  :SQLITE_MAX_ATTA
12a70 43 48 45 44 29 3b 0a 20 20 20 20 69 6e 74 20 65  CHED);.    int e
12a80 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48  Mode = SQLITE_CH
12a90 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
12aa0 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
12ab0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
12ac0 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69  lite3StrICmp(zRi
12ad0 67 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20  ght, "full")==0 
12ae0 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65  ){.        eMode
12af0 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50   = SQLITE_CHECKP
12b00 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20  OINT_FULL;.     
12b10 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
12b20 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
12b30 2c 20 22 72 65 73 74 61 72 74 22 29 3d 3d 30 20  , "restart")==0 
12b40 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65  ){.        eMode
12b50 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50   = SQLITE_CHECKP
12b60 4f 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a 20 20  OINT_RESTART;.  
12b70 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
12b80 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
12b90 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20  mCols(v, 3);.   
12ba0 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
12bb0 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  3;.    sqlite3Vd
12bc0 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
12bd0 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
12be0 20 22 62 75 73 79 22 2c 20 53 51 4c 49 54 45 5f   "busy", SQLITE_
12bf0 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
12c00 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
12c10 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
12c20 5f 4e 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51  _NAME, "log", SQ
12c30 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
12c40 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
12c50 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f  ColName(v, 2, CO
12c60 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65  LNAME_NAME, "che
12c70 63 6b 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49  ckpointed", SQLI
12c80 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20  TE_STATIC);..   
12c90 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
12ca0 70 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f  p3(v, OP_Checkpo
12cb0 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c  int, iBt, eMode,
12cc0 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
12cd0 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
12ce0 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33  _ResultRow, 1, 3
12cf0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
12d00 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
12d10 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63  GMA wal_autochec
12d20 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52  kpoint.  **   PR
12d30 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65  AGMA wal_autoche
12d40 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a  ckpoint = N.  **
12d50 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20  .  ** Configure 
12d60 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  a database conne
12d70 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74  ction to automat
12d80 69 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e  ically checkpoin
12d90 74 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  t a database.  *
12da0 2a 20 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61  * after accumula
12db0 74 69 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e  ting N frames in
12dc0 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65   the log. Or que
12dd0 72 79 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  ry for the curre
12de0 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66  nt value.  ** of
12df0 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   N..  */.  case 
12e00 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f  PragTyp_WAL_AUTO
12e10 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20  CHECKPOINT: {.  
12e20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
12e30 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61        sqlite3_wa
12e40 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
12e50 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  (db, sqlite3Atoi
12e60 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d  (zRight));.    }
12e70 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
12e80 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 77 61  eInt(pParse, "wa
12e90 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
12ea0 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78  ", .       db->x
12eb0 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c  WalCallback==sql
12ec0 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
12ed0 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20  ok ? .          
12ee0 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
12ef0 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20  NT(db->pWalArg) 
12f00 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  : 0);.  }.  brea
12f10 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a  k;.#endif..  /*.
12f20 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72    **  PRAGMA shr
12f30 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a  ink_memory.  **.
12f40 20 20 2a 2a 20 54 68 69 73 20 70 72 61 67 6d 61    ** This pragma
12f50 20 61 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65   attempts to fre
12f60 65 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79  e as much memory
12f70 20 61 73 20 70 6f 73 73 69 62 6c 65 20 66 72 6f   as possible fro
12f80 6d 20 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65  m the.  ** curre
12f90 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  nt database conn
12fa0 65 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63  ection..  */.  c
12fb0 61 73 65 20 50 72 61 67 54 79 70 5f 53 48 52 49  ase PragTyp_SHRI
12fc0 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20  NK_MEMORY: {.   
12fd0 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65   sqlite3_db_rele
12fe0 61 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a  ase_memory(db);.
12ff0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
13000 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
13010 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a  MA busy_timeout.
13020 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75    **   PRAGMA bu
13030 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20  sy_timeout = N. 
13040 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71   **.  ** Call sq
13050 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
13060 75 74 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75  ut(db, N).  Retu
13070 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  rn the current t
13080 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a  imeout value.  *
13090 2a 20 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e  * if one is set.
130a0 20 20 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e    If no busy han
130b0 64 6c 65 72 20 6f 72 20 61 20 64 69 66 66 65 72  dler or a differ
130c0 65 6e 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72  ent busy handler
130d0 20 69 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65   is set.  ** the
130e0 6e 20 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e  n 0 is returned.
130f0 20 20 53 65 74 74 69 6e 67 20 74 68 65 20 62 75    Setting the bu
13100 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20  sy_timeout to 0 
13110 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a  or negative.  **
13120 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 74 69   disables the ti
13130 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a  meout..  */.  /*
13140 63 61 73 65 20 50 72 61 67 54 79 70 5f 42 55 53  case PragTyp_BUS
13150 59 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61  Y_TIMEOUT*/ defa
13160 75 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73 65 72  ult: {.    asser
13170 74 28 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  t( aPragmaNames[
13180 6d 69 64 5d 2e 65 50 72 61 67 54 79 70 3d 3d 50  mid].ePragTyp==P
13190 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
131a0 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  OUT );.    if( z
131b0 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
131c0 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
131d0 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41  out(db, sqlite3A
131e0 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
131f0 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
13200 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
13210 22 74 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e  "timeout",  db->
13220 62 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20  busyTimeout);.  
13230 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
13240 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
13250 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74   soft_heap_limit
13260 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73  .  **   PRAGMA s
13270 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d  oft_heap_limit =
13280 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c   N.  **.  ** Cal
13290 6c 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68  l sqlite3_soft_h
132a0 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 2e 20  eap_limit64(N). 
132b0 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 73 75   Return the resu
132c0 6c 74 2e 20 20 49 66 20 4e 20 69 73 20 6f 6d 69  lt.  If N is omi
132d0 74 74 65 64 2c 0a 20 20 2a 2a 20 75 73 65 20 2d  tted,.  ** use -
132e0 31 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  1..  */.  case P
132f0 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50  ragTyp_SOFT_HEAP
13300 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71  _LIMIT: {.    sq
13310 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20  lite3_int64 N;. 
13320 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26     if( zRight &&
13330 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a   sqlite3Atoi64(z
13340 52 69 67 68 74 2c 20 26 4e 2c 20 31 30 30 30 30  Right, &N, 10000
13350 30 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  00, SQLITE_UTF8)
13360 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
13370 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66       sqlite3_sof
13380 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e  t_heap_limit64(N
13390 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
133a0 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
133b0 72 73 65 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f  rse, "soft_heap_
133c0 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69 74 65 33  limit",  sqlite3
133d0 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
133e0 36 34 28 2d 31 29 29 3b 0a 20 20 20 20 62 72 65  64(-1));.    bre
133f0 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66  ak;.  }..#if def
13400 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
13410 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
13420 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a  LITE_TEST).  /*.
13430 20 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20    ** Report the 
13440 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66  current state of
13450 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61   file logs for a
13460 6c 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a  ll databases.  *
13470 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
13480 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a  _LOCK_STATUS: {.
13490 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
134a0 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c   char *const azL
134b0 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20  ockName[] = {.  
134c0 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20      "unlocked", 
134d0 22 73 68 61 72 65 64 22 2c 20 22 72 65 73 65 72  "shared", "reser
134e0 76 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c  ved", "pending",
134f0 20 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20   "exclusive".   
13500 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   };.    int i;. 
13510 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
13520 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a  tNumCols(v, 2);.
13530 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
13540 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
13550 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
13560 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
13570 4d 45 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20  ME, "database", 
13580 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
13590 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
135a0 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
135b0 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
135c0 74 61 74 75 73 22 2c 20 53 51 4c 49 54 45 5f 53  tatus", SQLITE_S
135d0 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
135e0 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
135f0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65  i++){.      Btre
13600 65 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f  e *pBt;.      co
13610 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65  nst char *zState
13620 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20   = "unknown";.  
13630 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20      int j;.     
13640 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
13650 7a 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69  zName==0 ) conti
13660 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
13670 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
13680 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
13690 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  , 0, db->aDb[i].
136a0 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43  zName, P4_STATIC
136b0 29 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64  );.      pBt = d
136c0 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20  b->aDb[i].pBt;. 
136d0 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20       if( pBt==0 
136e0 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  || sqlite3BtreeP
136f0 61 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a  ager(pBt)==0 ){.
13700 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d          zState =
13710 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20   "closed";.     
13720 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
13730 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
13740 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b  db, i ? db->aDb[
13750 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20  i].zName : 0, . 
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 20 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c      SQLITE_FCNTL
13790 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d  _LOCKSTATE, &j)=
137a0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
137b0 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
137c0 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20  azLockName[j];. 
137d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
137e0 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
137f0 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
13800 20 32 2c 20 30 2c 20 7a 53 74 61 74 65 2c 20 50   2, 0, zState, P
13810 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
13820 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
13830 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
13840 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d  ow, 1, 2);.    }
13850 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
13860 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
13870 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
13880 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b    case PragTyp_K
13890 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
138a0 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b  ight ) sqlite3_k
138b0 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a  ey_v2(db, zDb, z
138c0 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74  Right, sqlite3St
138d0 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b  rlen30(zRight));
138e0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
138f0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 52    case PragTyp_R
13900 45 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20  EKEY: {.    if( 
13910 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33  zRight ) sqlite3
13920 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44  _rekey_v2(db, zD
13930 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74  b, zRight, sqlit
13940 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68  e3Strlen30(zRigh
13950 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  t));.    break;.
13960 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54    }.  case PragT
13970 79 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20  yp_HEXKEY: {.   
13980 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
13990 20 20 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20       u8 iByte;. 
139a0 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
139b0 20 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b    char zKey[40];
139c0 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20  .      for(i=0, 
139d0 69 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f  iByte=0; i<sizeo
139e0 66 28 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c  f(zKey)*2 && sql
139f0 69 74 65 33 49 73 78 64 69 67 69 74 28 7a 52 69  ite3Isxdigit(zRi
13a00 67 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20  ght[i]); i++){. 
13a10 20 20 20 20 20 20 20 69 42 79 74 65 20 3d 20 28         iByte = (
13a20 69 42 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69  iByte<<4) + sqli
13a30 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67  te3HexToInt(zRig
13a40 68 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  ht[i]);.        
13a50 69 66 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a  if( (i&1)!=0 ) z
13a60 4b 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65  Key[i/2] = iByte
13a70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
13a80 69 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20  if( (zLeft[3] & 
13a90 30 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20  0xf)==0xb ){.   
13aa0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79       sqlite3_key
13ab0 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65  _v2(db, zDb, zKe
13ac0 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d  y, i/2);.      }
13ad0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
13ae0 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64  lite3_rekey_v2(d
13af0 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f  b, zDb, zKey, i/
13b00 32 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  2);.      }.    
13b10 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
13b20 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
13b30 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43  ned(SQLITE_HAS_C
13b40 4f 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64  ODEC) || defined
13b50 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43  (SQLITE_ENABLE_C
13b60 45 52 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61  EROD).  case Pra
13b70 67 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58  gTyp_ACTIVATE_EX
13b80 54 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52  TENSIONS: if( zR
13b90 69 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53  ight ){.#ifdef S
13ba0 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
13bb0 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
13bc0 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  trNICmp(zRight, 
13bd0 22 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b  "see-", 4)==0 ){
13be0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61  .      sqlite3_a
13bf0 63 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69  ctivate_see(&zRi
13c00 67 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23  ght[4]);.    }.#
13c10 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
13c20 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44  ITE_ENABLE_CEROD
13c30 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
13c40 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c  StrNICmp(zRight,
13c50 20 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30   "cerod-", 6)==0
13c60 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
13c70 33 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64  3_activate_cerod
13c80 28 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20  (&zRight[6]);.  
13c90 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
13ca0 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a   break;.#endif..
13cb0 20 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68    } /* End of th
13cc0 65 20 50 52 41 47 4d 41 20 73 77 69 74 63 68 20  e PRAGMA switch 
13cd0 2a 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a  */..pragma_out:.
13ce0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
13cf0 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71  db, zLeft);.  sq
13d00 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
13d10 7a 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64  zRight);.}..#end
13d20 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
13d30 54 5f 50 52 41 47 4d 41 20 2a 2f 0a              T_PRAGMA */.