/ Hex Artifact Content
Login

Artifact c9a867f6f96934e91d3a07d72d1b8d61c9963008:


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 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20  p_SYNCHRONOUS   
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 54 41 42 4c 45 5f 49 4e 46 4f 20 20 20  yp_TABLE_INFO   
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 45 4d 50 5f 53 54 4f 52 45 20 20  Typ_TEMP_STORE  
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 5f  gTyp_TEMP_STORE_
0a00: 44 49 52 45 43 54 4f 52 59 20 20 20 20 20 20 20  DIRECTORY       
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 57 41 4c 5f 41 55 54 4f 43 48  agTyp_WAL_AUTOCH
0a30: 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20  ECKPOINT        
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 43 48 45 43 4b  ragTyp_WAL_CHECK
0a60: 50 4f 49 4e 54 20 20 20 20 20 20 20 20 20 20 20  POINT           
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 41 43 54 49 56 41 54 45  PragTyp_ACTIVATE
0a90: 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20 20 20 20  _EXTENSIONS     
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 48 45 58 4b 45 59 20   PragTyp_HEXKEY 
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 4b 45 59 20 20 20  e PragTyp_KEY   
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 52 45 4b 45 59  ne PragTyp_REKEY
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 4c 4f 43 4b  ine PragTyp_LOCK
0b50: 5f 53 54 41 54 55 53 20 20 20 20 20 20 20 20 20  _STATUS         
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 50 41 52  fine PragTyp_PAR
0b80: 53 45 52 5f 54 52 41 43 45 20 20 20 20 20 20 20  SER_TRACE       
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 46 6c 61 67 5f 4e  efine PragFlag_N
0bb0: 65 65 64 53 63 68 65 6d 61 20 20 20 20 20 20 20  eedSchema       
0bc0: 20 20 20 20 30 78 30 31 0a 73 74 61 74 69 63 20      0x01.static 
0bd0: 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50 72  const struct sPr
0be0: 61 67 6d 61 4e 61 6d 65 73 20 7b 0a 20 20 63 6f  agmaNames {.  co
0bf0: 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20  nst char *const 
0c00: 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  zName;  /* Name 
0c10: 6f 66 20 70 72 61 67 6d 61 20 2a 2f 0a 20 20 75  of pragma */.  u
0c20: 38 20 65 50 72 61 67 54 79 70 3b 20 20 20 20 20  8 ePragTyp;     
0c30: 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 61 67           /* Prag
0c40: 54 79 70 5f 58 58 58 20 76 61 6c 75 65 20 2a 2f  Typ_XXX value */
0c50: 0a 20 20 75 38 20 6d 50 72 61 67 46 6c 61 67 3b  .  u8 mPragFlag;
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0c70: 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 50 72 61  Zero or more Pra
0c80: 67 46 6c 61 67 5f 58 58 58 20 76 61 6c 75 65 73  gFlag_XXX values
0c90: 20 2a 2f 0a 20 20 75 33 32 20 69 41 72 67 3b 20   */.  u32 iArg; 
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cb0: 2f 2a 20 45 78 74 72 61 20 61 72 67 75 6d 65 6e  /* Extra argumen
0cc0: 74 20 2a 2f 0a 7d 20 61 50 72 61 67 6d 61 4e 61  t */.} aPragmaNa
0cd0: 6d 65 73 5b 5d 20 3d 20 7b 0a 23 69 66 20 64 65  mes[] = {.#if de
0ce0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
0cf0: 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69 6e  _CODEC) || defin
0d00: 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
0d10: 5f 43 45 52 4f 44 29 0a 20 20 7b 20 2f 2a 20 7a  _CEROD).  { /* z
0d20: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 61 63  Name:     */ "ac
0d30: 74 69 76 61 74 65 5f 65 78 74 65 6e 73 69 6f 6e  tivate_extension
0d40: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
0d50: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
0d60: 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53  _ACTIVATE_EXTENS
0d70: 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72  IONS,.    /* ePr
0d80: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
0d90: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
0da0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
0db0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
0dc0: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
0dd0: 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a  ERSION_PRAGMAS).
0de0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
0df0: 20 20 2a 2f 20 22 61 70 70 6c 69 63 61 74 69 6f    */ "applicatio
0e00: 6e 5f 69 64 22 2c 0a 20 20 20 20 2f 2a 20 65 50  n_id",.    /* eP
0e10: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
0e20: 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45  Typ_HEADER_VALUE
0e30: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
0e40: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
0e50: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
0e60: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
0e70: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0e80: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
0e90: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
0ea0: 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63 75 75    */ "auto_vacuu
0eb0: 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  m",.    /* ePrag
0ec0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
0ed0: 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a 20 20  _AUTO_VACUUM,.  
0ee0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
0ef0: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
0f00: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
0f10: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
0f20: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
0f30: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0f40: 54 5f 41 55 54 4f 4d 41 54 49 43 5f 49 4e 44 45  T_AUTOMATIC_INDE
0f50: 58 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  X).  { /* zName:
0f60: 20 20 20 20 20 2a 2f 20 22 61 75 74 6f 6d 61 74       */ "automat
0f70: 69 63 5f 69 6e 64 65 78 22 2c 0a 20 20 20 20 2f  ic_index",.    /
0f80: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
0f90: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
0fa0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
0fb0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
0fc0: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
0fd0: 45 5f 41 75 74 6f 49 6e 64 65 78 20 7d 2c 0a 23  E_AutoIndex },.#
0fe0: 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61  endif.  { /* zNa
0ff0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79  me:     */ "busy
1000: 5f 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f  _timeout",.    /
1010: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1020: 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d  PragTyp_BUSY_TIM
1030: 45 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  EOUT,.    /* ePr
1040: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1050: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1060: 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66  */ 0 },.#if !def
1070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1080: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a  _PAGER_PRAGMAS).
1090: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
10a0: 20 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65    */ "cache_size
10b0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
10c0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
10d0: 43 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20  CACHE_SIZE,.    
10e0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
10f0: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
1100: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
1110: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
1120: 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e  #endif.  { /* zN
1130: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 61 63  ame:     */ "cac
1140: 68 65 5f 73 70 69 6c 6c 22 2c 0a 20 20 20 20 2f  he_spill",.    /
1150: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1160: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
1170: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
1180: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
1190: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
11a0: 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 7d 2c 0a  E_CacheSpill },.
11b0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
11c0: 20 20 2a 2f 20 22 63 61 73 65 5f 73 65 6e 73 69    */ "case_sensi
11d0: 74 69 76 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20  tive_like",.    
11e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
11f0: 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45   PragTyp_CASE_SE
1200: 4e 53 49 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20  NSITIVE_LIKE,.  
1210: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
1220: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
1230: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
1240: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1250: 20 20 2a 2f 20 22 63 68 65 63 6b 70 6f 69 6e 74    */ "checkpoint
1260: 5f 66 75 6c 6c 66 73 79 6e 63 22 2c 0a 20 20 20  _fullfsync",.   
1270: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1280: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
1290: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
12a0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
12b0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
12c0: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
12d0: 63 20 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e 65  c },.#if !define
12e0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  d(SQLITE_OMIT_SC
12f0: 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20  HEMA_PRAGMAS).  
1300: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1310: 2a 2f 20 22 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69  */ "collation_li
1320: 73 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  st",.    /* ePra
1330: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1340: 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54  p_COLLATION_LIST
1350: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1360: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1370: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
1380: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
1390: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
13a0: 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f  MIT_COMPILEOPTIO
13b0: 4e 5f 44 49 41 47 53 29 0a 20 20 7b 20 2f 2a 20  N_DIAGS).  { /* 
13c0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
13d0: 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 2c  ompile_options",
13e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
13f0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f  :  */ PragTyp_CO
1400: 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 2c 0a 20  MPILE_OPTIONS,. 
1410: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1420: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
1430: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
1440: 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a  .#endif.  { /* z
1450: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 6f  Name:     */ "co
1460: 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a 20 20  unt_changes",.  
1470: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1480: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
1490: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
14a0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
14b0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
14c0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 7d  LITE_CountRows }
14d0: 2c 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ,.#if !defined(S
14e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
14f0: 5f 50 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c  _PRAGMAS) && SQL
1500: 49 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 7b 20 2f  ITE_OS_WIN.  { /
1510: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
1520: 22 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65  "data_store_dire
1530: 63 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65  ctory",.    /* e
1540: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1550: 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f  gTyp_DATA_STORE_
1560: 44 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f  DIRECTORY,.    /
1570: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1580: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1590: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
15a0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
15b0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48  (SQLITE_OMIT_SCH
15c0: 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  EMA_PRAGMAS).  {
15d0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
15e0: 2f 20 22 64 61 74 61 62 61 73 65 5f 6c 69 73 74  / "database_list
15f0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1600: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
1610: 44 41 54 41 42 41 53 45 5f 4c 49 53 54 2c 0a 20  DATABASE_LIST,. 
1620: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1630: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
1640: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
1650: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
1660: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
1670: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1680: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
1690: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
16a0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
16b0: 41 54 45 44 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  ATED).  { /* zNa
16c0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 61  me:     */ "defa
16d0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 22 2c  ult_cache_size",
16e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
16f0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44 45  :  */ PragTyp_DE
1700: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
1710: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1720: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
1730: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
1740: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1750: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1760: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1770: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
1780: 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
1790: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
17a0: 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  ER).  { /* zName
17b0: 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65 72 5f  :     */ "defer_
17c0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20  foreign_keys",. 
17d0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
17e0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
17f0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1800: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1810: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1820: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 7d  QLITE_DeferFKs }
1830: 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20  ,.#endif.  { /* 
1840: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65  zName:     */ "e
1850: 6d 70 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c  mpty_result_call
1860: 62 61 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65  backs",.    /* e
1870: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1880: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
1890: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
18a0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
18b0: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e       */ SQLITE_N
18c0: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23  ullCallback },.#
18d0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
18e0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a 20  TE_OMIT_UTF16). 
18f0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1900: 20 2a 2f 20 22 65 6e 63 6f 64 69 6e 67 22 2c 0a   */ "encoding",.
1910: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1920: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 45 4e 43    */ PragTyp_ENC
1930: 4f 44 49 4e 47 2c 0a 20 20 20 20 2f 2a 20 65 50  ODING,.    /* eP
1940: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
1950: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1960: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
1970: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1980: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
1990: 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
19a0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
19b0: 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e  IGGER).  { /* zN
19c0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72  ame:     */ "for
19d0: 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 22 2c  eign_key_check",
19e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
19f0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f  :  */ PragTyp_FO
1a00: 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 2c  REIGN_KEY_CHECK,
1a10: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1a20: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
1a30: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
1a40: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1a50: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
1a60: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1a70: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
1a80: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1a90: 20 20 20 20 2a 2f 20 22 66 6f 72 65 69 67 6e 5f      */ "foreign_
1aa0: 6b 65 79 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f  key_list",.    /
1ab0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1ac0: 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f  PragTyp_FOREIGN_
1ad0: 4b 45 59 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a  KEY_LIST,.    /*
1ae0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
1af0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
1b00: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
1b10: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
1b20: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1b30: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
1b40: 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
1b50: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1b60: 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 7b 20  IT_TRIGGER).  { 
1b70: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1b80: 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c   "foreign_keys",
1b90: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1ba0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1bb0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1bc0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1bd0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1be0: 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b   SQLITE_ForeignK
1bf0: 65 79 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  eys },.#endif.#i
1c00: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1c10: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45  E_OMIT_SCHEMA_VE
1c20: 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20  RSION_PRAGMAS). 
1c30: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1c40: 20 2a 2f 20 22 66 72 65 65 6c 69 73 74 5f 63 6f   */ "freelist_co
1c50: 75 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  unt",.    /* ePr
1c60: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1c70: 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c  yp_HEADER_VALUE,
1c80: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1c90: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
1ca0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
1cb0: 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a  },.#endif.  { /*
1cc0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1cd0: 66 75 6c 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  full_column_name
1ce0: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
1cf0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1d00: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
1d10: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
1d20: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1d30: 20 2a 2f 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43   */ SQLITE_FullC
1d40: 6f 6c 4e 61 6d 65 73 20 7d 2c 0a 20 20 7b 20 2f  olNames },.  { /
1d50: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
1d60: 22 66 75 6c 6c 66 73 79 6e 63 22 2c 0a 20 20 20  "fullfsync",.   
1d70: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1d80: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
1d90: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1da0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
1db0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
1dc0: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20 7d 2c  ITE_FullFSync },
1dd0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
1de0: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 20  ITE_HAS_CODEC). 
1df0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1e00: 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a 20 20   */ "hexkey",.  
1e10: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1e20: 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45  */ PragTyp_HEXKE
1e30: 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  Y,.    /* ePragF
1e40: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1e50: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1e60: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
1e70: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1e80: 4f 4d 49 54 5f 43 48 45 43 4b 29 0a 20 20 7b 20  OMIT_CHECK).  { 
1e90: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1ea0: 20 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f 63   "ignore_check_c
1eb0: 6f 6e 73 74 72 61 69 6e 74 73 22 2c 0a 20 20 20  onstraints",.   
1ec0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1ed0: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
1ee0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1ef0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
1f00: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
1f10: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
1f20: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
1f30: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1f40: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
1f50: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1f60: 20 20 2a 2f 20 22 69 6e 63 72 65 6d 65 6e 74 61    */ "incrementa
1f70: 6c 5f 76 61 63 75 75 6d 22 2c 0a 20 20 20 20 2f  l_vacuum",.    /
1f80: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1f90: 50 72 61 67 54 79 70 5f 49 4e 43 52 45 4d 45 4e  PragTyp_INCREMEN
1fa0: 54 41 4c 5f 56 41 43 55 55 4d 2c 0a 20 20 20 20  TAL_VACUUM,.    
1fb0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1fc0: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
1fd0: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
1fe0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
1ff0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
2000: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2010: 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a  SCHEMA_PRAGMAS).
2020: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
2030: 20 20 2a 2f 20 22 69 6e 64 65 78 5f 69 6e 66 6f    */ "index_info
2040: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2050: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2060: 49 4e 44 45 58 5f 49 4e 46 4f 2c 0a 20 20 20 20  INDEX_INFO,.    
2070: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2080: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
2090: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
20a0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
20b0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
20c0: 20 20 2a 2f 20 22 69 6e 64 65 78 5f 6c 69 73 74    */ "index_list
20d0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
20e0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
20f0: 49 4e 44 45 58 5f 4c 49 53 54 2c 0a 20 20 20 20  INDEX_LIST,.    
2100: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2110: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
2120: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
2130: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
2140: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
2150: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2160: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 29  INTEGRITY_CHECK)
2170: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2180: 20 20 20 2a 2f 20 22 69 6e 74 65 67 72 69 74 79     */ "integrity
2190: 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20  _check",.    /* 
21a0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
21b0: 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f  agTyp_INTEGRITY_
21c0: 43 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50  CHECK,.    /* eP
21d0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67  ragFlag: */ Prag
21e0: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c  Flag_NeedSchema,
21f0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2200: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
2210: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2220: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
2230: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
2240: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2250: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 0a 20  journal_mode",. 
2260: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2270: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f 55 52   */ PragTyp_JOUR
2280: 4e 41 4c 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a  NAL_MODE,.    /*
2290: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
22a0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
22b0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
22c0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20        */ 0 },.  
22d0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
22e0: 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  */ "journal_size
22f0: 5f 6c 69 6d 69 74 22 2c 0a 20 20 20 20 2f 2a 20  _limit",.    /* 
2300: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2310: 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49  agTyp_JOURNAL_SI
2320: 5a 45 5f 4c 49 4d 49 54 2c 0a 20 20 20 20 2f 2a  ZE_LIMIT,.    /*
2330: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
2340: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
2350: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
2360: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2370: 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29  QLITE_HAS_CODEC)
2380: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2390: 20 20 20 2a 2f 20 22 6b 65 79 22 2c 0a 20 20 20     */ "key",.   
23a0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
23b0: 2f 20 50 72 61 67 54 79 70 5f 4b 45 59 2c 0a 20  / PragTyp_KEY,. 
23c0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
23d0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
23e0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
23f0: 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a  .#endif.  { /* z
2400: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 65  Name:     */ "le
2410: 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74  gacy_file_format
2420: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2430: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2440: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
2450: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2460: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2470: 2a 2f 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  */ SQLITE_Legacy
2480: 46 69 6c 65 46 6d 74 20 7d 2c 0a 23 69 66 20 21  FileFmt },.#if !
2490: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
24a0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
24b0: 53 29 20 26 26 20 53 51 4c 49 54 45 5f 45 4e 41  S) && SQLITE_ENA
24c0: 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c  BLE_LOCKING_STYL
24d0: 45 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  E.  { /* zName: 
24e0: 20 20 20 20 2a 2f 20 22 6c 6f 63 6b 5f 70 72 6f      */ "lock_pro
24f0: 78 79 5f 66 69 6c 65 22 2c 0a 20 20 20 20 2f 2a  xy_file",.    /*
2500: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2510: 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58  ragTyp_LOCK_PROX
2520: 59 5f 46 49 4c 45 2c 0a 20 20 20 20 2f 2a 20 65  Y_FILE,.    /* e
2530: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
2540: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2550: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
2560: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2570: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
2580: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
2590: 54 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  T).  { /* zName:
25a0: 20 20 20 20 20 2a 2f 20 22 6c 6f 63 6b 5f 73 74       */ "lock_st
25b0: 61 74 75 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50  atus",.    /* eP
25c0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
25d0: 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 2c  Typ_LOCK_STATUS,
25e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
25f0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2600: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2610: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
2620: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2630: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
2640: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2650: 20 20 20 20 2a 2f 20 22 6c 6f 63 6b 69 6e 67 5f      */ "locking_
2660: 6d 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  mode",.    /* eP
2670: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2680: 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45  Typ_LOCKING_MODE
2690: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
26a0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
26b0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
26c0: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
26d0: 3a 20 20 20 20 20 2a 2f 20 22 6d 61 78 5f 70 61  :     */ "max_pa
26e0: 67 65 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f  ge_count",.    /
26f0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2700: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f 55  PragTyp_PAGE_COU
2710: 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  NT,.    /* ePrag
2720: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
2730: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
2740: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2750: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
2760: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6d 6d  Name:     */ "mm
2770: 61 70 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f 2a  ap_size",.    /*
2780: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2790: 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53 49 5a 45  ragTyp_MMAP_SIZE
27a0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
27b0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
27c0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
27d0: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
27e0: 3a 20 20 20 20 20 2a 2f 20 22 70 61 67 65 5f 63  :     */ "page_c
27f0: 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ount",.    /* eP
2800: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2810: 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e 54 2c 0a  Typ_PAGE_COUNT,.
2820: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2830: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
2840: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
2850: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
2860: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
2870: 3a 20 20 20 20 20 2a 2f 20 22 70 61 67 65 5f 73  :     */ "page_s
2880: 69 7a 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ize",.    /* ePr
2890: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
28a0: 79 70 5f 50 41 47 45 5f 53 49 5a 45 2c 0a 20 20  yp_PAGE_SIZE,.  
28b0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
28c0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
28d0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
28e0: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
28f0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2900: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2910: 20 20 20 2a 2f 20 22 70 61 72 73 65 72 5f 74 72     */ "parser_tr
2920: 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ace",.    /* ePr
2930: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
2940: 79 70 5f 50 41 52 53 45 52 5f 54 52 41 43 45 2c  yp_PARSER_TRACE,
2950: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2960: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2970: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2980: 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a  },.#endif.  { /*
2990: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
29a0: 71 75 65 72 79 5f 6f 6e 6c 79 22 2c 0a 20 20 20  query_only",.   
29b0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
29c0: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
29d0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
29e0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
29f0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
2a00: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 7d 2c  ITE_QueryOnly },
2a10: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2a20: 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
2a30: 49 54 59 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f  ITY_CHECK).  { /
2a40: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2a50: 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 2c 0a 20  "quick_check",. 
2a60: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2a70: 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54 45   */ PragTyp_INTE
2a80: 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20 20  GRITY_CHECK,.   
2a90: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2aa0: 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53  / PragFlag_NeedS
2ab0: 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41  chema,.    /* iA
2ac0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
2ad0: 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a  .#endif.  { /* z
2ae0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 72 65  Name:     */ "re
2af0: 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 22 2c  ad_uncommitted",
2b00: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2b10: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
2b20: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
2b30: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2b40: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2b50: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
2b60: 6d 6d 69 74 74 65 64 20 7d 2c 0a 20 20 7b 20 2f  mmitted },.  { /
2b70: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2b80: 22 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67  "recursive_trigg
2b90: 65 72 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ers",.    /* ePr
2ba0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
2bb0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
2bc0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
2bd0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2be0: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 52 65 63     */ SQLITE_Rec
2bf0: 54 72 69 67 67 65 72 73 20 7d 2c 0a 23 69 66 20  Triggers },.#if 
2c00: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
2c10: 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a  AS_CODEC).  { /*
2c20: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2c30: 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65  rekey",.    /* e
2c40: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2c50: 67 54 79 70 5f 52 45 4b 45 59 2c 0a 20 20 20 20  gTyp_REKEY,.    
2c60: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2c70: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2c80: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
2c90: 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ndif.  { /* zNam
2ca0: 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 76 65 72  e:     */ "rever
2cb0: 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65 6c  se_unordered_sel
2cc0: 65 63 74 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ects",.    /* eP
2cd0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2ce0: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
2cf0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
2d00: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
2d10: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 52 65      */ SQLITE_Re
2d20: 76 65 72 73 65 4f 72 64 65 72 20 7d 2c 0a 23 69  verseOrder },.#i
2d30: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2d40: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45  E_OMIT_SCHEMA_VE
2d50: 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20  RSION_PRAGMAS). 
2d60: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
2d70: 20 2a 2f 20 22 73 63 68 65 6d 61 5f 76 65 72 73   */ "schema_vers
2d80: 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ion",.    /* ePr
2d90: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
2da0: 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c  yp_HEADER_VALUE,
2db0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2dc0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2dd0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2de0: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
2df0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2e00: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
2e10: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2e20: 20 20 20 20 2a 2f 20 22 73 65 63 75 72 65 5f 64      */ "secure_d
2e30: 65 6c 65 74 65 22 2c 0a 20 20 20 20 2f 2a 20 65  elete",.    /* e
2e40: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2e50: 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45  gTyp_SECURE_DELE
2e60: 54 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  TE,.    /* ePrag
2e70: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2e80: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2e90: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b   0 },.#endif.  {
2ea0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2eb0: 2f 20 22 73 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f  / "short_column_
2ec0: 6e 61 6d 65 73 22 2c 0a 20 20 20 20 2f 2a 20 65  names",.    /* e
2ed0: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2ee0: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
2ef0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
2f00: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
2f10: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 53       */ SQLITE_S
2f20: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 7d 2c 0a  hortColNames },.
2f30: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
2f40: 20 20 2a 2f 20 22 73 68 72 69 6e 6b 5f 6d 65 6d    */ "shrink_mem
2f50: 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ory",.    /* ePr
2f60: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
2f70: 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59  yp_SHRINK_MEMORY
2f80: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2f90: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
2fa0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
2fb0: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
2fc0: 3a 20 20 20 20 20 2a 2f 20 22 73 6f 66 74 5f 68  :     */ "soft_h
2fd0: 65 61 70 5f 6c 69 6d 69 74 22 2c 0a 20 20 20 20  eap_limit",.    
2fe0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2ff0: 20 50 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45   PragTyp_SOFT_HE
3000: 41 50 5f 4c 49 4d 49 54 2c 0a 20 20 20 20 2f 2a  AP_LIMIT,.    /*
3010: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3020: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3030: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20      */ 0 },.#if 
3040: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
3050: 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  EBUG).  { /* zNa
3060: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 71 6c 5f  me:     */ "sql_
3070: 74 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65  trace",.    /* e
3080: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3090: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
30a0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
30b0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
30c0: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 53       */ SQLITE_S
30d0: 71 6c 54 72 61 63 65 20 7d 2c 0a 23 65 6e 64 69  qlTrace },.#endi
30e0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
30f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
3100: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
3110: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3120: 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a 20 20  synchronous",.  
3130: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3140: 2a 2f 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48  */ PragTyp_SYNCH
3150: 52 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a 20 65  RONOUS,.    /* e
3160: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
3170: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
3180: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3190: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
31a0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
31b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
31c0: 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  MA_PRAGMAS).  { 
31d0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
31e0: 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c 0a 20   "table_info",. 
31f0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3200: 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 41 42 4c   */ PragTyp_TABL
3210: 45 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20 65  E_INFO,.    /* e
3220: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
3230: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
3240: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3250: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
3260: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
3270: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3280: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  R_PRAGMAS).  { /
3290: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
32a0: 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a 20 20  "temp_store",.  
32b0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
32c0: 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  */ PragTyp_TEMP_
32d0: 53 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20 65 50  STORE,.    /* eP
32e0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
32f0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3300: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
3310: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 74  zName:     */ "t
3320: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
3330: 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ory",.    /* ePr
3340: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3350: 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49  yp_TEMP_STORE_DI
3360: 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f 2a 20  RECTORY,.    /* 
3370: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3380: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3390: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
33a0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
33b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
33c0: 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
33d0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
33e0: 20 20 20 20 20 2a 2f 20 22 75 73 65 72 5f 76 65       */ "user_ve
33f0: 72 73 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65  rsion",.    /* e
3400: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3410: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
3420: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
3430: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3440: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3450: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
3460: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
3470: 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  EBUG).  { /* zNa
3480: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65  me:     */ "vdbe
3490: 5f 61 64 64 6f 70 74 72 61 63 65 22 2c 0a 20 20  _addoptrace",.  
34a0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
34b0: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
34c0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
34d0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
34e0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
34f0: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
3500: 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  ace },.  { /* zN
3510: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62  ame:     */ "vdb
3520: 65 5f 64 65 62 75 67 22 2c 0a 20 20 20 20 2f 2a  e_debug",.    /*
3530: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3540: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3550: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3560: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3570: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3580: 5f 53 71 6c 54 72 61 63 65 7c 53 51 4c 49 54 45  _SqlTrace|SQLITE
3590: 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c  _VdbeListing|SQL
35a0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 7d 2c  ITE_VdbeTrace },
35b0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
35c0: 20 20 20 2a 2f 20 22 76 64 62 65 5f 6c 69 73 74     */ "vdbe_list
35d0: 69 6e 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ing",.    /* ePr
35e0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
35f0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3600: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3610: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3620: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62     */ SQLITE_Vdb
3630: 65 4c 69 73 74 69 6e 67 20 7d 2c 0a 20 20 7b 20  eListing },.  { 
3640: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3650: 20 22 76 64 62 65 5f 74 72 61 63 65 22 2c 0a 20   "vdbe_trace",. 
3660: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3670: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
3680: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3690: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
36a0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
36b0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
36c0: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
36d0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
36e0: 49 54 5f 57 41 4c 29 0a 20 20 7b 20 2f 2a 20 7a  IT_WAL).  { /* z
36f0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61  Name:     */ "wa
3700: 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
3710: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3720: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3730: 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49  WAL_AUTOCHECKPOI
3740: 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  NT,.    /* ePrag
3750: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3760: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3770: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
3780: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61 6c 5f  me:     */ "wal_
3790: 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20 20 20  checkpoint",.   
37a0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
37b0: 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48  / PragTyp_WAL_CH
37c0: 45 43 4b 50 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a  ECKPOINT,.    /*
37d0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
37e0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
37f0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
3800: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
3810: 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ndif.  { /* zNam
3820: 65 3a 20 20 20 20 20 2a 2f 20 22 77 72 69 74 61  e:     */ "writa
3830: 62 6c 65 5f 73 63 68 65 6d 61 22 2c 0a 20 20 20  ble_schema",.   
3840: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3850: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
3860: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3870: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3880: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
3890: 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61 7c  ITE_WriteSchema|
38a0: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
38b0: 6f 64 65 20 7d 2c 0a 7d 3b 0a 2f 2a 20 4e 75 6d  ode },.};./* Num
38c0: 62 65 72 20 6f 66 20 70 72 61 67 6d 61 73 3a 20  ber of pragmas: 
38d0: 35 35 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  55 on by default
38e0: 2c 20 36 36 20 74 6f 74 61 6c 2e 20 2a 2f 0a 2f  , 66 total. */./
38f0: 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 61 75 74  * End of the aut
3900: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
3910: 61 74 65 64 20 70 72 61 67 6d 61 20 74 61 62 6c  ated pragma tabl
3920: 65 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..*************
3930: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3940: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3950: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
3970: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
3980: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
3990: 67 20 61 73 20 61 20 73 61 66 65 74 79 20 6c 65  g as a safety le
39a0: 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30 20 66  vel.  Return 0 f
39b0: 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72  or OFF,.** 1 for
39c0: 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e   ON or NORMAL an
39d0: 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52  d 2 for FULL.  R
39e0: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
39f0: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
3a00: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
3a10: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46  argument.  The F
3a20: 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20 64 69  ULL option is di
3a30: 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74  sallowed.** if t
3a40: 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61  he omitFull para
3a50: 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a  meter it 1..**.*
3a60: 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  * Note that the 
3a70: 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20  values returned 
3a80: 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74 68 61  are one less tha
3a90: 74 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61  t the values tha
3aa0: 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 70  t.** should be p
3ab0: 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c 69 74  assed into sqlit
3ac0: 65 33 42 74 72 65 65 53 65 74 53 61 66 65 74 79  e3BtreeSetSafety
3ad0: 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20 69 73  Level().  The is
3ae0: 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70   done.** to supp
3af0: 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c 20 63  ort legacy SQL c
3b00: 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65 74 79  ode.  The safety
3b10: 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f 20 62   level used to b
3b20: 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64  e boolean.** and
3b30: 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73 20 6d   older scripts m
3b40: 61 79 20 68 61 76 65 20 75 73 65 64 20 6e 75 6d  ay have used num
3b50: 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46 20 61  bers 0 for OFF a
3b60: 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a  nd 1 for ON..*/.
3b70: 73 74 61 74 69 63 20 75 38 20 67 65 74 53 61 66  static u8 getSaf
3b80: 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63  etyLevel(const c
3b90: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74  har *z, int omit
3ba0: 46 75 6c 6c 2c 20 69 6e 74 20 64 66 6c 74 29 7b  Full, int dflt){
3bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
3bd0: 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35   123456789 12345
3be0: 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69 63  6789 */.  static
3bf0: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65 78   const char zTex
3c00: 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65  t[] = "onoffalse
3c10: 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20  yestruefull";.  
3c20: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20  static const u8 
3c30: 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20  iOffset[] = {0, 
3c40: 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20  1, 2, 4, 9, 12, 
3c50: 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  16};.  static co
3c60: 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d  nst u8 iLength[]
3c70: 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20   = {2, 2, 3, 5, 
3c80: 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74  3, 4, 4};.  stat
3c90: 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61 6c  ic const u8 iVal
3ca0: 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30  ue[] =  {1, 0, 0
3cb0: 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20  , 0, 1, 1, 2};. 
3cc0: 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28   int i, n;.  if(
3cd0: 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
3ce0: 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  *z) ){.    retur
3cf0: 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f  n (u8)sqlite3Ato
3d00: 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20  i(z);.  }.  n = 
3d10: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
3d20: 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  z);.  for(i=0; i
3d30: 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67  <ArraySize(iLeng
3d40: 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b  th)-omitFull; i+
3d50: 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65 6e  +){.    if( iLen
3d60: 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c  gth[i]==n && sql
3d70: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a 54  ite3StrNICmp(&zT
3d80: 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c  ext[iOffset[i]],
3d90: 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  z,n)==0 ){.     
3da0: 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69   return iValue[i
3db0: 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  ];.    }.  }.  r
3dc0: 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f  eturn dflt;.}../
3dd0: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
3de0: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
3df0: 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
3e00: 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65  ue..*/.u8 sqlite
3e10: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
3e20: 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64  t char *z, int d
3e30: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
3e40: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
3e50: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
3e60: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
3e70: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
3e80: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
3e90: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
3ea0: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
3eb0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
3ec0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
3ed0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
3ee0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
3ef0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
3f00: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
3f10: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
3f20: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
3f30: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
3f40: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
3f50: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
3f60: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
3f70: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
3f80: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
3f90: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
3fa0: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
3fb0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
3fc0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
3fd0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
3fe0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
3ff0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
4000: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
4010: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
4020: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
4030: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
4040: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
4050: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
4060: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
4070: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
4080: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
4090: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
40a0: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
40b0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
40c0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
40d0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
40e0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
40f0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
4100: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
4110: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
4120: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
4130: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
4140: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
4150: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
4160: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
4170: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
4180: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
4190: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
41a0: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
41b0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
41c0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
41d0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
41e0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
41f0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
4200: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
4210: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
4220: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
4230: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
4240: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
4250: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
4260: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
4270: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
4280: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
4290: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
42a0: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
42b0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
42c0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
42d0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
42e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
42f0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
4300: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
4310: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
4320: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
4330: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
4340: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
4350: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
4360: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
4370: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
4380: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
4390: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
43a0: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
43b0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
43c0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
43d0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
43e0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
43f0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
4400: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
4410: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
4420: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
4430: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
4440: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
4450: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
4460: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
4470: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
4480: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
4490: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
44a0: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
44b0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
44c0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
44d0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
44e0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
44f0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
4500: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
4510: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
4520: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
4530: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
4540: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
4550: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
4560: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
4570: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
4580: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
4590: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
45a0: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
45b0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
45c0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
45d0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
45e0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
45f0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
4600: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
4610: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
4620: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
4630: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
4640: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
4650: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
4660: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
4670: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
4680: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
4690: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
46a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
46b0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
46c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
46d0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
46e0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
46f0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
4700: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
4710: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
4720: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
4730: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4740: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
4750: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
4760: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
4770: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
4780: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
4790: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
47a0: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
47b0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
47c0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
47d0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
47e0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
47f0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
4800: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
4810: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
4820: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
4830: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
4840: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
4850: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
4860: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
4870: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
4880: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
4890: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
48a0: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
48b0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
48c0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
48d0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
48e0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
48f0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
4900: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
4910: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
4920: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
4930: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
4940: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
4950: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
4960: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
4970: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
4980: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
4990: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
49a0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72   */../*.** Gener
49b0: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75  ate code to retu
49c0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  rn a single inte
49d0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ger value..*/.st
49e0: 61 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e  atic void return
49f0: 53 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20  SingleInt(Parse 
4a00: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
4a10: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34  har *zLabel, i64
4a20: 20 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20   value){.  Vdbe 
4a30: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
4a40: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69  dbe(pParse);.  i
4a50: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
4a60: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a  e->nMem;.  i64 *
4a70: 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62  pI64 = sqlite3Db
4a80: 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65  MallocRaw(pParse
4a90: 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c  ->db, sizeof(val
4aa0: 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34  ue));.  if( pI64
4ab0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
4ac0: 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a  I64, &value, siz
4ad0: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d  eof(value));.  }
4ae0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  .  sqlite3VdbeAd
4af0: 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34  dOp4(v, OP_Int64
4b00: 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68  , 0, mem, 0, (ch
4b10: 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54  ar*)pI64, P4_INT
4b20: 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  64);.  sqlite3Vd
4b30: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
4b40: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
4b50: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
4b60: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
4b70: 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53  zLabel, SQLITE_S
4b80: 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65  TATIC);.  sqlite
4b90: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
4ba0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d  P_ResultRow, mem
4bb0: 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , 1);.}.../*.** 
4bc0: 53 65 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c  Set the safety_l
4bd0: 65 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66  evel and pager f
4be0: 6c 61 67 73 20 66 6f 72 20 70 61 67 65 72 20 69  lags for pager i
4bf0: 44 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30  Db.  Or if iDb<0
4c00: 0a 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76 61  .** set these va
4c10: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67  lues for all pag
4c20: 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ers..*/.#ifndef 
4c30: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
4c40: 52 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63  R_PRAGMAS.static
4c50: 20 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65   void setAllPage
4c60: 72 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a  rFlags(sqlite3 *
4c70: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61  db){.  if( db->a
4c80: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
4c90: 20 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61   Db *pDb = db->a
4ca0: 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20  Db;.    int n = 
4cb0: 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73  db->nDb;.    ass
4cc0: 65 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c  ert( SQLITE_Full
4cd0: 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c  FSync==PAGER_FUL
4ce0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
4cf0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70  sert( SQLITE_Ckp
4d00: 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45  tFullFSync==PAGE
4d10: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
4d20: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
4d30: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
4d40: 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50  l==PAGER_CACHESP
4d50: 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ILL );.    asser
4d60: 74 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53  t( (PAGER_FULLFS
4d70: 59 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54  YNC | PAGER_CKPT
4d80: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
4d90: 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20  ER_CACHESPILL). 
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20              ==  
4db0: 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b  PAGER_FLAGS_MASK
4dc0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
4dd0: 28 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  (pDb->safety_lev
4de0: 65 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48  el & PAGER_SYNCH
4df0: 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44  RONOUS_MASK)==pD
4e00: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
4e10: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 6e  );.    while( (n
4e20: 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20 20  --) > 0 ){.     
4e30: 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b   if( pDb->pBt ){
4e40: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
4e50: 42 74 72 65 65 53 65 74 50 61 67 65 72 46 6c 61  BtreeSetPagerFla
4e60: 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20  gs(pDb->pBt,.   
4e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
4e80: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
4e90: 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50  | (db->flags & P
4ea0: 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29  AGER_FLAGS_MASK)
4eb0: 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   );.      }.    
4ec0: 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20    pDb++;.    }. 
4ed0: 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66   }.}.#else.# def
4ee0: 69 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46  ine setAllPagerF
4ef0: 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f  lags(X)  /* no-o
4f00: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  p */.#endif.../*
4f10: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d  .** Return a hum
4f20: 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65  an-readable name
4f30: 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e   for a constrain
4f40: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74  t resolution act
4f50: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ion..*/.#ifndef 
4f60: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
4f70: 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63  IGN_KEY.static c
4f80: 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f  onst char *actio
4f90: 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29  nName(u8 action)
4fa0: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
4fb0: 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28  zName;.  switch(
4fc0: 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63   action ){.    c
4fd0: 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20  ase OE_SetNull: 
4fe0: 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55   zName = "SET NU
4ff0: 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  LL";        brea
5000: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53  k;.    case OE_S
5010: 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d  etDflt:  zName =
5020: 20 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20   "SET DEFAULT"; 
5030: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
5040: 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20  ase OE_Cascade: 
5050: 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44   zName = "CASCAD
5060: 45 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61  E";         brea
5070: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52  k;.    case OE_R
5080: 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d  estrict: zName =
5090: 20 22 52 45 53 54 52 49 43 54 22 3b 20 20 20 20   "RESTRICT";    
50a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
50b0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
50c0: 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54   zName = "NO ACT
50d0: 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20  ION";  .        
50e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
50f0: 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45  sert( action==OE
5100: 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a  _None ); break;.
5110: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61    }.  return zNa
5120: 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  me;.}.#endif.../
5130: 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65  *.** Parameter e
5140: 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65  Mode must be one
5150: 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f   of the PAGER_JO
5160: 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f  URNALMODE_XXX co
5170: 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e  nstants.** defin
5180: 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54  ed in pager.h. T
5190: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  his function ret
51a0: 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61  urns the associa
51b0: 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a  ted lowercase.**
51c0: 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61   journal-mode na
51d0: 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  me..*/.const cha
51e0: 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
51f0: 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d  lModename(int eM
5200: 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63  ode){.  static c
5210: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f  har * const azMo
5220: 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  deName[] = {.   
5230: 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73   "delete", "pers
5240: 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72  ist", "off", "tr
5250: 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79  uncate", "memory
5260: 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ".#ifndef SQLITE
5270: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c  _OMIT_WAL.     ,
5280: 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20   "wal".#endif.  
5290: 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  };.  assert( PAG
52a0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
52b0: 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73  ELETE==0 );.  as
52c0: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
52d0: 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d  NALMODE_PERSIST=
52e0: 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
52f0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
5300: 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73  E_OFF==2 );.  as
5310: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
5320: 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
5330: 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==3 );.  assert(
5340: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
5350: 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a  DE_MEMORY==4 );.
5360: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
5370: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d  JOURNALMODE_WAL=
5380: 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =5 );.  assert( 
5390: 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64  eMode>=0 && eMod
53a0: 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d  e<=ArraySize(azM
53b0: 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69  odeName) );..  i
53c0: 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53  f( eMode==ArrayS
53d0: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
53e0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65  ) return 0;.  re
53f0: 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b  turn azModeName[
5400: 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  eMode];.}../*.**
5410: 20 50 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d   Process a pragm
5420: 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a  a statement.  .*
5430: 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65  *.** Pragmas are
5440: 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a   of this form:.*
5450: 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41  *.**      PRAGMA
5460: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b   [database.]id [
5470: 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54  = value].**.** T
5480: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69  he identifier mi
5490: 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74  ght also be a st
54a0: 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65  ring.  The value
54b0: 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e   is a string, an
54c0: 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c  d.** identifier,
54d0: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49   or a number.  I
54e0: 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74  f minusFlag is t
54f0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  rue, then the va
5500: 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62  lue is.** a numb
5510: 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63  er that was prec
5520: 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20  eded by a minus 
5530: 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sign..**.** If t
5540: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
5550: 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68  "database.id" th
5560: 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64  en pId1 is the d
5570: 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20  atabase name.** 
5580: 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20  and pId2 is the 
5590: 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74  id.  If the left
55a0: 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69   side is just "i
55b0: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
55c0: 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49  the.** id and pI
55d0: 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20  d2 is any empty 
55e0: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20  string..*/.void 
55f0: 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20  sqlite3Pragma(. 
5600: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
5610: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20  .  Token *pId1, 
5620: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
5630: 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73  part of [databas
5640: 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20  e.]id field */. 
5650: 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20   Token *pId2,   
5660: 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70       /* Second p
5670: 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65  art of [database
5680: 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e  .]id field, or N
5690: 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ULL */.  Token *
56a0: 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20  pValue,      /* 
56b0: 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65  Token for <value
56c0: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
56d0: 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20  int minusFlag   
56e0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
56f0: 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64   '-' sign preced
5700: 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b  ed <value> */.){
5710: 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d  .  char *zLeft =
5720: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c   0;       /* Nul
5730: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
5740: 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f  8 string <id> */
5750: 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20  .  char *zRight 
5760: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c  = 0;      /* Nul
5770: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
5780: 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e  8 string <value>
5790: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  , or NULL */.  c
57a0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
57b0: 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74   0;   /* The dat
57c0: 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  abase name */.  
57d0: 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20  Token *pId;     
57e0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
57f0: 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20  r to <id> token 
5800: 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74  */.  char *aFcnt
5810: 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41  l[4];       /* A
5820: 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54  rgument to SQLIT
5830: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
5840: 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
5850: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
5860: 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72  tabase index for
5870: 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20   <database> */. 
5880: 20 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d   int lwr, upr, m
5890: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  id;           /*
58a0: 20 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62   Binary search b
58b0: 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72  ounds */.  int r
58c0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
58d0: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
58e0: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
58f0: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
5900: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
5910: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
5920: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
5930: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
5940: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
5950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5960: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
5970: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
5980: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
5990: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
59a0: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
59b0: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
59c0: 65 6d 65 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20  ement */..  if( 
59d0: 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20  v==0 ) return;. 
59e0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 75 6e 4f   sqlite3VdbeRunO
59f0: 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50  nlyOnce(v);.  pP
5a00: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
5a10: 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72 65 74 20  .  /* Interpret 
5a20: 74 68 65 20 5b 64 61 74 61 62 61 73 65 2e 5d 20  the [database.] 
5a30: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
5a40: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44  ma statement. iD
5a50: 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e  b is the.  ** in
5a60: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
5a70: 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61 20  ase this pragma 
5a80: 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64  is being applied
5a90: 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e   to in db.aDb[].
5aa0: 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69   */.  iDb = sqli
5ab0: 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70  te3TwoPartName(p
5ac0: 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64  Parse, pId1, pId
5ad0: 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20  2, &pId);.  if( 
5ae0: 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a  iDb<0 ) return;.
5af0: 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
5b00: 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  [iDb];..  /* If 
5b10: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
5b20: 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69  e has been expli
5b30: 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70  citly named as p
5b40: 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  art of the .  **
5b50: 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75   pragma, make su
5b60: 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a  re it is open. .
5b70: 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d    */.  if( iDb==
5b80: 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e  1 && sqlite3Open
5b90: 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50 61  TempDatabase(pPa
5ba0: 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  rse) ){.    retu
5bb0: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74  rn;.  }..  zLeft
5bc0: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
5bd0: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29  omToken(db, pId)
5be0: 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29  ;.  if( !zLeft )
5bf0: 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d   return;.  if( m
5c00: 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20  inusFlag ){.    
5c10: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
5c20: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54  MPrintf(db, "-%T
5c30: 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65  ", pValue);.  }e
5c40: 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  lse{.    zRight 
5c50: 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f  = sqlite3NameFro
5c60: 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75  mToken(db, pValu
5c70: 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  e);.  }..  asser
5c80: 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62  t( pId2 );.  zDb
5c90: 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70   = pId2->n>0 ? p
5ca0: 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20  Db->zName : 0;. 
5cb0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 75 74 68   if( sqlite3Auth
5cc0: 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51  Check(pParse, SQ
5cd0: 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65  LITE_PRAGMA, zLe
5ce0: 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  ft, zRight, zDb)
5cf0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61   ){.    goto pra
5d00: 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  gma_out;.  }..  
5d10: 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51 4c 49 54  /* Send an SQLIT
5d20: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66  E_FCNTL_PRAGMA f
5d30: 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ile-control to t
5d40: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46  he underlying VF
5d50: 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  S.  ** connectio
5d60: 6e 2e 20 20 49 66 20 69 74 20 72 65 74 75 72 6e  n.  If it return
5d70: 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65  s SQLITE_OK, the
5d80: 6e 20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68  n assume that th
5d90: 65 20 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c  e VFS.  ** handl
5da0: 65 64 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e  ed the pragma an
5db0: 64 20 67 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d  d generate a no-
5dc0: 6f 70 20 70 72 65 70 61 72 65 64 20 73 74 61 74  op prepared stat
5dd0: 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46  ement..  */.  aF
5de0: 63 6e 74 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  cntl[0] = 0;.  a
5df0: 46 63 6e 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74  Fcntl[1] = zLeft
5e00: 3b 0a 20 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20  ;.  aFcntl[2] = 
5e10: 7a 52 69 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c  zRight;.  aFcntl
5e20: 5b 33 5d 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  [3] = 0;.  db->b
5e30: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
5e40: 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
5e50: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
5e60: 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54  l(db, zDb, SQLIT
5e70: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20  E_FCNTL_PRAGMA, 
5e80: 28 76 6f 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a  (void*)aFcntl);.
5e90: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
5ea0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 61  _OK ){.    if( a
5eb0: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
5ec0: 20 20 69 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50    int mem = ++pP
5ed0: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
5ee0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5ef0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
5f00: 38 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46  8, 0, mem, 0, aF
5f10: 63 6e 74 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20  cntl[0], 0);.   
5f20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
5f30: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
5f40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
5f50: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
5f60: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
5f70: 22 72 65 73 75 6c 74 22 2c 20 53 51 4c 49 54 45  "result", SQLITE
5f80: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
5f90: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5fa0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
5fb0: 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20  w, mem, 1);.    
5fc0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
5fd0: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
5fe0: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
5ff0: 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _out;.  }.  if( 
6000: 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  rc!=SQLITE_NOTFO
6010: 55 4e 44 20 29 7b 0a 20 20 20 20 69 66 28 20 61  UND ){.    if( a
6020: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
6030: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
6040: 67 28 70 50 61 72 73 65 2c 20 22 25 73 22 2c 20  g(pParse, "%s", 
6050: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
6060: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
6070: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
6080: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72  .    pParse->nEr
6090: 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  r++;.    pParse-
60a0: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f  >rc = rc;.    go
60b0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
60c0: 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20   }..  /* Locate 
60d0: 74 68 65 20 70 72 61 67 6d 61 20 69 6e 20 74 68  the pragma in th
60e0: 65 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a  e lookup table *
60f0: 2f 0a 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75  /.  lwr = 0;.  u
6100: 70 72 20 3d 20 41 72 72 61 79 53 69 7a 65 28 61  pr = ArraySize(a
6110: 50 72 61 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a  PragmaNames)-1;.
6120: 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70    while( lwr<=up
6130: 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28  r ){.    mid = (
6140: 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20  lwr+upr)/2;.    
6150: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72  rc = sqlite3_str
6160: 69 63 6d 70 28 7a 4c 65 66 74 2c 20 61 50 72 61  icmp(zLeft, aPra
6170: 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e  gmaNames[mid].zN
6180: 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ame);.    if( rc
6190: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
61a0: 20 69 66 28 20 72 63 3c 30 20 29 7b 0a 20 20 20   if( rc<0 ){.   
61b0: 20 20 20 75 70 72 20 3d 20 6d 69 64 20 2d 20 31     upr = mid - 1
61c0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
61d0: 20 20 20 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31     lwr = mid + 1
61e0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
61f0: 28 20 6c 77 72 3e 75 70 72 20 29 20 67 6f 74 6f  ( lwr>upr ) goto
6200: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20   pragma_out;..  
6210: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
6220: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6230: 20 69 73 20 6c 6f 61 64 65 64 20 69 66 20 74 68   is loaded if th
6240: 65 20 70 72 61 67 6d 61 20 72 65 71 75 69 72 65  e pragma require
6250: 73 20 74 68 61 74 20 2a 2f 0a 20 20 69 66 28 20  s that */.  if( 
6260: 28 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69  (aPragmaNames[mi
6270: 64 5d 2e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  d].mPragFlag & P
6280: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
6290: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
62a0: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
62b0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
62c0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
62d0: 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f   }..  /* Jump to
62e0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
62f0: 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20   pragma handler 
6300: 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 61 50 72  */.  switch( aPr
6310: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65  agmaNames[mid].e
6320: 50 72 61 67 54 79 70 20 29 7b 0a 20 20 0a 23 69  PragTyp ){.  .#i
6330: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
6340: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
6350: 47 4d 41 53 29 20 26 26 20 21 64 65 66 69 6e 65  GMAS) && !define
6360: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  d(SQLITE_OMIT_DE
6370: 50 52 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20  PRECATED).  /*. 
6380: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
6390: 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63  abase.]default_c
63a0: 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20  ache_size.  **  
63b0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
63c0: 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  .]default_cache_
63d0: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
63e0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
63f0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
6400: 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73  ent persistent s
6410: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
6420: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
6430: 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ize.  The value 
6440: 72 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20  returned is the 
6450: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
6460: 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20  f.  ** pages in 
6470: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20  the page cache. 
6480: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
6490: 20 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63   sets both the c
64a0: 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65  urrent.  ** page
64b0: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
64c0: 65 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73  e and the persis
64d0: 74 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20  tent page cache 
64e0: 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20  size value.  ** 
64f0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
6500: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a  tabase file..  *
6510: 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72  *.  ** Older ver
6520: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
6530: 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65  would set the de
6540: 66 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65  fault cache size
6550: 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74   to a.  ** negat
6560: 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e  ive number to in
6570: 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f  dicate synchrono
6580: 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64  us=OFF.  These d
6590: 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ays, synchronous
65a0: 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20  .  ** is always 
65b0: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65  on by default re
65c0: 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
65d0: 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61  sign of the defa
65e0: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
65f0: 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e  ize.  But contin
6600: 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61  ue to take the a
6610: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
6620: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
6630: 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20  he.  ** size of 
6640: 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61  historical compa
6650: 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20  tibility..  */. 
6660: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45   case PragTyp_DE
6670: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
6680: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
6690: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
66a0: 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d  getCacheSize[] =
66b0: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54 72   {.      { OP_Tr
66c0: 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30 2c  ansaction, 0, 0,
66d0: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20          0},     
66e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
66f0: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
6700: 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
6710: 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20  e,  0, 1,       
6720: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
6730: 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20  ACHE_SIZE},  /* 
6740: 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  1 */.      { OP_
6750: 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20  IfPos,       1, 
6760: 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  8,        0},.  
6770: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
6780: 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20 20  ,     0, 2,     
6790: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
67a0: 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20 31  P_Subtract,    1
67b0: 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c 0a  , 2,        1},.
67c0: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73        { OP_IfPos
67d0: 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20  ,       1, 8,   
67e0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
67f0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
6800: 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   0, 1,        0}
6810: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
6820: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20 2a            /* 6 *
6830: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f  /.      { OP_Noo
6840: 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20  p,        0, 0, 
6850: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
6860: 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
6870: 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20 20     1, 1,        
6880: 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69  0},.    };.    i
6890: 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 73 71 6c  nt addr;.    sql
68a0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
68b0: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  e(v, iDb);.    i
68c0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
68d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
68e0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
68f0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
6900: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
6910: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
6920: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 53   "cache_size", S
6930: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
6940: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
6950: 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 61 64  m += 2;.      ad
6960: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
6970: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
6980: 61 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53  aySize(getCacheS
6990: 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53 69  ize), getCacheSi
69a0: 7a 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ze);.      sqlit
69b0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
69c0: 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
69d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
69e0: 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
69f0: 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  1, iDb);.      s
6a00: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
6a10: 50 31 28 76 2c 20 61 64 64 72 2b 36 2c 20 53 51  P1(v, addr+6, SQ
6a20: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43  LITE_DEFAULT_CAC
6a30: 48 45 5f 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65  HE_SIZE);.    }e
6a40: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
6a50: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73  ize = sqlite3Abs
6a60: 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f  Int32(sqlite3Ato
6a70: 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
6a80: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72    sqlite3BeginWr
6a90: 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61  iteOperation(pPa
6aa0: 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20  rse, 0, iDb);.  
6ab0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
6ac0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
6ad0: 67 65 72 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20  ger, size, 1);. 
6ae0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
6af0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74  AddOp3(v, OP_Set
6b00: 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52  Cookie, iDb, BTR
6b10: 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  EE_DEFAULT_CACHE
6b20: 5f 53 49 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20  _SIZE, 1);.     
6b30: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
6b40: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
6b50: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
6b60: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
6b70: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
6b80: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
6b90: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
6ba0: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
6bb0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
6bc0: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
6bd0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
6be0: 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45  endif /* !SQLITE
6bf0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
6c00: 4d 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f  MAS && !SQLITE_O
6c10: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
6c20: 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
6c30: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
6c40: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a  R_PRAGMAS).  /*.
6c50: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
6c60: 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a  tabase.]page_siz
6c70: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
6c80: 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73  database.]page_s
6c90: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
6ca0: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
6cb0: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
6cc0: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
6cd0: 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  he.  ** database
6ce0: 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79   page size in by
6cf0: 74 65 73 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  tes.  The second
6d00: 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65 0a 20   form sets the. 
6d10: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67   ** database pag
6d20: 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 54  e size value.  T
6d30: 68 65 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c  he value can onl
6d40: 79 20 62 65 20 73 65 74 20 69 66 0a 20 20 2a 2a  y be set if.  **
6d50: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
6d60: 73 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63  s not yet been c
6d70: 72 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63  reated..  */.  c
6d80: 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 47 45  ase PragTyp_PAGE
6d90: 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72  _SIZE: {.    Btr
6da0: 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70  ee *pBt = pDb->p
6db0: 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  Bt;.    assert( 
6dc0: 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66  pBt!=0 );.    if
6dd0: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
6de0: 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c     int size = AL
6df0: 57 41 59 53 28 70 42 74 29 20 3f 20 73 71 6c 69  WAYS(pBt) ? sqli
6e00: 74 65 33 42 74 72 65 65 47 65 74 50 61 67 65 53  te3BtreeGetPageS
6e10: 69 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20  ize(pBt) : 0;.  
6e20: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
6e30: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 70 61 67  Int(pParse, "pag
6e40: 65 5f 73 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a  e_size", size);.
6e50: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
6e60: 20 2f 2a 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66   /* Malloc may f
6e70: 61 69 6c 20 77 68 65 6e 20 73 65 74 74 69 6e 67  ail when setting
6e80: 20 74 68 65 20 70 61 67 65 2d 73 69 7a 65 2c 20   the page-size, 
6e90: 61 73 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  as there is an i
6ea0: 6e 74 65 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  nternal.      **
6eb0: 20 62 75 66 66 65 72 20 74 68 61 74 20 74 68 65   buffer that the
6ec0: 20 70 61 67 65 72 20 6d 6f 64 75 6c 65 20 72 65   pager module re
6ed0: 73 69 7a 65 73 20 75 73 69 6e 67 20 73 71 6c 69  sizes using sqli
6ee0: 74 65 33 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20  te3_realloc().. 
6ef0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 64 62       */.      db
6f00: 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 20 3d  ->nextPagesize =
6f10: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
6f20: 67 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ght);.      if( 
6f30: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71  SQLITE_NOMEM==sq
6f40: 6c 69 74 65 33 42 74 72 65 65 53 65 74 50 61 67  lite3BtreeSetPag
6f50: 65 53 69 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e  eSize(pBt, db->n
6f60: 65 78 74 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30  extPagesize,-1,0
6f70: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  ) ){.        db-
6f80: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
6f90: 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
6fa0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
6fb0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
6fc0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65  MA [database.]se
6fd0: 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a  cure_delete.  **
6fe0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
6ff0: 73 65 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74  se.]secure_delet
7000: 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20  e=ON/OFF.  **.  
7010: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
7020: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
7030: 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  rrent setting fo
7040: 72 20 74 68 65 0a 20 20 2a 2a 20 73 65 63 75 72  r the.  ** secur
7050: 65 5f 64 65 6c 65 74 65 20 66 6c 61 67 2e 20 20  e_delete flag.  
7060: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
7070: 63 68 61 6e 67 65 73 20 74 68 65 20 73 65 63 75  changes the secu
7080: 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66  re_delete.  ** f
7090: 6c 61 67 20 73 65 74 74 69 6e 67 20 61 6e 64 20  lag setting and 
70a0: 72 65 70 6f 72 74 73 20 74 68 65 6e 65 77 20 76  reports thenew v
70b0: 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  alue..  */.  cas
70c0: 65 20 50 72 61 67 54 79 70 5f 53 45 43 55 52 45  e PragTyp_SECURE
70d0: 5f 44 45 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42  _DELETE: {.    B
70e0: 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d  tree *pBt = pDb-
70f0: 3e 70 42 74 3b 0a 20 20 20 20 69 6e 74 20 62 20  >pBt;.    int b 
7100: 3d 20 2d 31 3b 0a 20 20 20 20 61 73 73 65 72 74  = -1;.    assert
7110: 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ( pBt!=0 );.    
7120: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
7130: 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33 47      b = sqlite3G
7140: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
7150: 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 0);.    }.    
7160: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26  if( pId2->n==0 &
7170: 26 20 62 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  & b>=0 ){.      
7180: 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 66 6f  int ii;.      fo
7190: 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
71a0: 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
71b0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
71c0: 65 63 75 72 65 44 65 6c 65 74 65 28 64 62 2d 3e  ecureDelete(db->
71d0: 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b  aDb[ii].pBt, b);
71e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
71f0: 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33 42 74     b = sqlite3Bt
7200: 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28  reeSecureDelete(
7210: 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 72 65 74  pBt, b);.    ret
7220: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
7230: 72 73 65 2c 20 22 73 65 63 75 72 65 5f 64 65 6c  rse, "secure_del
7240: 65 74 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72  ete", b);.    br
7250: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
7260: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
7270: 61 62 61 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f  abase.]max_page_
7280: 63 6f 75 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47  count.  **  PRAG
7290: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61  MA [database.]ma
72a0: 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20  x_page_count=N. 
72b0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72   **.  ** The fir
72c0: 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20  st form reports 
72d0: 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74  the current sett
72e0: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
72f0: 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
7300: 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
7310: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
7320: 54 68 65 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64  The .  ** second
7330: 20 66 6f 72 6d 20 61 74 74 65 6d 70 74 73 20 74   form attempts t
7340: 6f 20 63 68 61 6e 67 65 20 74 68 69 73 20 73 65  o change this se
7350: 74 74 69 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a  tting.  Both.  *
7360: 2a 20 66 6f 72 6d 73 20 72 65 74 75 72 6e 20 74  * forms return t
7370: 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69  he current setti
7380: 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ng..  **.  ** Th
7390: 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65  e absolute value
73a0: 20 6f 66 20 4e 20 69 73 20 75 73 65 64 2e 20 20   of N is used.  
73b0: 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65  This is undocume
73c0: 6e 74 65 64 20 61 6e 64 20 6d 69 67 68 74 0a 20  nted and might. 
73d0: 20 2a 2a 20 63 68 61 6e 67 65 2e 20 20 54 68 65   ** change.  The
73e0: 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
73f0: 20 74 6f 20 70 72 6f 76 69 64 65 20 61 6e 20 65   to provide an e
7400: 61 73 79 20 77 61 79 20 74 6f 20 74 65 73 74 0a  asy way to test.
7410: 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33    ** the sqlite3
7420: 41 62 73 49 6e 74 33 32 28 29 20 66 75 6e 63 74  AbsInt32() funct
7430: 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ion..  **.  **  
7440: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
7450: 2e 5d 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a  .]page_count.  *
7460: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68  *.  ** Return th
7470: 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
7480: 73 20 69 6e 20 74 68 65 20 73 70 65 63 69 66 69  s in the specifi
7490: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a  ed database..  *
74a0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
74b0: 5f 50 41 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20  _PAGE_COUNT: {. 
74c0: 20 20 20 69 6e 74 20 69 52 65 67 3b 0a 20 20 20     int iReg;.   
74d0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
74e0: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
74f0: 20 69 44 62 29 3b 0a 20 20 20 20 69 52 65 67 20   iDb);.    iReg 
7500: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
7510: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
7520: 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30  3Tolower(zLeft[0
7530: 5d 29 3d 3d 27 70 27 20 29 7b 0a 20 20 20 20 20  ])=='p' ){.     
7540: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
7550: 70 32 28 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75  p2(v, OP_Pagecou
7560: 6e 74 2c 20 69 44 62 2c 20 69 52 65 67 29 3b 0a  nt, iDb, iReg);.
7570: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7580: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
7590: 70 33 28 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e  p3(v, OP_MaxPgcn
75a0: 74 2c 20 69 44 62 2c 20 69 52 65 67 2c 20 0a 20  t, iDb, iReg, . 
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 62         sqlite3Ab
75d0: 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74  sInt32(sqlite3At
75e0: 6f 69 28 7a 52 69 67 68 74 29 29 29 3b 0a 20 20  oi(zRight)));.  
75f0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
7600: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
7610: 52 65 73 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c  ResultRow, iReg,
7620: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
7630: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
7640: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
7650: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
7660: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
7670: 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54  ME, zLeft, SQLIT
7680: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
7690: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
76a0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
76b0: 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69  [database.]locki
76c0: 6e 67 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52  ng_mode.  **  PR
76d0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
76e0: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28  locking_mode = (
76f0: 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65  normal|exclusive
7700: 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ).  */.  case Pr
7710: 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f  agTyp_LOCKING_MO
7720: 44 45 3a 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20  DE: {.    const 
7730: 63 68 61 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f  char *zRet = "no
7740: 72 6d 61 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65  rmal";.    int e
7750: 4d 6f 64 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e  Mode = getLockin
7760: 67 4d 6f 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a  gMode(zRight);..
7770: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
7780: 3d 30 20 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47  =0 && eMode==PAG
7790: 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51  ER_LOCKINGMODE_Q
77a0: 55 45 52 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a  UERY ){.      /*
77b0: 20 53 69 6d 70 6c 65 20 22 50 52 41 47 4d 41 20   Simple "PRAGMA 
77c0: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73  locking_mode;" s
77d0: 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 69  tatement. This i
77e0: 73 20 61 20 71 75 65 72 79 20 66 6f 72 0a 20 20  s a query for.  
77f0: 20 20 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65      ** the curre
7800: 6e 74 20 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69  nt default locki
7810: 6e 67 20 6d 6f 64 65 20 28 77 68 69 63 68 20 6d  ng mode (which m
7820: 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74 20  ay be different 
7830: 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  to.      ** the 
7840: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20  locking-mode of 
7850: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
7860: 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  e)..      */.   
7870: 20 20 20 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64     eMode = db->d
7880: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20  fltLockMode;.   
7890: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61   }else{.      Pa
78a0: 67 65 72 20 2a 70 50 61 67 65 72 3b 0a 20 20 20  ger *pPager;.   
78b0: 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d     if( pId2->n==
78c0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
78d0: 54 68 69 73 20 69 6e 64 69 63 61 74 65 73 20 74  This indicates t
78e0: 68 61 74 20 6e 6f 20 64 61 74 61 62 61 73 65 20  hat no database 
78f0: 6e 61 6d 65 20 77 61 73 20 73 70 65 63 69 66 69  name was specifi
7900: 65 64 20 61 73 20 70 61 72 74 0a 20 20 20 20 20  ed as part.     
7910: 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 50 52 41     ** of the PRA
7920: 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20  GMA command. In 
7930: 74 68 69 73 20 63 61 73 65 20 74 68 65 20 6c 6f  this case the lo
7940: 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20  cking-mode must 
7950: 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65  be.        ** se
7960: 74 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  t on all attache
7970: 64 20 64 61 74 61 62 61 73 65 73 2c 20 61 73 20  d databases, as 
7980: 77 65 6c 6c 20 61 73 20 74 68 65 20 6d 61 69 6e  well as the main
7990: 20 64 62 20 66 69 6c 65 2e 0a 20 20 20 20 20 20   db file..      
79a0: 20 20 2a 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20    **.        ** 
79b0: 41 6c 73 6f 2c 20 74 68 65 20 73 71 6c 69 74 65  Also, the sqlite
79c0: 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76  3.dfltLockMode v
79d0: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 73  ariable is set s
79e0: 6f 20 74 68 61 74 0a 20 20 20 20 20 20 20 20 2a  o that.        *
79f0: 2a 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74  * any subsequent
7a00: 6c 79 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ly attached data
7a10: 62 61 73 65 73 20 61 6c 73 6f 20 75 73 65 20 74  bases also use t
7a20: 68 65 20 73 70 65 63 69 66 69 65 64 0a 20 20 20  he specified.   
7a30: 20 20 20 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20       ** locking 
7a40: 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f  mode..        */
7a50: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 69 3b  .        int ii;
7a60: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
7a70: 70 44 62 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d  pDb==&db->aDb[0]
7a80: 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69  );.        for(i
7a90: 69 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=2; ii<db->nDb;
7aa0: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
7ab0: 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
7ac0: 65 33 42 74 72 65 65 50 61 67 65 72 28 64 62 2d  e3BtreePager(db-
7ad0: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20  >aDb[ii].pBt);. 
7ae0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
7af0: 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65  PagerLockingMode
7b00: 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b  (pPager, eMode);
7b10: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
7b20: 20 20 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d     db->dfltLockM
7b30: 6f 64 65 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b  ode = (u8)eMode;
7b40: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
7b50: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
7b60: 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70  treePager(pDb->p
7b70: 42 74 29 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65  Bt);.      eMode
7b80: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c   = sqlite3PagerL
7b90: 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65  ockingMode(pPage
7ba0: 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d  r, eMode);.    }
7bb0: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 65 4d  ..    assert( eM
7bc0: 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49  ode==PAGER_LOCKI
7bd0: 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20  NGMODE_NORMAL.  
7be0: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f            || eMo
7bf0: 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e  de==PAGER_LOCKIN
7c00: 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20  GMODE_EXCLUSIVE 
7c10: 29 3b 0a 20 20 20 20 69 66 28 20 65 4d 6f 64 65  );.    if( eMode
7c20: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
7c30: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 7b  ODE_EXCLUSIVE ){
7c40: 0a 20 20 20 20 20 20 7a 52 65 74 20 3d 20 22 65  .      zRet = "e
7c50: 78 63 6c 75 73 69 76 65 22 3b 0a 20 20 20 20 7d  xclusive";.    }
7c60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7c70: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
7c80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7c90: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
7ca0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
7cb0: 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20  "locking_mode", 
7cc0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
7cd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
7ce0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
7cf0: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52  ng8, 0, 1, 0, zR
7d00: 65 74 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69  et, 0);.    sqli
7d10: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
7d20: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
7d30: 2c 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  , 1);.    break;
7d40: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
7d50: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
7d60: 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a  e.]journal_mode.
7d70: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7d80: 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f  tabase.]journal_
7d90: 6d 6f 64 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20  mode =.  **     
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7db0: 20 28 64 65 6c 65 74 65 7c 70 65 72 73 69 73 74   (delete|persist
7dc0: 7c 6f 66 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65  |off|truncate|me
7dd0: 6d 6f 72 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20  mory|wal|off).  
7de0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
7df0: 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20  p_JOURNAL_MODE: 
7e00: 7b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b  {.    int eMode;
7e10: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
7e20: 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52  f the PAGER_JOUR
7e30: 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62  NALMODE_XXX symb
7e40: 6f 6c 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ols */.    int i
7e50: 69 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  i;           /* 
7e60: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
7e70: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7e80: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
7e90: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7ea0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
7eb0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
7ec0: 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20  "journal_mode", 
7ed0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
7ee0: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d  .    if( zRight=
7ef0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  =0 ){.      /* I
7f00: 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 22 3d  f there is no "=
7f10: 4d 4f 44 45 22 20 70 61 72 74 20 6f 66 20 74 68  MODE" part of th
7f20: 65 20 70 72 61 67 6d 61 2c 20 64 6f 20 61 20 71  e pragma, do a q
7f30: 75 65 72 79 20 66 6f 72 20 74 68 65 0a 20 20 20  uery for the.   
7f40: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f     ** current mo
7f50: 64 65 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64  de */.      eMod
7f60: 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  e = PAGER_JOURNA
7f70: 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20  LMODE_QUERY;.   
7f80: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f   }else{.      co
7f90: 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b  nst char *zMode;
7fa0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73  .      int n = s
7fb0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
7fc0: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 66 6f  Right);.      fo
7fd0: 72 28 65 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64  r(eMode=0; (zMod
7fe0: 65 20 3d 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  e = sqlite3Journ
7ff0: 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65  alModename(eMode
8000: 29 29 21 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b  ))!=0; eMode++){
8010: 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
8020: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69  ite3StrNICmp(zRi
8030: 67 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d  ght, zMode, n)==
8040: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
8050: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 21 7a 4d   }.      if( !zM
8060: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ode ){.        /
8070: 2a 20 49 66 20 74 68 65 20 22 3d 4d 4f 44 45 22  * If the "=MODE"
8080: 20 70 61 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d   part does not m
8090: 61 74 63 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a  atch any known j
80a0: 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20  ournal mode,.   
80b0: 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20       ** then do 
80c0: 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 20  a query */.     
80d0: 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52     eMode = PAGER
80e0: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
80f0: 52 59 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  RY;.      }.    
8100: 7d 0a 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d  }.    if( eMode=
8110: 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
8120: 44 45 5f 51 55 45 52 59 20 26 26 20 70 49 64 32  DE_QUERY && pId2
8130: 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ->n==0 ){.      
8140: 2f 2a 20 43 6f 6e 76 65 72 74 20 22 50 52 41 47  /* Convert "PRAG
8150: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22  MA journal_mode"
8160: 20 69 6e 74 6f 20 22 50 52 41 47 4d 41 20 6d 61   into "PRAGMA ma
8170: 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22  in.journal_mode"
8180: 20 2a 2f 0a 20 20 20 20 20 20 69 44 62 20 3d 20   */.      iDb = 
8190: 30 3b 0a 20 20 20 20 20 20 70 49 64 32 2d 3e 6e  0;.      pId2->n
81a0: 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
81b0: 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31  for(ii=db->nDb-1
81c0: 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a  ; ii>=0; ii--){.
81d0: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
81e0: 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69  b[ii].pBt && (ii
81f0: 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e  ==iDb || pId2->n
8200: 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ==0) ){.        
8210: 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
8220: 74 72 65 65 28 76 2c 20 69 69 29 3b 0a 20 20 20  tree(v, ii);.   
8230: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8240: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75  AddOp3(v, OP_Jou
8250: 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c  rnalMode, ii, 1,
8260: 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d   eMode);.      }
8270: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
8280: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8290: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
82a0: 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a   1);.    break;.
82b0: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
82c0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
82d0: 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c  .]journal_size_l
82e0: 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d  imit.  **  PRAGM
82f0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75  A [database.]jou
8300: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d  rnal_size_limit=
8310: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
8320: 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a 65 20  or set the size 
8330: 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63  limit on rollbac
8340: 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e  k journal files.
8350: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
8360: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a  gTyp_JOURNAL_SIZ
8370: 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50  E_LIMIT: {.    P
8380: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
8390: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
83a0: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
83b0: 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b  i64 iLimit = -2;
83c0: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
83d0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
83e0: 41 74 6f 69 36 34 28 7a 52 69 67 68 74 2c 20 26  Atoi64(zRight, &
83f0: 69 4c 69 6d 69 74 2c 20 73 71 6c 69 74 65 33 53  iLimit, sqlite3S
8400: 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 2c  trlen30(zRight),
8410: 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20   SQLITE_UTF8);. 
8420: 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c       if( iLimit<
8430: 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31  -1 ) iLimit = -1
8440: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d  ;.    }.    iLim
8450: 69 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  it = sqlite3Page
8460: 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69  rJournalSizeLimi
8470: 74 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74  t(pPager, iLimit
8480: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e  );.    returnSin
8490: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
84a0: 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d  journal_size_lim
84b0: 69 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20  it", iLimit);.  
84c0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65    break;.  }..#e
84d0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
84e0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
84f0: 53 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  S */..  /*.  ** 
8500: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
8510: 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20  e.]auto_vacuum. 
8520: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
8530: 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75  abase.]auto_vacu
8540: 75 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47  um=N.  **.  ** G
8550: 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  et or set the va
8560: 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
8570: 61 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75 6d  ase 'auto-vacuum
8580: 27 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a  ' parameter..  *
8590: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 6f  * The value is o
85a0: 6e 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31  ne of:  0 NONE 1
85b0: 20 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e   FULL 2 INCREMEN
85c0: 54 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66  TAL.  */.#ifndef
85d0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
85e0: 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50  OVACUUM.  case P
85f0: 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55  ragTyp_AUTO_VACU
8600: 55 4d 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  UM: {.    Btree 
8610: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
8620: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
8630: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
8640: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
8650: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
8660: 70 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76 61  pParse, "auto_va
8670: 63 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42 74  cuum", sqlite3Bt
8680: 72 65 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d  reeGetAutoVacuum
8690: 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73  (pBt));.    }els
86a0: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75  e{.      int eAu
86b0: 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75  to = getAutoVacu
86c0: 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  um(zRight);.    
86d0: 20 20 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e    assert( eAuto>
86e0: 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29  =0 && eAuto<=2 )
86f0: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74  ;.      db->next
8700: 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41  Autovac = (u8)eA
8710: 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61  uto;.      /* Ca
8720: 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d  ll SetAutoVacuum
8730: 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61  () to set initia
8740: 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61  lize the interna
8750: 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20  l auto and.     
8760: 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20   ** incr-vacuum 
8770: 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20 72  flags. This is r
8780: 65 71 75 69 72 65 64 20 69 6e 20 63 61 73 65 20  equired in case 
8790: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a  this connection.
87a0: 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73        ** creates
87b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
87c0: 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74  le. It is import
87d0: 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20 63  ant that it is c
87e0: 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20  reated.      ** 
87f0: 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  as an auto-vacuu
8800: 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20 20  m capable db..  
8810: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63 20      */.      rc 
8820: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
8830: 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c  tAutoVacuum(pBt,
8840: 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 69   eAuto);.      i
8850: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
8860: 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c   && (eAuto==1 ||
8870: 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20   eAuto==2) ){.  
8880: 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73 65        /* When se
8890: 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f 76  tting the auto_v
88a0: 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69  acuum mode to ei
88b0: 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a  ther "full" or .
88c0: 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72          ** "incr
88d0: 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20  emental", write 
88e0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74  the value of met
88f0: 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61  a[6] in the data
8900: 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  base.        ** 
8910: 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69  file. Before wri
8920: 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c  ting to meta[6],
8930: 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61   check that meta
8940: 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20  [3] indicates.  
8950: 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
8960: 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20  is really is an 
8970: 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61  auto-vacuum capa
8980: 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  ble database..  
8990: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
89a0: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
89b0: 62 65 4f 70 4c 69 73 74 20 73 65 74 4d 65 74 61  beOpList setMeta
89c0: 36 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  6[] = {.        
89d0: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
89e0: 6f 6e 2c 20 20 20 20 30 2c 20 20 20 20 20 20 20  on,    0,       
89f0: 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20    1,            
8a00: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30       0},    /* 0
8a10: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
8a20: 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20  OP_ReadCookie,  
8a30: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c     0,         1,
8a40: 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4c           BTREE_L
8a50: 41 52 47 45 53 54 5f 52 4f 4f 54 5f 50 41 47 45  ARGEST_ROOT_PAGE
8a60: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f  },.          { O
8a70: 50 5f 49 66 2c 20 20 20 20 20 20 20 20 20 20 20  P_If,           
8a80: 20 20 31 2c 20 20 20 20 20 20 20 20 20 30 2c 20    1,         0, 
8a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8aa0: 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20  0},    /* 2 */. 
8ab0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 48 61           { OP_Ha
8ac0: 6c 74 2c 20 20 20 20 20 20 20 20 20 20 20 53 51  lt,           SQ
8ad0: 4c 49 54 45 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72  LITE_OK, OE_Abor
8ae0: 74 2c 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20  t,          0}, 
8af0: 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20     /* 3 */.     
8b00: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
8b10: 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 20 20  r,        0,    
8b20: 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20       1,         
8b30: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
8b40: 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 4 */.         
8b50: 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c   { OP_SetCookie,
8b60: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
8b70: 20 42 54 52 45 45 5f 49 4e 43 52 5f 56 41 43 55   BTREE_INCR_VACU
8b80: 55 4d 2c 20 31 7d 2c 20 20 20 20 2f 2a 20 35 20  UM, 1},    /* 5 
8b90: 2a 2f 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20  */.        };.  
8ba0: 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 3b        int iAddr;
8bb0: 0a 20 20 20 20 20 20 20 20 69 41 64 64 72 20 3d  .        iAddr =
8bc0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8bd0: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
8be0: 7a 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73 65  ze(setMeta6), se
8bf0: 74 4d 65 74 61 36 29 3b 0a 20 20 20 20 20 20 20  tMeta6);.       
8c00: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
8c10: 67 65 50 31 28 76 2c 20 69 41 64 64 72 2c 20 69  geP1(v, iAddr, i
8c20: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
8c30: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
8c40: 28 76 2c 20 69 41 64 64 72 2b 31 2c 20 69 44 62  (v, iAddr+1, iDb
8c50: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
8c60: 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  e3VdbeChangeP2(v
8c70: 2c 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64 72  , iAddr+2, iAddr
8c80: 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +4);.        sql
8c90: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
8ca0: 28 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75  (v, iAddr+4, eAu
8cb0: 74 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73  to-1);.        s
8cc0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
8cd0: 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69  P1(v, iAddr+5, i
8ce0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
8cf0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
8d00: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  e(v, iDb);.     
8d10: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
8d20: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
8d30: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
8d40: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 6e 63  A [database.]inc
8d50: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28  remental_vacuum(
8d60: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20  N).  **.  ** Do 
8d70: 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65  N steps of incre
8d80: 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67  mental vacuuming
8d90: 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a   on a database..
8da0: 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c    */.#ifndef SQL
8db0: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
8dc0: 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54  UUM.  case PragT
8dd0: 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56  yp_INCREMENTAL_V
8de0: 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74  ACUUM: {.    int
8df0: 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20   iLimit, addr;. 
8e00: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
8e10: 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49   || !sqlite3GetI
8e20: 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c  nt32(zRight, &iL
8e30: 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c  imit) || iLimit<
8e40: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d  =0 ){.      iLim
8e50: 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b  it = 0x7fffffff;
8e60: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
8e70: 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
8e80: 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c  ation(pParse, 0,
8e90: 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74   iDb);.    sqlit
8ea0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8eb0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d  OP_Integer, iLim
8ec0: 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72  it, 1);.    addr
8ed0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
8ee0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56  dOp1(v, OP_IncrV
8ef0: 61 63 75 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20  acuum, iDb);.   
8f00: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8f10: 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p1(v, OP_ResultR
8f20: 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  ow, 1);.    sqli
8f30: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
8f40: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
8f50: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
8f60: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8f70: 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b  IfPos, 1, addr);
8f80: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8f90: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
8fa0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
8fb0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
8fc0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  f SQLITE_OMIT_PA
8fd0: 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  GER_PRAGMAS.  /*
8fe0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
8ff0: 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73  atabase.]cache_s
9000: 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ize.  **  PRAGMA
9010: 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68   [database.]cach
9020: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
9030: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
9040: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
9050: 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74  rrent local sett
9060: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
9070: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
9080: 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  . The second for
9090: 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c  m sets the local
90a0: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
90b0: 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66   size value.  If
90c0: 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20 74   N is positive t
90d0: 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a  hen that is the.
90e0: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
90f0: 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63 68  ages in the cach
9100: 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61  e.  If N is nega
9110: 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  tive, then the. 
9120: 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61   ** number of pa
9130: 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64 20  ges is adjusted 
9140: 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63 68  so that the cach
9150: 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79  e uses -N kibiby
9160: 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f  tes.  ** of memo
9170: 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ry..  */.  case 
9180: 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49  PragTyp_CACHE_SI
9190: 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74  ZE: {.    assert
91a0: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
91b0: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
91c0: 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
91d0: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
91e0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
91f0: 28 70 50 61 72 73 65 2c 20 22 63 61 63 68 65 5f  (pParse, "cache_
9200: 73 69 7a 65 22 2c 20 70 44 62 2d 3e 70 53 63 68  size", pDb->pSch
9210: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29  ema->cache_size)
9220: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
9230: 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71     int size = sq
9240: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
9250: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53  );.      pDb->pS
9260: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
9270: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20  e = size;.      
9280: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
9290: 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42  acheSize(pDb->pB
92a0: 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  t, pDb->pSchema-
92b0: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
92c0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
92d0: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
92e0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
92f0: 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29 0a 20 20  ]mmap_size(N).  
9300: 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20 74 6f 20  **.  ** Used to 
9310: 73 65 74 20 6d 61 70 70 69 6e 67 20 73 69 7a 65  set mapping size
9320: 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d 61 70 70   limit. The mapp
9330: 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 20 69  ing size limit i
9340: 73 0a 20 20 2a 2a 20 75 73 65 64 20 74 6f 20 6c  s.  ** used to l
9350: 69 6d 69 74 20 74 68 65 20 61 67 67 72 65 67 61  imit the aggrega
9360: 74 65 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20 6d  te size of all m
9370: 65 6d 6f 72 79 20 6d 61 70 70 65 64 20 72 65 67  emory mapped reg
9380: 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20 20 2a 2a  ions of the.  **
9390: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
93a0: 49 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  If this paramete
93b0: 72 20 69 73 20 73 65 74 20 74 6f 20 7a 65 72 6f  r is set to zero
93c0: 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20 6d 61  , then memory ma
93d0: 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73 20 6e 6f  pping.  ** is no
93e0: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 2e 20 20  t used at all.  
93f0: 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  If N is negative
9400: 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75  , then the defau
9410: 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20  lt memory map.  
9420: 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65 72 6d 69  ** limit determi
9430: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
9440: 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
9450: 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 29 20 69  FIG_MMAP_SIZE) i
9460: 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54 68 65 20  s set..  ** The 
9470: 70 61 72 61 6d 65 74 65 72 20 4e 20 69 73 20 6d  parameter N is m
9480: 65 61 73 75 72 65 64 20 69 6e 20 62 79 74 65 73  easured in bytes
9490: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73  ..  **.  ** This
94a0: 20 76 61 6c 75 65 20 69 73 20 61 64 76 69 73 6f   value is adviso
94b0: 72 79 2e 20 20 54 68 65 20 75 6e 64 65 72 6c 79  ry.  The underly
94c0: 69 6e 67 20 56 46 53 20 69 73 20 66 72 65 65 20  ing VFS is free 
94d0: 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20  to memory map.  
94e0: 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20 6f 72 20  ** as little or 
94f0: 61 73 20 6d 75 63 68 20 61 73 20 69 74 20 77 61  as much as it wa
9500: 6e 74 73 2e 20 20 45 78 63 65 70 74 2c 20 69 66  nts.  Except, if
9510: 20 4e 20 69 73 20 73 65 74 20 74 6f 20 30 20 74   N is set to 0 t
9520: 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 75 70 70  hen the.  ** upp
9530: 65 72 20 6c 61 79 65 72 73 20 77 69 6c 6c 20 6e  er layers will n
9540: 65 76 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20  ever invoke the 
9550: 78 46 65 74 63 68 20 69 6e 74 65 72 66 61 63 65  xFetch interface
9560: 73 20 74 6f 20 74 68 65 20 56 46 53 2e 0a 20 20  s to the VFS..  
9570: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
9580: 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a 20  p_MMAP_SIZE: {. 
9590: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34     sqlite3_int64
95a0: 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f   sz;.#if SQLITE_
95b0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a  MAX_MMAP_SIZE>0.
95c0: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
95d0: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
95e0: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
95f0: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
9600: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
9610: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 41  ;.      sqlite3A
9620: 74 6f 69 36 34 28 7a 52 69 67 68 74 2c 20 26 73  toi64(zRight, &s
9630: 7a 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  z, sqlite3Strlen
9640: 33 30 28 7a 52 69 67 68 74 29 2c 20 53 51 4c 49  30(zRight), SQLI
9650: 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20 20  TE_UTF8);.      
9660: 69 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20  if( sz<0 ) sz = 
9670: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
9680: 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20  fig.szMmap;.    
9690: 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30    if( pId2->n==0
96a0: 20 29 20 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20   ) db->szMmap = 
96b0: 73 7a 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69  sz;.      for(ii
96c0: 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d  =db->nDb-1; ii>=
96d0: 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20  0; ii--){.      
96e0: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69    if( db->aDb[ii
96f0: 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44  ].pBt && (ii==iD
9700: 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29  b || pId2->n==0)
9710: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
9720: 6c 69 74 65 33 42 74 72 65 65 53 65 74 4d 6d 61  lite3BtreeSetMma
9730: 70 4c 69 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69  pLimit(db->aDb[i
9740: 69 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20  i].pBt, sz);.   
9750: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
9760: 20 20 20 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31     }.    sz = -1
9770: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
9780: 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
9790: 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f  db, zDb, SQLITE_
97a0: 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c  FCNTL_MMAP_SIZE,
97b0: 20 26 73 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20   &sz);.#else.   
97c0: 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 72 63 20   sz = 0;.    rc 
97d0: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e  = SQLITE_OK;.#en
97e0: 64 69 66 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  dif.    if( rc==
97f0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
9800: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
9810: 6e 74 28 70 50 61 72 73 65 2c 20 22 6d 6d 61 70  nt(pParse, "mmap
9820: 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20  _size", sz);.   
9830: 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53   }else if( rc!=S
9840: 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29  QLITE_NOTFOUND )
9850: 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  {.      pParse->
9860: 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50  nErr++;.      pP
9870: 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  arse->rc = rc;. 
9880: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
9890: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
98a0: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
98b0: 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  re.  **   PRAGMA
98c0: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64   temp_store = "d
98d0: 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22  efault"|"memory"
98e0: 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a  |"file".  **.  *
98f0: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
9900: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
9910: 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72  of the temp_stor
9920: 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  e flag.  Changin
9930: 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c  g.  ** the local
9940: 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
9950: 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20  make changes to 
9960: 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e  the disk file an
9970: 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  d the default.  
9980: 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  ** value will be
9990: 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65   restored the ne
99a0: 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  xt time the data
99b0: 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a  base is opened..
99c0: 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74    **.  ** Note t
99d0: 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62  hat it is possib
99e0: 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61  le for the libra
99f0: 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ry compile-time 
9a00: 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20  options to.  ** 
9a10: 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65  override this se
9a20: 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73  tting.  */.  cas
9a30: 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53  e PragTyp_TEMP_S
9a40: 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28 20  TORE: {.    if( 
9a50: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
9a60: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
9a70: 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70 5f 73  (pParse, "temp_s
9a80: 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f  tore", db->temp_
9a90: 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73  store);.    }els
9aa0: 65 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54  e{.      changeT
9ab0: 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73  empStorage(pPars
9ac0: 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  e, zRight);.    
9ad0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
9ae0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
9af0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
9b00: 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20  directory.  **  
9b10: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
9b20: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22  re_directory = "
9b30: 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d  "|"directory_nam
9b40: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
9b50: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
9b60: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
9b70: 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  e temp_store_dir
9b80: 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68  ectory flag.  Ch
9b90: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
9ba0: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
9bb0: 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20  cific directory 
9bc0: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  to be used for t
9bd0: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a  emporary files..
9be0: 20 20 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f 20    ** Setting to 
9bf0: 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65  a null string re
9c00: 76 65 72 74 73 20 74 6f 20 74 68 65 20 64 65 66  verts to the def
9c10: 61 75 6c 74 20 74 65 6d 70 6f 72 61 72 79 20 64  ault temporary d
9c20: 69 72 65 63 74 6f 72 79 20 73 65 61 72 63 68 2e  irectory search.
9c30: 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61  .  ** If tempora
9c40: 72 79 20 64 69 72 65 63 74 6f 72 79 20 69 73 20  ry directory is 
9c50: 63 68 61 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e  changed, then in
9c60: 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72  validateTempStor
9c70: 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  age..  **.  */. 
9c80: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45   case PragTyp_TE
9c90: 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  MP_STORE_DIRECTO
9ca0: 52 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a  RY: {.    if( !z
9cb0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
9cc0: 66 28 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  f( sqlite3_temp_
9cd0: 64 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20  directory ){.   
9ce0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9cf0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
9d00: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9d10: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
9d20: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
9d30: 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  ME, .           
9d40: 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72   "temp_store_dir
9d50: 65 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f  ectory", SQLITE_
9d60: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
9d70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9d80: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
9d90: 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74  , 0, 1, 0, sqlit
9da0: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
9db0: 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  y, 0);.        s
9dc0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9dd0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
9de0: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  , 1, 1);.      }
9df0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e  .    }else{.#ifn
9e00: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
9e10: 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52  WSD.      if( zR
9e20: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
9e30: 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20     int res;.    
9e40: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
9e50: 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66  OsAccess(db->pVf
9e60: 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54  s, zRight, SQLIT
9e70: 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49  E_ACCESS_READWRI
9e80: 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  TE, &res);.     
9e90: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
9ea0: 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
9eb0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
9ec0: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
9ed0: 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61  se, "not a writa
9ee0: 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b  ble directory");
9ef0: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
9f00: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
9f10: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
9f20: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54      if( SQLITE_T
9f30: 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20  EMP_STORE==0.   
9f40: 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54      || (SQLITE_T
9f50: 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20  EMP_STORE==1 && 
9f60: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d  db->temp_store<=
9f70: 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51  1).       || (SQ
9f80: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
9f90: 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73  =2 && db->temp_s
9fa0: 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29  tore==1).      )
9fb0: 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69  {.        invali
9fc0: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28  dateTempStorage(
9fd0: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d  pParse);.      }
9fe0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
9ff0: 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70  ree(sqlite3_temp
a000: 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20  _directory);.   
a010: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
a020: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
a030: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
a040: 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ry = sqlite3_mpr
a050: 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68  intf("%s", zRigh
a060: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
a070: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a080: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
a090: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = 0;.      }.#en
a0a0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
a0b0: 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a  IT_WSD */.    }.
a0c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
a0d0: 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49  #if SQLITE_OS_WI
a0e0: 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  N.  /*.  **   PR
a0f0: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
a100: 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20  directory.  **  
a110: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
a120: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22  re_directory = "
a130: 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d  "|"directory_nam
a140: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
a150: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
a160: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
a170: 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  e data_store_dir
a180: 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68  ectory flag.  Ch
a190: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
a1a0: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
a1b0: 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20  cific directory 
a1c0: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64  to be used for d
a1d0: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68  atabase files th
a1e0: 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65  at.  ** were spe
a1f0: 63 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65  cified with a re
a200: 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e  lative pathname.
a210: 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e    Setting to a n
a220: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
a230: 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64  ts.  ** to the d
a240: 65 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20  efault database 
a250: 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68  directory, which
a260: 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69   for database fi
a270: 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69  les specified wi
a280: 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69  th.  ** a relati
a290: 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f  ve path will pro
a2a0: 62 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f  bably be based o
a2b0: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69  n the current di
a2c0: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a  rectory for the.
a2d0: 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44    ** process.  D
a2e0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65  atabase file spe
a2f0: 63 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61  cified with an a
a300: 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65  bsolute path are
a310: 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20   not impacted.  
a320: 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69  ** by this setti
a330: 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ng, regardless o
a340: 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a  f its value..  *
a350: 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  *.  */.  case Pr
a360: 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45  agTyp_DATA_STORE
a370: 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20  _DIRECTORY: {.  
a380: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
a390: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
a3a0: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
a3b0: 79 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  y ){.        sql
a3c0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
a3d0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
a3e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a3f0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
a400: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20  LNAME_NAME, .   
a410: 20 20 20 20 20 20 20 20 20 22 64 61 74 61 5f 73           "data_s
a420: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c  tore_directory",
a430: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
a440: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a450: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
a460: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20  _String8, 0, 1, 
a470: 30 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  0, sqlite3_data_
a480: 64 69 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20  directory, 0);. 
a490: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a4a0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
a4b0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
a4c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
a4d0: 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  se{.#ifndef SQLI
a4e0: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20  TE_OMIT_WSD.    
a4f0: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
a500: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  ){.        int r
a510: 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  es;.        rc =
a520: 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73   sqlite3OsAccess
a530: 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68  (db->pVfs, zRigh
a540: 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53  t, SQLITE_ACCESS
a550: 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72 65 73  _READWRITE, &res
a560: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
a570: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
a580: 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
a590: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
a5a0: 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74  Msg(pParse, "not
a5b0: 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65   a writable dire
a5c0: 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20  ctory");.       
a5d0: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
a5e0: 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ut;.        }.  
a5f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
a600: 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33  te3_free(sqlite3
a610: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29  _data_directory)
a620: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  ;.      if( zRig
a630: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
a640: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
a650: 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65  rectory = sqlite
a660: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
a670: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
a680: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
a690: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
a6a0: 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20  tory = 0;.      
a6b0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
a6c0: 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20  TE_OMIT_WSD */. 
a6d0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
a6e0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20    }.#endif..#if 
a6f0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f  SQLITE_ENABLE_LO
a700: 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a  CKING_STYLE.  /*
a710: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
a720: 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70  database.]lock_p
a730: 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20  roxy_file.  **  
a740: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
a750: 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  e.]lock_proxy_fi
a760: 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c  le = ":auto:"|"l
a770: 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20  ock_file_path". 
a780: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
a790: 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  or set the value
a7a0: 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f   of the lock_pro
a7b0: 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43  xy_file flag.  C
a7c0: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
a7d0: 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70   value sets a sp
a7e0: 65 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62  ecific file to b
a7f0: 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62  e used for datab
a800: 61 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73  ase access locks
a810: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
a820: 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f  se PragTyp_LOCK_
a830: 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20  PROXY_FILE: {.  
a840: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
a850: 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50  .      Pager *pP
a860: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
a870: 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42  reePager(pDb->pB
a880: 74 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  t);.      char *
a890: 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20  proxy_file_path 
a8a0: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71  = NULL;.      sq
a8b0: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c  lite3_file *pFil
a8c0: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
a8d0: 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
a8e0: 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c      sqlite3OsFil
a8f0: 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69  eControlHint(pFi
a900: 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c  le, SQLITE_GET_L
a910: 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20  OCKPROXYFILE, . 
a920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a930: 20 20 20 20 20 20 20 20 20 20 26 70 72 6f 78 79            &proxy
a940: 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20  _file_path);.   
a950: 20 20 20 0a 20 20 20 20 20 20 69 66 28 20 70 72     .      if( pr
a960: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b  oxy_file_path ){
a970: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a980: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
a990: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 1);.        sq
a9a0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
a9b0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
a9c0: 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20  E_NAME, .       
a9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9e0: 20 20 20 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f         "lock_pro
a9f0: 78 79 5f 66 69 6c 65 22 2c 20 53 51 4c 49 54 45  xy_file", SQLITE
aa00: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
aa10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
aa20: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
aa30: 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78  8, 0, 1, 0, prox
aa40: 79 5f 66 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b  y_file_path, 0);
aa50: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
aa60: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
aa70: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
aa80: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
aa90: 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65  else{.      Page
aaa0: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
aab0: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
aac0: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73  b->pBt);.      s
aad0: 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69  qlite3_file *pFi
aae0: 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  le = sqlite3Page
aaf0: 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20  rFile(pPager);. 
ab00: 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20       int res;.  
ab10: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
ab20: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73  ] ){.        res
ab30: 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f  =sqlite3OsFileCo
ab40: 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c  ntrol(pFile, SQL
ab50: 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_SET_LOCKPROX
ab60: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 52 69               zRi
ab90: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c  ght);.      } el
aba0: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73  se {.        res
abb0: 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f  =sqlite3OsFileCo
abc0: 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c  ntrol(pFile, SQL
abd0: 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_SET_LOCKPROX
abe0: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac00: 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c               NUL
ac10: 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  L);.      }.    
ac20: 20 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54    if( res!=SQLIT
ac30: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
ac40: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
ac50: 70 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20  pParse, "failed 
ac60: 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78  to set lock prox
ac70: 79 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20  y file");.      
ac80: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
ac90: 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
aca0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
acb0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
acc0: 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f  _ENABLE_LOCKING_
acd0: 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20  STYLE */      . 
ace0: 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20     .  /*.  **   
acf0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
ad00: 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20  .]synchronous.  
ad10: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
ad20: 61 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f  abase.]synchrono
ad30: 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c  us=OFF|ON|NORMAL
ad40: 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20  |FULL.  **.  ** 
ad50: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
ad60: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
ad70: 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73   the synchronous
ad80: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
ad90: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
ada0: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
adb0: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
adc0: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
add0: 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c   the.  ** defaul
ade0: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  t value will be 
adf0: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
ae00: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
ae10: 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e  ase is.  ** open
ae20: 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ed..  */.  case 
ae30: 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e  PragTyp_SYNCHRON
ae40: 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  OUS: {.    if( !
ae50: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
ae60: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
ae70: 70 50 61 72 73 65 2c 20 22 73 79 6e 63 68 72 6f  pParse, "synchro
ae80: 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61 66 65  nous", pDb->safe
ae90: 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20  ty_level-1);.   
aea0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
aeb0: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
aec0: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  t ){.        sql
aed0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
aee0: 72 73 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20  rse, .          
aef0: 20 20 22 53 61 66 65 74 79 20 6c 65 76 65 6c 20    "Safety level 
af00: 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67  may not be chang
af10: 65 64 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e  ed inside a tran
af20: 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20  saction");.     
af30: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
af40: 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65  pDb->safety_leve
af50: 6c 20 3d 20 67 65 74 53 61 66 65 74 79 4c 65 76  l = getSafetyLev
af60: 65 6c 28 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31  el(zRight,0,1)+1
af70: 3b 0a 20 20 20 20 20 20 20 20 73 65 74 41 6c 6c  ;.        setAll
af80: 50 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a  PagerFlags(db);.
af90: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
afa0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
afb0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
afc0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
afd0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
afe0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
aff0: 41 47 4d 41 53 0a 20 20 63 61 73 65 20 50 72 61  AGMAS.  case Pra
b000: 67 54 79 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20  gTyp_FLAG: {.   
b010: 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29   if( zRight==0 )
b020: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
b030: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
b040: 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64  aPragmaNames[mid
b050: 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ].zName,.       
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
b070: 62 2d 3e 66 6c 61 67 73 20 26 20 61 50 72 61 67  b->flags & aPrag
b080: 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72  maNames[mid].iAr
b090: 67 29 21 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  g)!=0 );.    }el
b0a0: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 61  se{.      int ma
b0b0: 73 6b 20 3d 20 61 50 72 61 67 6d 61 4e 61 6d 65  sk = aPragmaName
b0c0: 73 5b 6d 69 64 5d 2e 69 41 72 67 3b 20 20 20 20  s[mid].iArg;    
b0d0: 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74 73 20  /* Mask of bits 
b0e0: 74 6f 20 73 65 74 20 6f 72 20 63 6c 65 61 72 2e  to set or clear.
b0f0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 64 62   */.      if( db
b100: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
b110: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ){.        /* Fo
b120: 72 65 69 67 6e 20 6b 65 79 20 73 75 70 70 6f 72  reign key suppor
b130: 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e 61  t may not be ena
b140: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
b150: 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20   while not.     
b160: 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f     ** in auto-co
b170: 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20  mmit mode.  */. 
b180: 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e         mask &= ~
b190: 28 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b  (SQLITE_ForeignK
b1a0: 65 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  eys);.      }.. 
b1b0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
b1c0: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
b1d0: 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20  t, 0) ){.       
b1e0: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61   db->flags |= ma
b1f0: 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  sk;.      }else{
b200: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61  .        db->fla
b210: 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20  gs &= ~mask;.   
b220: 20 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53       if( mask==S
b230: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29  QLITE_DeferFKs )
b240: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
b250: 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20  mCons = 0;.     
b260: 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e   }..      /* Man
b270: 79 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70 72  y of the flag-pr
b280: 61 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68 65  agmas modify the
b290: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20   code generated 
b2a0: 62 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20 20  by the SQL .    
b2b0: 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65    ** compiler (e
b2c0: 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  g. count_changes
b2d0: 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70 63  ). So add an opc
b2e0: 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20 61 6c  ode to expire al
b2f0: 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69  l.      ** compi
b300: 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  led SQL statemen
b310: 74 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79 69  ts after modifyi
b320: 6e 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c 75  ng a pragma valu
b330: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
b340: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b350: 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70 69 72 65  Op2(v, OP_Expire
b360: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  , 0, 0);.      s
b370: 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28  etAllPagerFlags(
b380: 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  db);.    }.    b
b390: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
b3a0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
b3b0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  FLAG_PRAGMAS */.
b3c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b3d0: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47  OMIT_SCHEMA_PRAG
b3e0: 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  MAS.  /*.  **   
b3f0: 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
b400: 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a  o(<table>).  **.
b410: 20 20 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 69    ** Return a si
b420: 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20 65 61 63  ngle row for eac
b430: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
b440: 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 54 68 65  named table. The
b450: 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a   columns of.  **
b460: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 64 61   the returned da
b470: 74 61 20 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a  ta set are:.  **
b480: 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20 20 20 20  .  ** cid:      
b490: 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d    Column id (num
b4a0: 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  bered from left 
b4b0: 74 6f 20 72 69 67 68 74 2c 20 73 74 61 72 74 69  to right, starti
b4c0: 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61  ng at 0).  ** na
b4d0: 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  me:       Column
b4e0: 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a   name.  ** type:
b4f0: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65         Column de
b500: 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a  claration type..
b510: 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20    ** notnull:   
b520: 20 54 72 75 65 20 69 66 20 27 4e 4f 54 20 4e 55   True if 'NOT NU
b530: 4c 4c 27 20 69 73 20 70 61 72 74 20 6f 66 20 63  LL' is part of c
b540: 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f  olumn declaratio
b550: 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75  n.  ** dflt_valu
b560: 65 3a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  e: The default v
b570: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c  alue for the col
b580: 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a  umn, if any..  *
b590: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
b5a0: 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69 66 28  _TABLE_INFO: if(
b5b0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 54   zRight ){.    T
b5c0: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
b5d0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69  pTab = sqlite3Fi
b5e0: 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67  ndTable(db, zRig
b5f0: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
b600: 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20  ( pTab ){.      
b610: 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20  int i, k;.      
b620: 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b  int nHidden = 0;
b630: 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70  .      Column *p
b640: 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e 64 65 78  Col;.      Index
b650: 20 2a 70 50 6b 3b 0a 20 20 20 20 20 20 66 6f 72   *pPk;.      for
b660: 28 70 50 6b 3d 70 54 61 62 2d 3e 70 49 6e 64 65  (pPk=pTab->pInde
b670: 78 3b 20 70 50 6b 20 26 26 20 70 50 6b 2d 3e 61  x; pPk && pPk->a
b680: 75 74 6f 49 6e 64 65 78 21 3d 32 3b 20 70 50 6b  utoIndex!=2; pPk
b690: 3d 70 50 6b 2d 3e 70 4e 65 78 74 29 7b 7d 0a 20  =pPk->pNext){}. 
b6a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b6b0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29  SetNumCols(v, 6)
b6c0: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
b6d0: 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20  nMem = 6;.      
b6e0: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
b6f0: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
b700: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
b710: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
b720: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
b730: 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20 53 51 4c  NAME, "cid", SQL
b740: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
b750: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
b760: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
b770: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
b780: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
b790: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
b7a0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
b7b0: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
b7c0: 41 4d 45 2c 20 22 74 79 70 65 22 2c 20 53 51 4c  AME, "type", SQL
b7d0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
b7e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
b7f0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43  tColName(v, 3, C
b800: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 6f  OLNAME_NAME, "no
b810: 74 6e 75 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53  tnull", SQLITE_S
b820: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
b830: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
b840: 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d  ame(v, 4, COLNAM
b850: 45 5f 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76 61  E_NAME, "dflt_va
b860: 6c 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  lue", SQLITE_STA
b870: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
b880: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
b890: 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 5, COLNAME_
b8a0: 4e 41 4d 45 2c 20 22 70 6b 22 2c 20 53 51 4c 49  NAME, "pk", SQLI
b8b0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
b8c0: 20 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74    sqlite3ViewGet
b8d0: 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72  ColumnNames(pPar
b8e0: 73 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20  se, pTab);.     
b8f0: 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70   for(i=0, pCol=p
b900: 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61  Tab->aCol; i<pTa
b910: 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43  b->nCol; i++, pC
b920: 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69  ol++){.        i
b930: 66 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  f( IsHiddenColum
b940: 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20  n(pCol) ){.     
b950: 20 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a       nHidden++;.
b960: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
b970: 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ue;.        }.  
b980: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b990: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
b9a0: 74 65 67 65 72 2c 20 69 2d 6e 48 69 64 64 65 6e  teger, i-nHidden
b9b0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 1);.        sq
b9c0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
b9d0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
b9e0: 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e  , 2, 0, pCol->zN
b9f0: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ame, 0);.       
ba00: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ba10: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
ba20: 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20  , 0, 3, 0,.     
ba30: 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70        pCol->zTyp
ba40: 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20  e ? pCol->zType 
ba50: 3a 20 22 22 2c 20 30 29 3b 0a 20 20 20 20 20 20  : "", 0);.      
ba60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ba70: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
ba80: 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c  r, (pCol->notNul
ba90: 6c 20 3f 20 31 20 3a 20 30 29 2c 20 34 29 3b 0a  l ? 1 : 0), 4);.
baa0: 20 20 20 20 20 20 20 20 69 66 28 20 70 43 6f 6c          if( pCol
bab0: 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20 20 20 20 20  ->zDflt ){.     
bac0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bad0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
bae0: 69 6e 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20 28  ing8, 0, 5, 0, (
baf0: 63 68 61 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66 6c  char*)pCol->zDfl
bb00: 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d  t, 0);.        }
bb10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
bb20: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
bb30: 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c  2(v, OP_Null, 0,
bb40: 20 35 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   5);.        }. 
bb50: 20 20 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c         if( (pCol
bb60: 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
bb70: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30  FLAG_PRIMKEY)==0
bb80: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20   ){.          k 
bb90: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 0;.        }el
bba0: 73 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b  se if( pPk==0 ){
bbb0: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31  .          k = 1
bbc0: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
bbd0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b  .          for(k
bbe0: 3d 31 3b 20 41 4c 57 41 59 53 28 6b 3c 3d 70 54  =1; ALWAYS(k<=pT
bbf0: 61 62 2d 3e 6e 43 6f 6c 29 20 26 26 20 70 50 6b  ab->nCol) && pPk
bc00: 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21  ->aiColumn[k-1]!
bc10: 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20  =i; k++){}.     
bc20: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
bc30: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
bc40: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6b 2c  , OP_Integer, k,
bc50: 20 36 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   6);.        sql
bc60: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
bc70: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
bc80: 31 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 6);.      }. 
bc90: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
bca0: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
bcb0: 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66  p_INDEX_INFO: if
bcc0: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
bcd0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
bce0: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
bcf0: 20 20 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33    pIdx = sqlite3
bd00: 46 69 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52  FindIndex(db, zR
bd10: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
bd20: 69 66 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20  if( pIdx ){.    
bd30: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 70    int i;.      p
bd40: 54 61 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62  Tab = pIdx->pTab
bd50: 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  le;.      sqlite
bd60: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
bd70: 76 2c 20 33 29 3b 0a 20 20 20 20 20 20 70 50 61  v, 3);.      pPa
bd80: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20  rse->nMem = 3;. 
bd90: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
bda0: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
bdb0: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
bdc0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
bdd0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
bde0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 6e  NAME_NAME, "seqn
bdf0: 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  o", SQLITE_STATI
be00: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
be10: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
be20: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
be30: 4d 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54  ME, "cid", SQLIT
be40: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
be50: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
be60: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
be70: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65  NAME_NAME, "name
be80: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
be90: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
bea0: 3b 20 69 3c 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d  ; i<pIdx->nColum
beb0: 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  n; i++){.       
bec0: 20 69 6e 74 20 63 6e 75 6d 20 3d 20 70 49 64 78   int cnum = pIdx
bed0: 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20  ->aiColumn[i];. 
bee0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
bef0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
bf00: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
bf10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
bf20: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
bf30: 6e 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20 32 29  nteger, cnum, 2)
bf40: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
bf50: 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 3e 63 6e 75  ( pTab->nCol>cnu
bf60: 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  m );.        sql
bf70: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
bf80: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
bf90: 20 33 2c 20 30 2c 20 70 54 61 62 2d 3e 61 43 6f   3, 0, pTab->aCo
bfa0: 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 30  l[cnum].zName, 0
bfb0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
bfc0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
bfd0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
bfe0: 20 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   3);.      }.   
bff0: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
c000: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
c010: 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69 66 28 20  INDEX_LIST: if( 
c020: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e  zRight ){.    In
c030: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54  dex *pIdx;.    T
c040: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
c050: 69 6e 74 20 69 3b 0a 20 20 20 20 70 54 61 62 20  int i;.    pTab 
c060: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
c070: 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  le(db, zRight, z
c080: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61  Db);.    if( pTa
c090: 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73  b ){.      v = s
c0a0: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
c0b0: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  arse);.      sql
c0c0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
c0d0: 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20 20 20 20  ls(v, 4);.      
c0e0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34  pParse->nMem = 4
c0f0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43  ;.      sqlite3C
c100: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
c110: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
c120: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c130: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
c140: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
c150: 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  eq", SQLITE_STAT
c160: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
c170: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c180: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
c190: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
c1a0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c1b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c1c0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
c1d0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 75 6e  OLNAME_NAME, "un
c1e0: 69 71 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  ique", SQLITE_ST
c1f0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
c200: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c210: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
c220: 5f 4e 41 4d 45 2c 20 22 61 76 67 72 6f 77 73 69  _NAME, "avgrowsi
c230: 7a 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ze", SQLITE_STAT
c240: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
c250: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c260: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 31  OP_Integer, 0, 1
c270: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c280: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c290: 5f 4e 75 6c 6c 2c 20 30 2c 20 32 29 3b 0a 20 20  _Null, 0, 2);.  
c2a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c2b0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
c2c0: 67 65 72 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20  ger, 1, 3);.    
c2d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c2e0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c2f0: 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r,.             
c300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
c310: 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  nt)sqlite3LogEst
c320: 54 6f 49 6e 74 28 70 54 61 62 2d 3e 73 7a 54 61  ToInt(pTab->szTa
c330: 62 52 6f 77 29 2c 20 34 29 3b 0a 20 20 20 20 20  bRow), 4);.     
c340: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c350: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
c360: 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20  ow, 1, 4);.     
c370: 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e   for(pIdx=pTab->
c380: 70 49 6e 64 65 78 2c 20 69 3d 31 3b 20 70 49 64  pIndex, i=1; pId
c390: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
c3a0: 65 78 74 2c 20 69 2b 2b 29 7b 0a 20 20 20 20 20  ext, i++){.     
c3b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c3c0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c3d0: 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20  er, i, 1);.     
c3e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c3f0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
c400: 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 49 64  g8, 0, 2, 0, pId
c410: 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  x->zName, 0);.  
c420: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c430: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c440: 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 6f 6e 45  teger, pIdx->onE
c450: 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 2c 20 33  rror!=OE_None, 3
c460: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c470: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c480: 4f 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20  OP_Integer,.    
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71           (int)sq
c4b0: 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
c4c0: 28 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77 29  (pIdx->szIdxRow)
c4d0: 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 4);.        sq
c4e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c4f0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
c500: 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 4);.      }.
c510: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
c520: 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54  k;..  case PragT
c530: 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54  yp_DATABASE_LIST
c540: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20  : {.    int i;. 
c550: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c560: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a  tNumCols(v, 3);.
c570: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
c580: 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 3;.    sqlite
c590: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
c5a0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
c5b0: 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54  ME, "seq", SQLIT
c5c0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
c5d0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
c5e0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
c5f0: 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c  ME_NAME, "name",
c600: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
c610: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c620: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
c630: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
c640: 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  file", SQLITE_ST
c650: 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69  ATIC);.    for(i
c660: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
c670: 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64  ++){.      if( d
c680: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30  b->aDb[i].pBt==0
c690: 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
c6a0: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
c6b0: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29  Db[i].zName!=0 )
c6c0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c6d0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c6e0: 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a  Integer, i, 1);.
c6f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c700: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
c710: 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
c720: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
c730: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
c740: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
c750: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
c760: 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  3, 0,.          
c770: 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74   sqlite3BtreeGet
c780: 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62  Filename(db->aDb
c790: 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20 20  [i].pBt), 0);.  
c7a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c7b0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
c7c0: 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20  ltRow, 1, 3);.  
c7d0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
c7e0: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
c7f0: 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a  _COLLATION_LIST:
c800: 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30   {.    int i = 0
c810: 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  ;.    HashElem *
c820: 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  p;.    sqlite3Vd
c830: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
c840: 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  2);.    pParse->
c850: 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71  nMem = 2;.    sq
c860: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
c870: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
c880: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53  E_NAME, "seq", S
c890: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c8a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c8b0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
c8c0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
c8d0: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
c8e0: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73  IC);.    for(p=s
c8f0: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
c900: 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70  db->aCollSeq); p
c910: 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; p=sqliteHashNe
c920: 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f  xt(p)){.      Co
c930: 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28  llSeq *pColl = (
c940: 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65  CollSeq *)sqlite
c950: 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20  HashData(p);.   
c960: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c970: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c980: 65 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20 20 20  er, i++, 1);.   
c990: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c9a0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
c9b0: 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f  g8, 0, 2, 0, pCo
c9c0: 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  ll->zName, 0);. 
c9d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c9e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
c9f0: 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20  ultRow, 1, 2);. 
ca00: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
ca10: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
ca20: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
ca30: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
ca40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
ca50: 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73  OREIGN_KEY.  cas
ca60: 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47  e PragTyp_FOREIG
ca70: 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28 20  N_KEY_LIST: if( 
ca80: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46 4b  zRight ){.    FK
ca90: 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62  ey *pFK;.    Tab
caa0: 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54  le *pTab;.    pT
cab0: 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64  ab = sqlite3Find
cac0: 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74  Table(db, zRight
cad0: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , zDb);.    if( 
cae0: 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20  pTab ){.      v 
caf0: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
cb00: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
cb10: 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65  pFK = pTab->pFKe
cb20: 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b  y;.      if( pFK
cb30: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   ){.        int 
cb40: 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20  i = 0; .        
cb50: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
cb60: 6d 43 6f 6c 73 28 76 2c 20 38 29 3b 0a 20 20 20  mCols(v, 8);.   
cb70: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
cb80: 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 73  m = 8;.        s
cb90: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
cba0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
cbb0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
cbc0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
cbd0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
cbe0: 5f 4e 41 4d 45 2c 20 22 69 64 22 2c 20 53 51 4c  _NAME, "id", SQL
cbf0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
cc00: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cc10: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
cc20: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
cc30: 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  seq", SQLITE_STA
cc40: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
cc50: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
cc60: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
cc70: 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c  E_NAME, "table",
cc80: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
cc90: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
cca0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
ccb0: 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 3, COLNAME_NAM
ccc0: 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49 54  E, "from", SQLIT
ccd0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
cce0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
ccf0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43  tColName(v, 4, C
cd00: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 6f  OLNAME_NAME, "to
cd10: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
cd20: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
cd30: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
cd40: 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 5, COLNAME_N
cd50: 41 4d 45 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22  AME, "on_update"
cd60: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
cd70: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
cd80: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
cd90: 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 6, COLNAME_NA
cda0: 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c  ME, "on_delete",
cdb0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
cdc0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
cdd0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
cde0: 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 7, COLNAME_NAM
cdf0: 45 2c 20 22 6d 61 74 63 68 22 2c 20 53 51 4c 49  E, "match", SQLI
ce00: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
ce10: 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a      while(pFK){.
ce20: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b            int j;
ce30: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a  .          for(j
ce40: 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b  =0; j<pFK->nCol;
ce50: 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20   j++){.         
ce60: 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d 20     char *zCol = 
ce70: 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f  pFK->aCol[j].zCo
ce80: 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  l;.            c
ce90: 68 61 72 20 2a 7a 4f 6e 44 65 6c 65 74 65 20 3d  har *zOnDelete =
cea0: 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e   (char *)actionN
ceb0: 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e  ame(pFK->aAction
cec0: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20  [0]);.          
ced0: 20 20 63 68 61 72 20 2a 7a 4f 6e 55 70 64 61 74    char *zOnUpdat
cee0: 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69  e = (char *)acti
cef0: 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74  onName(pFK->aAct
cf00: 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20  ion[1]);.       
cf10: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cf20: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
cf30: 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20  eger, i, 1);.   
cf40: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
cf50: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
cf60: 5f 49 6e 74 65 67 65 72 2c 20 6a 2c 20 32 29 3b  _Integer, j, 2);
cf70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            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 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c   3, 0, pFK->zTo,
cfb0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
cfc0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
cfd0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
cfe0: 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20  , 0, 4, 0,.     
cff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d000: 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61           pTab->a
d010: 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  Col[pFK->aCol[j]
d020: 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30  .iFrom].zName, 0
d030: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
d040: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
d050: 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53 74  (v, zCol ? OP_St
d060: 72 69 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c 2c  ring8 : OP_Null,
d070: 20 30 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c 20   0, 5, 0, zCol, 
d080: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
d090: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d0a0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
d0b0: 20 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55 70 64   0, 6, 0, zOnUpd
d0c0: 61 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ate, 0);.       
d0d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d0e0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
d0f0: 69 6e 67 38 2c 20 30 2c 20 37 2c 20 30 2c 20 7a  ing8, 0, 7, 0, z
d100: 4f 6e 44 65 6c 65 74 65 2c 20 30 29 3b 0a 20 20  OnDelete, 0);.  
d110: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d120: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
d130: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 38 2c  P_String8, 0, 8,
d140: 20 30 2c 20 22 4e 4f 4e 45 22 2c 20 30 29 3b 0a   0, "NONE", 0);.
d150: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d160: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d170: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
d180: 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 8);.          
d190: 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b  }.          ++i;
d1a0: 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d  .          pFK =
d1b0: 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b   pFK->pNextFrom;
d1c0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
d1d0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
d1e0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
d1f0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
d200: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
d210: 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  ) */..#ifndef SQ
d220: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
d230: 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51  N_KEY.#ifndef SQ
d240: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
d250: 52 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  R.  case PragTyp
d260: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45  _FOREIGN_KEY_CHE
d270: 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a  CK: {.    FKey *
d280: 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20  pFK;            
d290: 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65   /* A foreign ke
d2a0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  y constraint */.
d2b0: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
d2c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68             /* Ch
d2d0: 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  ild table contai
d2e0: 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b  n "REFERENCES" k
d2f0: 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61  eyword */.    Ta
d300: 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20  ble *pParent;   
d310: 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74       /* Parent t
d320: 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20  able that child 
d330: 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20  points to */.   
d340: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20   Index *pIdx;   
d350: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
d360: 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74   in the parent t
d370: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
d380: 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
d390: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
d3a0: 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79  er:  Foreign key
d3b0: 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62   number for pTab
d3c0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20   */.    int j;  
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
d3e0: 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20  * Loop counter: 
d3f0: 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f   Field of the fo
d400: 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20  reign key */.   
d410: 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20   HashElem *k;   
d420: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
d430: 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74  counter:  Next t
d440: 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a  able in schema *
d450: 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20  /.    int x;    
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
d470: 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20  result variable 
d480: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65  */.    int regRe
d490: 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  sult;         /*
d4a0: 20 33 20 72 65 67 69 73 74 65 72 73 20 74 6f 20   3 registers to 
d4b0: 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f  hold a result ro
d4c0: 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  w */.    int reg
d4d0: 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  Key;            
d4e0: 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 68  /* Register to h
d4f0: 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63  old key for chec
d500: 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20  king the FK */. 
d510: 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20     int regRow;  
d520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
d530: 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61  isters to hold a
d540: 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a   row from pTab *
d550: 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f  /.    int addrTo
d560: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
d570: 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68  Top of a loop ch
d580: 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b  ecking foreign k
d590: 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  eys */.    int a
d5a0: 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20  ddrOk;          
d5b0: 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69    /* Jump here i
d5c0: 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20  f the key is OK 
d5d0: 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f  */.    int *aiCo
d5e0: 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ls;           /*
d5f0: 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74   child to parent
d600: 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20   column mapping 
d610: 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c  */..    regResul
d620: 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  t = pParse->nMem
d630: 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  +1;.    pParse->
d640: 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72  nMem += 4;.    r
d650: 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65  egKey = ++pParse
d660: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52  ->nMem;.    regR
d670: 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  ow = ++pParse->n
d680: 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c  Mem;.    v = sql
d690: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
d6a0: 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  se);.    sqlite3
d6b0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
d6c0: 2c 20 34 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 4);.    sqlite
d6d0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d6e0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
d6f0: 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c  ME, "table", SQL
d700: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d710: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
d720: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
d730: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f 77 69  NAME_NAME, "rowi
d740: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
d750: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
d760: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
d770: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
d780: 2c 20 22 70 61 72 65 6e 74 22 2c 20 53 51 4c 49  , "parent", SQLI
d790: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d7a0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d7b0: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
d7c0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b 69 64 22  AME_NAME, "fkid"
d7d0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d7e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64  ;.    sqlite3Cod
d7f0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
d800: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
d810: 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46 69  k = sqliteHashFi
d820: 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44 62  rst(&db->aDb[iDb
d830: 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61  ].pSchema->tblHa
d840: 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20  sh);.    while( 
d850: 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a  k ){.      if( z
d860: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 20  Right ){.       
d870: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 4c   pTab = sqlite3L
d880: 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72 73  ocateTable(pPars
d890: 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e, 0, zRight, zD
d8a0: 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20  b);.        k = 
d8b0: 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  0;.      }else{.
d8c0: 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 28          pTab = (
d8d0: 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61 73  Table*)sqliteHas
d8e0: 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20 20  hData(k);.      
d8f0: 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68    k = sqliteHash
d900: 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d  Next(k);.      }
d910: 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62 3d  .      if( pTab=
d920: 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65  =0 || pTab->pFKe
d930: 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  y==0 ) continue;
d940: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 61  .      sqlite3Ta
d950: 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20  bleLock(pParse, 
d960: 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c  iDb, pTab->tnum,
d970: 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29   0, pTab->zName)
d980: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62  ;.      if( pTab
d990: 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50  ->nCol+regRow>pP
d9a0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61  arse->nMem ) pPa
d9b0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62  rse->nMem = pTab
d9c0: 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b  ->nCol + regRow;
d9d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70  .      sqlite3Op
d9e0: 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20  enTable(pParse, 
d9f0: 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f 50  0, iDb, pTab, OP
da00: 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20  _OpenRead);.    
da10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
da20: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
da30: 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2c  8, 0, regResult,
da40: 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c   0, pTab->zName,
da50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da60: 20 20 20 20 20 20 20 20 20 50 34 5f 54 52 41 4e           P4_TRAN
da70: 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 66 6f  SIENT);.      fo
da80: 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d  r(i=1, pFK=pTab-
da90: 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b  >pFKey; pFK; i++
daa0: 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74  , pFK=pFK->pNext
dab0: 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70  From){.        p
dac0: 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33  Parent = sqlite3
dad0: 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72  LocateTable(pPar
dae0: 73 65 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c  se, 0, pFK->zTo,
daf0: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 69   zDb);.        i
db00: 66 28 20 70 50 61 72 65 6e 74 3d 3d 30 20 29 20  f( pParent==0 ) 
db10: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 70  break;.        p
db20: 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  Idx = 0;.       
db30: 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
db40: 6b 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70  k(pParse, iDb, p
db50: 50 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c  Parent->tnum, 0,
db60: 20 70 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29   pParent->zName)
db70: 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20 73 71  ;.        x = sq
db80: 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
db90: 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65  ex(pParse, pPare
dba0: 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20  nt, pFK, &pIdx, 
dbb0: 30 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  0);.        if( 
dbc0: 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  x==0 ){.        
dbd0: 20 20 69 66 28 20 70 49 64 78 3d 3d 30 20 29 7b    if( pIdx==0 ){
dbe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
dbf0: 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50  ite3OpenTable(pP
dc00: 61 72 73 65 2c 20 69 2c 20 69 44 62 2c 20 70 50  arse, i, iDb, pP
dc10: 61 72 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65  arent, OP_OpenRe
dc20: 61 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ad);.          }
dc30: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
dc40: 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 20    KeyInfo *pKey 
dc50: 3d 20 73 71 6c 69 74 65 33 49 6e 64 65 78 4b 65  = sqlite3IndexKe
dc60: 79 69 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49  yinfo(pParse, pI
dc70: 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  dx);.           
dc80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
dc90: 70 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  p3(v, OP_OpenRea
dca0: 64 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d  d, i, pIdx->tnum
dcb0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , iDb);.        
dcc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
dcd0: 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20 28  hangeP4(v, -1, (
dce0: 63 68 61 72 2a 29 70 4b 65 79 2c 20 50 34 5f 4b  char*)pKey, P4_K
dcf0: 45 59 49 4e 46 4f 5f 48 41 4e 44 4f 46 46 29 3b  EYINFO_HANDOFF);
dd00: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
dd10: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
dd20: 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20        k = 0;.   
dd30: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
dd40: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
dd50: 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29 20        if( pFK ) 
dd60: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28  break;.      if(
dd70: 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20   pParse->nTab<i 
dd80: 29 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d  ) pParse->nTab =
dd90: 20 69 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f   i;.      addrTo
dda0: 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  p = sqlite3VdbeA
ddb0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69  ddOp1(v, OP_Rewi
ddc0: 6e 64 2c 20 30 29 3b 0a 20 20 20 20 20 20 66 6f  nd, 0);.      fo
ddd0: 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d  r(i=1, pFK=pTab-
dde0: 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b  >pFKey; pFK; i++
ddf0: 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74  , pFK=pFK->pNext
de00: 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70  From){.        p
de10: 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33  Parent = sqlite3
de20: 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72  LocateTable(pPar
de30: 73 65 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c  se, 0, pFK->zTo,
de40: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 61   zDb);.        a
de50: 73 73 65 72 74 28 20 70 50 61 72 65 6e 74 21 3d  ssert( pParent!=
de60: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64  0 );.        pId
de70: 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61  x = 0;.        a
de80: 69 43 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20  iCols = 0;.     
de90: 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b     x = sqlite3Fk
dea0: 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72  LocateIndex(pPar
deb0: 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b  se, pParent, pFK
dec0: 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c 73  , &pIdx, &aiCols
ded0: 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
dee0: 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20 20  t( x==0 );.     
def0: 20 20 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69     addrOk = sqli
df00: 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c  te3VdbeMakeLabel
df10: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  (v);.        if(
df20: 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20   pIdx==0 ){.    
df30: 20 20 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d        int iKey =
df40: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46   pFK->aCol[0].iF
df50: 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61  rom;.          a
df60: 73 73 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26  ssert( iKey>=0 &
df70: 26 20 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f  & iKey<pTab->nCo
df80: 6c 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  l );.          i
df90: 66 28 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69  f( iKey!=pTab->i
dfa0: 50 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  PKey ){.        
dfb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
dfc0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75  ddOp3(v, OP_Colu
dfd0: 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67  mn, 0, iKey, reg
dfe0: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
dff0: 20 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44    sqlite3ColumnD
e000: 65 66 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20  efault(v, pTab, 
e010: 69 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20  iKey, regRow);. 
e020: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e030: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
e040: 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f  OP_IsNull, regRo
e050: 77 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20  w, addrOk);.    
e060: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e070: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
e080: 4d 75 73 74 42 65 49 6e 74 2c 20 72 65 67 52 6f  MustBeInt, regRo
e090: 77 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  w,.             
e0a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72    sqlite3VdbeCur
e0b0: 72 65 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 0a  rentAddr(v)+3);.
e0c0: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
e0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e0e0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
e0f0: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
e100: 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20  egRow);.        
e110: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71    }.          sq
e120: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
e130: 76 2c 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c  v, OP_NotExists,
e140: 20 69 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a   i, 0, regRow);.
e150: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e160: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
e170: 50 5f 47 6f 74 6f 2c 20 30 2c 20 61 64 64 72 4f  P_Goto, 0, addrO
e180: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  k);.          sq
e190: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
e1a0: 65 28 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65  e(v, sqlite3Vdbe
e1b0: 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32  CurrentAddr(v)-2
e1c0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
e1d0: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
e1e0: 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c  j=0; j<pFK->nCol
e1f0: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
e200: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43      sqlite3ExprC
e210: 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
e220: 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a  ble(v, pTab, 0,.
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e240: 20 20 20 20 20 20 20 20 20 20 20 20 61 69 43 6f              aiCo
e250: 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a  ls ? aiCols[j] :
e260: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46   pFK->aCol[0].iF
e270: 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a  rom, regRow+j);.
e280: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e290: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
e2a0: 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52   OP_IsNull, regR
e2b0: 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  ow+j, addrOk);. 
e2c0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
e2d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e2e0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 61 6b  AddOp3(v, OP_Mak
e2f0: 65 52 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c  eRecord, regRow,
e300: 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b   pFK->nCol, regK
e310: 65 79 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  ey);.          s
e320: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
e330: 50 34 28 76 2c 20 2d 31 2c 0a 20 20 20 20 20 20  P4(v, -1,.      
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
e350: 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74  ite3IndexAffinit
e360: 79 53 74 72 28 76 2c 70 49 64 78 29 2c 20 50 34  yStr(v,pIdx), P4
e370: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
e380: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e390: 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f  beAddOp4Int(v, O
e3a0: 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72  P_Found, i, addr
e3b0: 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a  Ok, regKey, 0);.
e3c0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e3d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e3e0: 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c  Op2(v, OP_Rowid,
e3f0: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 31 29   0, regResult+1)
e400: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
e410: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
e420: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 72 65  P_String8, 0, re
e430: 67 52 65 73 75 6c 74 2b 32 2c 20 30 2c 20 0a 20  gResult+2, 0, . 
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e450: 20 20 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a 54           pFK->zT
e460: 6f 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29  o, P4_TRANSIENT)
e470: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
e480: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
e490: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d 31 2c 20  P_Integer, i-1, 
e4a0: 72 65 67 52 65 73 75 6c 74 2b 33 29 3b 0a 20 20  regResult+3);.  
e4b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e4c0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
e4d0: 73 75 6c 74 52 6f 77 2c 20 72 65 67 52 65 73 75  sultRow, regResu
e4e0: 6c 74 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20  lt, 4);.        
e4f0: 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c  sqlite3VdbeResol
e500: 76 65 4c 61 62 65 6c 28 76 2c 20 61 64 64 72 4f  veLabel(v, addrO
e510: 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  k);.        sqli
e520: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61 69  te3DbFree(db, ai
e530: 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Cols);.      }. 
e540: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e550: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78  AddOp2(v, OP_Nex
e560: 74 2c 20 30 2c 20 61 64 64 72 54 6f 70 2b 31 29  t, 0, addrTop+1)
e570: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
e580: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
e590: 64 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20  ddrTop);.    }. 
e5a0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
e5b0: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
e5c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
e5d0: 45 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ER) */.#endif /*
e5e0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
e5f0: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
e600: 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e  Y) */..#ifndef N
e610: 44 45 42 55 47 0a 20 20 63 61 73 65 20 50 72 61  DEBUG.  case Pra
e620: 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41 43  gTyp_PARSER_TRAC
e630: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  E: {.    if( zRi
e640: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ght ){.      if(
e650: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
e660: 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b  an(zRight, 0) ){
e670: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
e680: 50 61 72 73 65 72 54 72 61 63 65 28 73 74 64 65  ParserTrace(stde
e690: 72 72 2c 20 22 70 61 72 73 65 72 3a 20 22 29 3b  rr, "parser: ");
e6a0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e6b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72        sqlite3Par
e6c0: 73 65 72 54 72 61 63 65 28 30 2c 20 30 29 3b 0a  serTrace(0, 0);.
e6d0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
e6e0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
e6f0: 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c  f..  /* Reinstal
e700: 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e 64 20 47  l the LIKE and G
e710: 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20  LOB functions.  
e720: 54 68 65 20 76 61 72 69 61 6e 74 20 6f 66 20 4c  The variant of L
e730: 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20 77 69  IKE.  ** used wi
e740: 6c 6c 20 62 65 20 63 61 73 65 20 73 65 6e 73 69  ll be case sensi
e750: 74 69 76 65 20 6f 72 20 6e 6f 74 20 64 65 70 65  tive or not depe
e760: 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 52 48 53  nding on the RHS
e770: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
e780: 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49  agTyp_CASE_SENSI
e790: 54 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20  TIVE_LIKE: {.   
e7a0: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
e7b0: 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 67 69       sqlite3Regi
e7c0: 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  sterLikeFunction
e7d0: 73 28 64 62 2c 20 73 71 6c 69 74 65 33 47 65 74  s(db, sqlite3Get
e7e0: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
e7f0: 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  0));.    }.  }. 
e800: 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64 65 66   break;..#ifndef
e810: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
e820: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
e830: 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  X.# define SQLIT
e840: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
e850: 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a  K_ERROR_MAX 100.
e860: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
e870: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
e880: 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20 2f 2a  GRITY_CHECK.  /*
e890: 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b 5f 63   Pragma "quick_c
e8a0: 68 65 63 6b 22 20 69 73 20 72 65 64 75 63 65 64  heck" is reduced
e8b0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20 20 2a   version of .  *
e8c0: 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  * integrity_chec
e8d0: 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20 64 65  k designed to de
e8e0: 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61 62 61  tect most databa
e8f0: 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a 20 20  se corruption.  
e900: 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73 74 20  ** without most 
e910: 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61 64 20  of the overhead 
e920: 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65 67 72  of a full integr
e930: 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a  ity-check..  */.
e940: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49    case PragTyp_I
e950: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 3a 20  NTEGRITY_CHECK: 
e960: 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20  {.    int i, j, 
e970: 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20  addr, mxErr;..  
e980: 20 20 2f 2a 20 43 6f 64 65 20 74 68 61 74 20 61    /* Code that a
e990: 70 70 65 61 72 73 20 61 74 20 74 68 65 20 65 6e  ppears at the en
e9a0: 64 20 6f 66 20 74 68 65 20 69 6e 74 65 67 72 69  d of the integri
e9b0: 74 79 20 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f  ty check.  If no
e9c0: 20 65 72 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65   error.    ** me
e9d0: 73 73 61 67 65 73 20 68 61 76 65 20 62 65 65 6e  ssages have been
e9e0: 20 67 65 6e 65 72 61 74 65 64 2c 20 6f 75 74 70   generated, outp
e9f0: 75 74 20 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73  ut OK.  Otherwis
ea00: 65 20 6f 75 74 70 75 74 20 74 68 65 0a 20 20 20  e output the.   
ea10: 20 2a 2a 20 65 72 72 6f 72 20 6d 65 73 73 61 67   ** error messag
ea20: 65 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 74 61  e.    */.    sta
ea30: 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
ea40: 4c 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d  List endCode[] =
ea50: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 41 64   {.      { OP_Ad
ea60: 64 49 6d 6d 2c 20 20 20 20 20 20 31 2c 20 30 2c  dImm,      1, 0,
ea70: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
ea80: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 0 */.      { O
ea90: 50 5f 49 66 4e 65 67 2c 20 20 20 20 20 20 20 31  P_IfNeg,       1
eaa0: 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
eab0: 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
eac0: 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20   { OP_String8,  
ead0: 20 20 20 30 2c 20 33 2c 20 20 20 20 20 20 20 20     0, 3,        
eae0: 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20  0},    /* 2 */. 
eaf0: 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
eb00: 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20 20 20  Row,   3, 1,    
eb10: 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a      0},.    };..
eb20: 20 20 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20      int isQuick 
eb30: 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  = (sqlite3Tolowe
eb40: 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27  r(zLeft[0])=='q'
eb50: 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  );..    /* If th
eb60: 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  e PRAGMA command
eb70: 20 77 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d   was of the form
eb80: 20 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e   "PRAGMA <db>.in
eb90: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
eba0: 20 20 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20      ** then iDb 
ebb0: 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e  is set to the in
ebc0: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
ebd0: 61 73 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ase identified b
ebe0: 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49  y <db>..    ** I
ebf0: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
ec00: 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61   integrity of da
ec10: 74 61 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20  tabase iDb only 
ec20: 69 73 20 76 65 72 69 66 69 65 64 20 62 79 0a 20  is verified by. 
ec30: 20 20 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63     ** the VDBE c
ec40: 72 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20  reated below..  
ec50: 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65    **.    ** Othe
ec60: 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f  rwise, if the co
ec70: 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79  mmand was simply
ec80: 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   "PRAGMA integri
ec90: 74 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20  ty_check" (or.  
eca0: 20 20 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69    ** "PRAGMA qui
ecb0: 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e  ck_check"), then
ecc0: 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 30   iDb is set to 0
ecd0: 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  . In this case, 
ece0: 73 65 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74  set iDb.    ** t
ecf0: 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e  o -1 here, to in
ed00: 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65 20  dicate that the 
ed10: 56 44 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69  VDBE should veri
ed20: 66 79 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  fy the integrity
ed30: 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61  .    ** of all a
ed40: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
ed50: 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  s.  */.    asser
ed60: 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  t( iDb>=0 );.   
ed70: 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20   assert( iDb==0 
ed80: 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20  || pId2->z );.  
ed90: 20 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30    if( pId2->z==0
eda0: 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20   ) iDb = -1;..  
edb0: 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
edc0: 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
edd0: 20 2a 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e   */.    pParse->
ede0: 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 71  nMem = 6;.    sq
edf0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
ee00: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73  ols(v, 1);.    s
ee10: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
ee20: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
ee30: 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 74 65 67 72  ME_NAME, "integr
ee40: 69 74 79 5f 63 68 65 63 6b 22 2c 20 53 51 4c 49  ity_check", SQLI
ee50: 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20  TE_STATIC);..   
ee60: 20 2f 2a 20 53 65 74 20 74 68 65 20 6d 61 78 69   /* Set the maxi
ee70: 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74 20  mum error count 
ee80: 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d 20 53  */.    mxErr = S
ee90: 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f  QLITE_INTEGRITY_
eea0: 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b  CHECK_ERROR_MAX;
eeb0: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
eec0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
eed0: 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c  GetInt32(zRight,
eee0: 20 26 6d 78 45 72 72 29 3b 0a 20 20 20 20 20 20   &mxErr);.      
eef0: 69 66 28 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a  if( mxErr<=0 ){.
ef00: 20 20 20 20 20 20 20 20 6d 78 45 72 72 20 3d 20          mxErr = 
ef10: 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59  SQLITE_INTEGRITY
ef20: 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58  _CHECK_ERROR_MAX
ef30: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
ef40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ef50: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
ef60: 67 65 72 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20  ger, mxErr, 1); 
ef70: 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73   /* reg[1] holds
ef80: 20 65 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a   errors left */.
ef90: 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e  .    /* Do an in
efa0: 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e  tegrity check on
efb0: 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 66   each database f
efc0: 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69  ile */.    for(i
efd0: 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
efe0: 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45  ++){.      HashE
eff0: 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20 48 61  lem *x;.      Ha
f000: 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20  sh *pTbls;.     
f010: 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20   int cnt = 0;.. 
f020: 20 20 20 20 20 69 66 28 20 4f 4d 49 54 5f 54 45       if( OMIT_TE
f030: 4d 50 44 42 20 26 26 20 69 3d 3d 31 20 29 20 63  MPDB && i==1 ) c
f040: 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69  ontinue;.      i
f050: 66 28 20 69 44 62 3e 3d 30 20 26 26 20 69 21 3d  f( iDb>=0 && i!=
f060: 69 44 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  iDb ) continue;.
f070: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f  .      sqlite3Co
f080: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
f090: 50 61 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20  Parse, i);.     
f0a0: 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
f0b0: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
f0c0: 49 66 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61  IfPos, 1); /* Ha
f0d0: 6c 74 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72  lt if out of err
f0e0: 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  ors */.      sql
f0f0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
f100: 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29  , OP_Halt, 0, 0)
f110: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
f120: 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
f130: 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20  ddr);..      /* 
f140: 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20  Do an integrity 
f150: 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54  check of the B-T
f160: 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20  ree.      **.   
f170: 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20 66     ** Begin by f
f180: 69 6c 6c 69 6e 67 20 72 65 67 69 73 74 65 72 73  illing registers
f190: 20 32 2c 20 33 2c 20 2e 2e 2e 20 77 69 74 68 20   2, 3, ... with 
f1a0: 74 68 65 20 72 6f 6f 74 20 70 61 67 65 73 20 6e  the root pages n
f1b0: 75 6d 62 65 72 73 0a 20 20 20 20 20 20 2a 2a 20  umbers.      ** 
f1c0: 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73 20 61  for all tables a
f1d0: 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68  nd indices in th
f1e0: 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  e database..    
f1f0: 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
f200: 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
f210: 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 2c  MutexHeld(db, i,
f220: 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70 54 62   0) );.      pTb
f230: 6c 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 5d  ls = &db->aDb[i]
f240: 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73  .pSchema->tblHas
f250: 68 3b 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73  h;.      for(x=s
f260: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70  qliteHashFirst(p
f270: 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69  Tbls); x; x=sqli
f280: 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a  teHashNext(x)){.
f290: 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70          Table *p
f2a0: 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68  Tab = sqliteHash
f2b0: 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20  Data(x);.       
f2c0: 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20   Index *pIdx;.  
f2d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f2e0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
f2f0: 74 65 67 65 72 2c 20 70 54 61 62 2d 3e 74 6e 75  teger, pTab->tnu
f300: 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20  m, 2+cnt);.     
f310: 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20     cnt++;.      
f320: 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d    for(pIdx=pTab-
f330: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
f340: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29  Idx=pIdx->pNext)
f350: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
f360: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
f370: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64   OP_Integer, pId
f380: 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b  x->tnum, 2+cnt);
f390: 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b  .          cnt++
f3a0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
f3b0: 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61    }..      /* Ma
f3c0: 6b 65 20 73 75 72 65 20 73 75 66 66 69 63 69 65  ke sure sufficie
f3d0: 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 67  nt number of reg
f3e0: 69 73 74 65 72 73 20 68 61 76 65 20 62 65 65 6e  isters have been
f3f0: 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
f400: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
f410: 20 3d 20 4d 41 58 28 20 70 50 61 72 73 65 2d 3e   = MAX( pParse->
f420: 6e 4d 65 6d 2c 20 63 6e 74 2b 37 20 29 3b 0a 0a  nMem, cnt+7 );..
f430: 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65 20        /* Do the 
f440: 62 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74 79  b-tree integrity
f450: 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20 20   checks */.     
f460: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f470: 70 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72 69  p3(v, OP_Integri
f480: 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31 29  tyCk, 2, cnt, 1)
f490: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
f4a0: 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 28  dbeChangeP5(v, (
f4b0: 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64 64  u8)i);.      add
f4c0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
f4d0: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp1(v, OP_IsNu
f4e0: 6c 6c 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71  ll, 2);.      sq
f4f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
f500: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
f510: 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 3, 0,.        
f520: 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
f530: 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74 61  db, "*** in data
f540: 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20  base %s ***\n", 
f550: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
f560: 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34 5f 44  ),.         P4_D
f570: 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 73  YNAMIC);.      s
f580: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
f590: 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20  (v, OP_Move, 2, 
f5a0: 34 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  4);.      sqlite
f5b0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
f5c0: 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20  P_Concat, 4, 3, 
f5d0: 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2);.      sqlite
f5e0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
f5f0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20  P_ResultRow, 2, 
f600: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
f610: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
f620: 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f   addr);..      /
f630: 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
f640: 74 68 65 20 69 6e 64 69 63 65 73 20 61 72 65 20  the indices are 
f650: 63 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72  constructed corr
f660: 65 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a  ectly..      */.
f670: 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69        for(x=sqli
f680: 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c  teHashFirst(pTbl
f690: 73 29 3b 20 78 20 26 26 20 21 69 73 51 75 69 63  s); x && !isQuic
f6a0: 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e  k; x=sqliteHashN
f6b0: 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20  ext(x)){.       
f6c0: 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73   Table *pTab = s
f6d0: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29  qliteHashData(x)
f6e0: 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20  ;.        Index 
f6f0: 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69  *pIdx;.        i
f700: 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 0a 20 20 20  nt loopTop;..   
f710: 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70       if( pTab->p
f720: 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69  Index==0 ) conti
f730: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 61 64 64  nue;.        add
f740: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
f750: 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp1(v, OP_IfPo
f760: 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20  s, 1);  /* Stop 
f770: 69 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73  if out of errors
f780: 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
f790: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
f7a0: 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b   OP_Halt, 0, 0);
f7b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
f7c0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
f7d0: 61 64 64 72 29 3b 0a 20 20 20 20 20 20 20 20 73  addr);.        s
f7e0: 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43  qlite3ExprCacheC
f7f0: 6c 65 61 72 28 70 50 61 72 73 65 29 3b 0a 20 20  lear(pParse);.  
f800: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
f810: 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73  nTableAndIndices
f820: 28 70 50 61 72 73 65 2c 20 70 54 61 62 2c 20 31  (pParse, pTab, 1
f830: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a  , OP_OpenRead);.
f840: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c          for(j=0,
f850: 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64   pIdx=pTab->pInd
f860: 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  ex; pIdx; pIdx=p
f870: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29  Idx->pNext, j++)
f880: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
f890: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
f8a0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20   OP_Integer, 0, 
f8b0: 37 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65  7+j); /* index e
f8c0: 6e 74 72 69 65 73 20 63 6f 75 6e 74 65 72 20 2a  ntries counter *
f8d0: 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  /.        }.    
f8e0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
f8f0: 20 3d 20 4d 41 58 28 70 50 61 72 73 65 2d 3e 6e   = MAX(pParse->n
f900: 4d 65 6d 2c 20 37 2b 6a 29 3b 0a 20 20 20 20 20  Mem, 7+j);.     
f910: 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c     loopTop = sql
f920: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
f930: 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 31 2c 20  , OP_Rewind, 1, 
f940: 30 29 20 2b 20 31 3b 0a 20 20 20 20 20 20 20 20  0) + 1;.        
f950: 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
f960: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
f970: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
f980: 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
f990: 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d      int jmp2, jm
f9a0: 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e  p3;.          in
f9b0: 74 20 72 31 3b 0a 20 20 20 20 20 20 20 20 20 20  t r1;.          
f9c0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
f9d0: 65 4f 70 4c 69 73 74 20 69 64 78 45 72 72 5b 5d  eOpList idxErr[]
f9e0: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20   = {.           
f9f0: 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20   { OP_AddImm,   
fa00: 20 20 20 31 2c 20 2d 31 2c 20 20 30 7d 2c 0a 20     1, -1,  0},. 
fa10: 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f             { OP_
fa20: 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20  String8,     0, 
fa30: 20 33 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31   3,  0},    /* 1
fa40: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
fa50: 7b 20 4f 50 5f 52 6f 77 69 64 2c 20 20 20 20 20  { OP_Rowid,     
fa60: 20 20 31 2c 20 20 34 2c 20 20 30 7d 2c 0a 20 20    1,  4,  0},.  
fa70: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53            { OP_S
fa80: 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 20  tring8,     0,  
fa90: 35 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20  5,  0},    /* 3 
faa0: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  */.            {
fab0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20 20 20   OP_String8,    
fac0: 20 30 2c 20 20 36 2c 20 20 30 7d 2c 20 20 20 20   0,  6,  0},    
fad0: 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 4 */.        
fae0: 20 20 20 20 7b 20 4f 50 5f 43 6f 6e 63 61 74 2c      { OP_Concat,
faf0: 20 20 20 20 20 20 34 2c 20 20 33 2c 20 20 33 7d        4,  3,  3}
fb00: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 20  ,.            { 
fb10: 4f 50 5f 43 6f 6e 63 61 74 2c 20 20 20 20 20 20  OP_Concat,      
fb20: 35 2c 20 20 33 2c 20 20 33 7d 2c 0a 20 20 20 20  5,  3,  3},.    
fb30: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 43 6f 6e          { OP_Con
fb40: 63 61 74 2c 20 20 20 20 20 20 36 2c 20 20 33 2c  cat,      6,  3,
fb50: 20 20 33 7d 2c 0a 20 20 20 20 20 20 20 20 20 20    3},.          
fb60: 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77    { OP_ResultRow
fb70: 2c 20 20 20 33 2c 20 20 31 2c 20 20 30 7d 2c 0a  ,   3,  1,  0},.
fb80: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50              { OP
fb90: 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c  _IfPos,       1,
fba0: 20 20 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    0,  0},    /* 
fbb0: 39 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  9 */.           
fbc0: 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20   { OP_Halt,     
fbd0: 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 0a 20     0,  0,  0},. 
fbe0: 20 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20           };.    
fbf0: 20 20 20 20 20 20 72 31 20 3d 20 73 71 6c 69 74        r1 = sqlit
fc00: 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b  e3GenerateIndexK
fc10: 65 79 28 70 50 61 72 73 65 2c 20 70 49 64 78 2c  ey(pParse, pIdx,
fc20: 20 31 2c 20 33 2c 20 30 2c 20 26 6a 6d 70 33 29   1, 3, 0, &jmp3)
fc30: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
fc40: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
fc50: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2b 6a 2c   OP_AddImm, 7+j,
fc60: 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65   1);  /* increme
fc70: 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a  nt entry count *
fc80: 2f 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32  /.          jmp2
fc90: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
fca0: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f  dOp4Int(v, OP_Fo
fcb0: 75 6e 64 2c 20 6a 2b 32 2c 20 30 2c 20 72 31 2c  und, j+2, 0, r1,
fcc0: 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 2b 31   pIdx->nColumn+1
fcd0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64 64  );.          add
fce0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
fcf0: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
fd00: 79 53 69 7a 65 28 69 64 78 45 72 72 29 2c 20 69  ySize(idxErr), i
fd10: 64 78 45 72 72 29 3b 0a 20 20 20 20 20 20 20 20  dxErr);.        
fd20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
fd30: 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP4(v, addr+1,
fd40: 20 22 72 6f 77 69 64 20 22 2c 20 50 34 5f 53 54   "rowid ", P4_ST
fd50: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20  ATIC);.         
fd60: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
fd70: 67 65 50 34 28 76 2c 20 61 64 64 72 2b 33 2c 20  geP4(v, addr+3, 
fd80: 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  " missing from i
fd90: 6e 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49  ndex ", P4_STATI
fda0: 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  C);.          sq
fdb0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
fdc0: 34 28 76 2c 20 61 64 64 72 2b 34 2c 20 70 49 64  4(v, addr+4, pId
fdd0: 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41  x->zName, P4_TRA
fde0: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20  NSIENT);.       
fdf0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
fe00: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 2b 39  mpHere(v, addr+9
fe10: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
fe20: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
fe30: 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20  (v, jmp2);.     
fe40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fe50: 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20  ResolveLabel(v, 
fe60: 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d  jmp3);.        }
fe70: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
fe80: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
fe90: 5f 4e 65 78 74 2c 20 31 2c 20 6c 6f 6f 70 54 6f  _Next, 1, loopTo
fea0: 70 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  p);.        sqli
feb0: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
fec0: 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23  v, loopTop-1);.#
fed0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
fee0: 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a 20 20  IT_BTREECOUNT.  
fef0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ff00: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
ff10: 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
ff20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ff30: 20 20 20 20 20 20 22 77 72 6f 6e 67 20 23 20 6f        "wrong # o
ff40: 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69 6e 64  f entries in ind
ff50: 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29  ex ", P4_STATIC)
ff60: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  ;.        for(j=
ff70: 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
ff80: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
ff90: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
ffa0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61 64  +){.          ad
ffb0: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
ffc0: 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a  CurrentAddr(v);.
ffd0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ffe0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
fff0: 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72  P_IfPos, 1, addr
10000 2b 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  +2);.          s
10010 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10020 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20  (v, OP_Halt, 0, 
10030 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  0);.          sq
10040 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10050 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 6a 2b 32  v, OP_Count, j+2
10060 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
10070 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10080 33 28 76 2c 20 4f 50 5f 45 71 2c 20 37 2b 6a 2c  3(v, OP_Eq, 7+j,
10090 20 61 64 64 72 2b 38 2c 20 33 29 3b 0a 20 20 20   addr+8, 3);.   
100a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
100b0 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
100c0 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20  ddImm, 1, -1);. 
100d0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
100e0 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
100f0 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
10100 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20  0, pIdx->zName, 
10110 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  P4_TRANSIENT);. 
10120 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
10130 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
10140 5f 43 6f 6e 63 61 74 2c 20 33 2c 20 32 2c 20 37  _Concat, 3, 2, 7
10150 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10160 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10170 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
10180 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 7d  7, 1);.        }
10190 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
101a0 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
101b0 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20 0a 20 20  T */.      } .  
101c0 20 20 7d 0a 20 20 20 20 61 64 64 72 20 3d 20 73    }.    addr = s
101d0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
101e0 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
101f0 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43 6f  (endCode), endCo
10200 64 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  de);.    sqlite3
10210 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20  VdbeChangeP2(v, 
10220 61 64 64 72 2c 20 2d 6d 78 45 72 72 29 3b 0a 20  addr, -mxErr);. 
10230 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
10240 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 2b 31  mpHere(v, addr+1
10250 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
10260 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 61 64  beChangeP4(v, ad
10270 64 72 2b 32 2c 20 22 6f 6b 22 2c 20 50 34 5f 53  dr+2, "ok", P4_S
10280 54 41 54 49 43 29 3b 0a 20 20 7d 0a 20 20 62 72  TATIC);.  }.  br
10290 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
102a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
102b0 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23  RITY_CHECK */..#
102c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
102d0 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20  IT_UTF16.  /*.  
102e0 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f  **   PRAGMA enco
102f0 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50 52 41 47  ding.  **   PRAG
10300 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75  MA encoding = "u
10310 74 66 2d 38 22 7c 22 75 74 66 2d 31 36 22 7c 22  tf-8"|"utf-16"|"
10320 75 74 66 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31  utf-16le"|"utf-1
10330 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  6be".  **.  ** I
10340 6e 20 69 74 73 20 66 69 72 73 74 20 66 6f 72 6d  n its first form
10350 2c 20 74 68 69 73 20 70 72 61 67 6d 61 20 72 65  , this pragma re
10360 74 75 72 6e 73 20 74 68 65 20 65 6e 63 6f 64 69  turns the encodi
10370 6e 67 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20  ng of the main. 
10380 20 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 49 66   ** database. If
10390 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
103a0 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64   not initialized
103b0 2c 20 69 74 20 69 73 20 69 6e 69 74 69 61 6c 69  , it is initiali
103c0 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20  zed now..  **.  
103d0 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  ** The second fo
103e0 72 6d 20 6f 66 20 74 68 69 73 20 70 72 61 67 6d  rm of this pragm
103f0 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20  a is a no-op if 
10400 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
10410 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20  e file.  ** has 
10420 6e 6f 74 20 61 6c 72 65 61 64 79 20 62 65 65 6e  not already been
10430 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e   initialized. In
10440 20 74 68 69 73 20 63 61 73 65 20 69 74 20 73 65   this case it se
10450 74 73 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20  ts the default. 
10460 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20 74 68 61   ** encoding tha
10470 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66  t will be used f
10480 6f 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  or the main data
10490 62 61 73 65 20 66 69 6c 65 20 69 66 20 61 20 6e  base file if a n
104a0 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20  ew file.  ** is 
104b0 63 72 65 61 74 65 64 2e 20 49 66 20 61 6e 20 65  created. If an e
104c0 78 69 73 74 69 6e 67 20 6d 61 69 6e 20 64 61 74  xisting main dat
104d0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 6f 70  abase file is op
104e0 65 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 20  ened, then the. 
104f0 20 2a 2a 20 64 65 66 61 75 6c 74 20 74 65 78 74   ** default text
10500 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74 68   encoding for th
10510 65 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  e existing datab
10520 61 73 65 20 69 73 20 75 73 65 64 2e 0a 20 20 2a  ase is used..  *
10530 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63  * .  ** In all c
10540 61 73 65 73 20 6e 65 77 20 64 61 74 61 62 61 73  ases new databas
10550 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
10560 20 74 68 65 20 41 54 54 41 43 48 20 63 6f 6d 6d   the ATTACH comm
10570 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20 63 72 65  and are.  ** cre
10580 61 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20  ated to use the 
10590 73 61 6d 65 20 64 65 66 61 75 6c 74 20 74 65 78  same default tex
105a0 74 20 65 6e 63 6f 64 69 6e 67 20 61 73 20 74 68  t encoding as th
105b0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e  e main database.
105c0 20 49 66 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69   If.  ** the mai
105d0 6e 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  n database has n
105e0 6f 74 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  ot been initiali
105f0 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72 65 61 74  zed and/or creat
10600 65 64 20 77 68 65 6e 20 41 54 54 41 43 48 0a 20  ed when ATTACH. 
10610 20 2a 2a 20 69 73 20 65 78 65 63 75 74 65 64 2c   ** is executed,
10620 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20 62 65   this is done be
10630 66 6f 72 65 20 74 68 65 20 41 54 54 41 43 48 20  fore the ATTACH 
10640 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a  operation..  **.
10650 20 20 2a 2a 20 49 6e 20 74 68 65 20 73 65 63 6f    ** In the seco
10660 6e 64 20 66 6f 72 6d 20 74 68 69 73 20 70 72 61  nd form this pra
10670 67 6d 61 20 73 65 74 73 20 74 68 65 20 74 65 78  gma sets the tex
10680 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65  t encoding to be
10690 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65   used in.  ** ne
106a0 77 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  w database files
106b0 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74   created using t
106c0 68 69 73 20 64 61 74 61 62 61 73 65 20 68 61 6e  his database han
106d0 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a  dle. It is only.
106e0 20 20 2a 2a 20 75 73 65 66 75 6c 20 69 66 20 69    ** useful if i
106f0 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69 61 74 65  nvoked immediate
10700 6c 79 20 61 66 74 65 72 20 74 68 65 20 6d 61 69  ly after the mai
10710 6e 20 64 61 74 61 62 61 73 65 20 69 0a 20 20 2a  n database i.  *
10720 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
10730 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20  _ENCODING: {.   
10740 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74   static const st
10750 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20  ruct EncName {. 
10760 20 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65       char *zName
10770 3b 0a 20 20 20 20 20 20 75 38 20 65 6e 63 3b 0a  ;.      u8 enc;.
10780 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d      } encnames[]
10790 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 55 54   = {.      { "UT
107a0 46 38 22 2c 20 20 20 20 20 53 51 4c 49 54 45 5f  F8",     SQLITE_
107b0 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 0a 20  UTF8        },. 
107c0 20 20 20 20 20 7b 20 22 55 54 46 2d 38 22 2c 20       { "UTF-8", 
107d0 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20     SQLITE_UTF8  
107e0 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73        },  /* Mus
107f0 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d  t be element [1]
10800 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
10810 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55  -16le", SQLITE_U
10820 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f  TF16LE     },  /
10830 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e  * Must be elemen
10840 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b  t [2] */.      {
10850 20 22 55 54 46 2d 31 36 62 65 22 2c 20 53 51 4c   "UTF-16be", SQL
10860 49 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20  ITE_UTF16BE     
10870 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65  },  /* Must be e
10880 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20  lement [3] */.  
10890 20 20 20 20 7b 20 22 55 54 46 31 36 6c 65 22 2c      { "UTF16le",
108a0 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45    SQLITE_UTF16LE
108b0 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
108c0 22 55 54 46 31 36 62 65 22 2c 20 20 53 51 4c 49  "UTF16be",  SQLI
108d0 54 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d  TE_UTF16BE     }
108e0 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31  ,.      { "UTF-1
108f0 36 22 2c 20 20 20 30 20 20 20 20 20 20 20 20 20  6",   0         
10900 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53           }, /* S
10910 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
10920 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  E */.      { "UT
10930 46 31 36 22 2c 20 20 20 20 30 20 20 20 20 20 20  F16",    0      
10940 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f              }, /
10950 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  * SQLITE_UTF16NA
10960 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20  TIVE */.      { 
10970 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20  0, 0 }.    };.  
10980 20 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45    const struct E
10990 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20  ncName *pEnc;.  
109a0 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
109b0 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65      /* "PRAGMA e
109c0 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20  ncoding" */.    
109d0 20 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61    if( sqlite3Rea
109e0 64 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20  dSchema(pParse) 
109f0 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75  ) goto pragma_ou
10a00 74 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  t;.      sqlite3
10a10 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
10a20 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
10a30 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
10a40 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
10a50 4e 41 4d 45 2c 20 22 65 6e 63 6f 64 69 6e 67 22  NAME, "encoding"
10a60 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
10a70 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
10a80 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10a90 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 29 3b 0a  String8, 0, 1);.
10aa0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e        assert( en
10ab0 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54  cnames[SQLITE_UT
10ac0 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  F8].enc==SQLITE_
10ad0 55 54 46 38 20 29 3b 0a 20 20 20 20 20 20 61 73  UTF8 );.      as
10ae0 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53  sert( encnames[S
10af0 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65  QLITE_UTF16LE].e
10b00 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36  nc==SQLITE_UTF16
10b10 4c 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  LE );.      asse
10b20 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
10b30 49 54 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63  ITE_UTF16BE].enc
10b40 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  ==SQLITE_UTF16BE
10b50 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   );.      sqlite
10b60 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c  3VdbeChangeP4(v,
10b70 20 2d 31 2c 20 65 6e 63 6e 61 6d 65 73 5b 45 4e   -1, encnames[EN
10b80 43 28 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e 7a  C(pParse->db)].z
10b90 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29  Name, P4_STATIC)
10ba0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
10bb0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10bc0 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
10bd0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20 20 20 20  ;.    }else{    
10be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bf0 20 20 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65      /* "PRAGMA e
10c00 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58 22 20 2a  ncoding = XXX" *
10c10 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20  /.      /* Only 
10c20 63 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65  change the value
10c30 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e 63 20 69   of sqlite.enc i
10c40 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  f the database h
10c50 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20  andle is not.   
10c60 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65     ** initialize
10c70 64 2e 20 49 66 20 74 68 65 20 6d 61 69 6e 20 64  d. If the main d
10c80 61 74 61 62 61 73 65 20 65 78 69 73 74 73 2c 20  atabase exists, 
10c90 74 68 65 20 6e 65 77 20 73 71 6c 69 74 65 2e 65  the new sqlite.e
10ca0 6e 63 20 76 61 6c 75 65 0a 20 20 20 20 20 20 2a  nc value.      *
10cb0 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65 72 77 72  * will be overwr
10cc0 69 74 74 65 6e 20 77 68 65 6e 20 74 68 65 20 73  itten when the s
10cd0 63 68 65 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f  chema is next lo
10ce0 61 64 65 64 2e 20 49 66 20 69 74 20 64 6f 65 73  aded. If it does
10cf0 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c   not.      ** al
10d00 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 69 74  ready exists, it
10d10 20 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64   will be created
10d20 20 74 6f 20 75 73 65 20 74 68 65 20 6e 65 77 20   to use the new 
10d30 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a  encoding value..
10d40 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
10d50 66 28 20 0a 20 20 20 20 20 20 20 20 21 28 44 62  f( .        !(Db
10d60 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
10d70 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  0, DB_SchemaLoad
10d80 65 64 29 29 20 7c 7c 20 0a 20 20 20 20 20 20 20  ed)) || .       
10d90 20 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64   DbHasProperty(d
10da0 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74 79 29 20  b, 0, DB_Empty) 
10db0 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
10dc0 20 20 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e    for(pEnc=&encn
10dd0 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a  ames[0]; pEnc->z
10de0 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20  Name; pEnc++){. 
10df0 20 20 20 20 20 20 20 20 20 69 66 28 20 30 3d 3d           if( 0==
10e00 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
10e10 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61  Right, pEnc->zNa
10e20 6d 65 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  me) ){.         
10e30 20 20 20 45 4e 43 28 70 50 61 72 73 65 2d 3e 64     ENC(pParse->d
10e40 62 29 20 3d 20 70 45 6e 63 2d 3e 65 6e 63 20 3f  b) = pEnc->enc ?
10e50 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c   pEnc->enc : SQL
10e60 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b  ITE_UTF16NATIVE;
10e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
10e80 61 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  ak;.          }.
10e90 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
10ea0 20 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61    if( !pEnc->zNa
10eb0 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  me ){.          
10ec0 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
10ed0 70 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70 6f  pParse, "unsuppo
10ee0 72 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25  rted encoding: %
10ef0 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20  s", zRight);.   
10f00 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
10f10 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
10f20 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
10f30 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f  TE_OMIT_UTF16 */
10f40 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
10f50 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
10f60 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f  SION_PRAGMAS.  /
10f70 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
10f80 5b 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d  [database.]schem
10f90 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20  a_version.  **  
10fa0 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
10fb0 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  e.]schema_versio
10fc0 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20  n = <integer>.  
10fd0 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  **.  **   PRAGMA
10fe0 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72   [database.]user
10ff0 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20  _version.  **   
11000 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
11010 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d  .]user_version =
11020 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
11030 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
11040 61 74 61 62 61 73 65 2e 5d 66 72 65 65 6c 69 73  atabase.]freelis
11050 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74 65 67  t_count = <integ
11060 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  er>.  **.  **   
11070 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
11080 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64  .]application_id
11090 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
110a0 64 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63  database.]applic
110b0 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74 65  ation_id = <inte
110c0 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ger>.  **.  ** T
110d0 68 65 20 70 72 61 67 6d 61 27 73 20 73 63 68 65  he pragma's sche
110e0 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 75  ma_version and u
110f0 73 65 72 5f 76 65 72 73 69 6f 6e 20 61 72 65 20  ser_version are 
11100 75 73 65 64 20 74 6f 20 73 65 74 20 6f 72 20 67  used to set or g
11110 65 74 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  et.  ** the valu
11120 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2d  e of the schema-
11130 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72  version and user
11140 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73 70 65 63  -version, respec
11150 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a  tively. Both.  *
11160 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  * the schema-ver
11170 73 69 6f 6e 20 61 6e 64 20 74 68 65 20 75 73 65  sion and the use
11180 72 2d 76 65 72 73 69 6f 6e 20 61 72 65 20 33 32  r-version are 32
11190 2d 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65  -bit signed inte
111a0 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64  gers.  ** stored
111b0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
111c0 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20   header..  **.  
111d0 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 2d 63 6f  ** The schema-co
111e0 6f 6b 69 65 20 69 73 20 75 73 75 61 6c 6c 79 20  okie is usually 
111f0 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65 64  only manipulated
11200 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53   internally by S
11210 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69  QLite. It.  ** i
11220 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  s incremented by
11230 20 53 51 4c 69 74 65 20 77 68 65 6e 65 76 65 72   SQLite whenever
11240 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
11250 68 65 6d 61 20 69 73 20 6d 6f 64 69 66 69 65 64  hema is modified
11260 20 28 62 79 0a 20 20 2a 2a 20 63 72 65 61 74 69   (by.  ** creati
11270 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e 67 20 61  ng or dropping a
11280 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 29   table or index)
11290 2e 20 54 68 65 20 73 63 68 65 6d 61 20 76 65 72  . The schema ver
112a0 73 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 0a  sion is used by.
112b0 20 20 2a 2a 20 53 51 4c 69 74 65 20 65 61 63 68    ** SQLite each
112c0 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69 73   time a query is
112d0 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73   executed to ens
112e0 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ure that the int
112f0 65 72 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a  ernal cache.  **
11300 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 75   of the schema u
11310 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69  sed when compili
11320 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79  ng the SQL query
11330 20 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68   matches the sch
11340 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20  ema of.  ** the 
11350 64 61 74 61 62 61 73 65 20 61 67 61 69 6e 73 74  database against
11360 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69   which the compi
11370 6c 65 64 20 71 75 65 72 79 20 69 73 20 61 63 74  led query is act
11380 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a  ually executed..
11390 20 20 2a 2a 20 53 75 62 76 65 72 74 69 6e 67 20    ** Subverting 
113a0 74 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20 62  this mechanism b
113b0 79 20 75 73 69 6e 67 20 22 50 52 41 47 4d 41 20  y using "PRAGMA 
113c0 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20  schema_version" 
113d0 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74  to modify.  ** t
113e0 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
113f0 6e 20 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79  n is potentially
11400 20 64 61 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d   dangerous and m
11410 61 79 20 6c 65 61 64 20 74 6f 20 70 72 6f 67 72  ay lead to progr
11420 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65 73 20  am.  ** crashes 
11430 6f 72 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  or database corr
11440 75 70 74 69 6f 6e 2e 20 55 73 65 20 77 69 74 68  uption. Use with
11450 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20   caution!.  **. 
11460 20 2a 2a 20 54 68 65 20 75 73 65 72 2d 76 65 72   ** The user-ver
11470 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65 64  sion is not used
11480 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53   internally by S
11490 51 4c 69 74 65 2e 20 49 74 20 6d 61 79 20 62 65  QLite. It may be
114a0 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 61 70   used by.  ** ap
114b0 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20 61  plications for a
114c0 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f  ny purpose..  */
114d0 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
114e0 48 45 41 44 45 52 5f 56 41 4c 55 45 3a 20 7b 0a  HEADER_VALUE: {.
114f0 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b      int iCookie;
11500 20 20 20 2f 2a 20 43 6f 6f 6b 69 65 20 69 6e 64     /* Cookie ind
11510 65 78 2e 20 31 20 66 6f 72 20 73 63 68 65 6d 61  ex. 1 for schema
11520 2d 63 6f 6f 6b 69 65 2c 20 36 20 66 6f 72 20 75  -cookie, 6 for u
11530 73 65 72 2d 63 6f 6f 6b 69 65 2e 20 2a 2f 0a 20  ser-cookie. */. 
11540 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
11550 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b  esBtree(v, iDb);
11560 0a 20 20 20 20 73 77 69 74 63 68 28 20 7a 4c 65  .    switch( zLe
11570 66 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 63  ft[0] ){.      c
11580 61 73 65 20 27 61 27 3a 20 63 61 73 65 20 27 41  ase 'a': case 'A
11590 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b  ':.        iCook
115a0 69 65 20 3d 20 42 54 52 45 45 5f 41 50 50 4c 49  ie = BTREE_APPLI
115b0 43 41 54 49 4f 4e 5f 49 44 3b 0a 20 20 20 20 20  CATION_ID;.     
115c0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
115d0 63 61 73 65 20 27 66 27 3a 20 63 61 73 65 20 27  case 'f': case '
115e0 46 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f  F':.        iCoo
115f0 6b 69 65 20 3d 20 42 54 52 45 45 5f 46 52 45 45  kie = BTREE_FREE
11600 5f 50 41 47 45 5f 43 4f 55 4e 54 3b 0a 20 20 20  _PAGE_COUNT;.   
11610 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
11620 20 20 63 61 73 65 20 27 73 27 3a 20 63 61 73 65    case 's': case
11630 20 27 53 27 3a 0a 20 20 20 20 20 20 20 20 69 43   'S':.        iC
11640 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 53 43  ookie = BTREE_SC
11650 48 45 4d 41 5f 56 45 52 53 49 4f 4e 3b 0a 20 20  HEMA_VERSION;.  
11660 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
11670 20 20 20 64 65 66 61 75 6c 74 3a 0a 20 20 20 20     default:.    
11680 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54      iCookie = BT
11690 52 45 45 5f 55 53 45 52 5f 56 45 52 53 49 4f 4e  REE_USER_VERSION
116a0 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
116b0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
116c0 7a 52 69 67 68 74 20 26 26 20 69 43 6f 6f 6b 69  zRight && iCooki
116d0 65 21 3d 42 54 52 45 45 5f 46 52 45 45 5f 50 41  e!=BTREE_FREE_PA
116e0 47 45 5f 43 4f 55 4e 54 20 29 7b 0a 20 20 20 20  GE_COUNT ){.    
116f0 20 20 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73    /* Write the s
11700 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20  pecified cookie 
11710 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73  value */.      s
11720 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65  tatic const Vdbe
11730 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65  OpList setCookie
11740 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
11750 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
11760 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
11770 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
11780 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
11790 20 20 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20          0,  1,  
117a0 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20  0},    /* 1 */. 
117b0 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43         { OP_SetC
117c0 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20  ookie,      0,  
117d0 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20  0,  1},    /* 2 
117e0 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20  */.      };.    
117f0 20 20 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c    int addr = sql
11800 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73  ite3VdbeAddOpLis
11810 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73  t(v, ArraySize(s
11820 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f  etCookie), setCo
11830 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  okie);.      sql
11840 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
11850 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a  (v, addr, iDb);.
11860 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11870 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
11880 72 2b 31 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  r+1, sqlite3Atoi
11890 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20  (zRight));.     
118a0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
118b0 67 65 50 31 28 76 2c 20 61 64 64 72 2b 32 2c 20  geP1(v, addr+2, 
118c0 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
118d0 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28  te3VdbeChangeP2(
118e0 76 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f 6b  v, addr+2, iCook
118f0 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ie);.    }else{.
11900 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68        /* Read th
11910 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b  e specified cook
11920 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ie value */.    
11930 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
11940 64 62 65 4f 70 4c 69 73 74 20 72 65 61 64 43 6f  dbeOpList readCo
11950 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  okie[] = {.     
11960 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74     { OP_Transact
11970 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c 20  ion,     0,  0, 
11980 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
11990 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61          { OP_Rea
119a0 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  dCookie,      0,
119b0 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    1,  0},    /* 
119c0 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  1 */.        { O
119d0 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 20  P_ResultRow,    
119e0 20 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20     1,  1,  0}.  
119f0 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
11a00 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
11a10 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
11a20 41 72 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f  ArraySize(readCo
11a30 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b 69  okie), readCooki
11a40 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
11a50 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
11a60 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20   addr, iDb);.   
11a70 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
11a80 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31  angeP1(v, addr+1
11a90 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
11aa0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
11ab0 33 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 43 6f  3(v, addr+1, iCo
11ac0 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  okie);.      sql
11ad0 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
11ae0 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
11af0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
11b00 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
11b10 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c  AME_NAME, zLeft,
11b20 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e   SQLITE_TRANSIEN
11b30 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  T);.    }.  }.  
11b40 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
11b50 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
11b60 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47  EMA_VERSION_PRAG
11b70 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
11b80 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50  SQLITE_OMIT_COMP
11b90 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a  ILEOPTION_DIAGS.
11ba0 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
11bb0 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f  MA compile_optio
11bc0 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  ns.  **.  ** Ret
11bd0 75 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66  urn the names of
11be0 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   all compile-tim
11bf0 65 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 69  e options used i
11c00 6e 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20 20  n this build,.  
11c10 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65  ** one option pe
11c20 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61  r row..  */.  ca
11c30 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49  se PragTyp_COMPI
11c40 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20  LE_OPTIONS: {.  
11c50 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20    int i = 0;.   
11c60 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70   const char *zOp
11c70 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  t;.    sqlite3Vd
11c80 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
11c90 31 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  1);.    pParse->
11ca0 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73 71  nMem = 1;.    sq
11cb0 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
11cc0 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
11cd0 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70 69 6c 65  E_NAME, "compile
11ce0 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c 49 54 45  _option", SQLITE
11cf0 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 77 68  _STATIC);.    wh
11d00 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c  ile( (zOpt = sql
11d10 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  ite3_compileopti
11d20 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20  on_get(i++))!=0 
11d30 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
11d40 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
11d50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20  _String8, 0, 1, 
11d60 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a 20 20 20  0, zOpt, 0);.   
11d70 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
11d80 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
11d90 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20  tRow, 1, 1);.   
11da0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
11db0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
11dc0 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
11dd0 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69  ION_DIAGS */..#i
11de0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
11df0 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20  T_WAL.  /*.  ** 
11e00 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
11e10 73 65 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69  se.]wal_checkpoi
11e20 6e 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c  nt = passive|ful
11e30 6c 7c 72 65 73 74 61 72 74 0a 20 20 2a 2a 0a 20  l|restart.  **. 
11e40 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20 74   ** Checkpoint t
11e50 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a  he database..  *
11e60 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
11e70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a  _WAL_CHECKPOINT:
11e80 20 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20 3d   {.    int iBt =
11e90 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51   (pId2->z?iDb:SQ
11ea0 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
11eb0 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  D);.    int eMod
11ec0 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b  e = SQLITE_CHECK
11ed0 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20  POINT_PASSIVE;. 
11ee0 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
11ef0 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
11f00 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
11f10 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a  , "full")==0 ){.
11f20 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
11f30 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
11f40 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65  T_FULL;.      }e
11f50 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
11f60 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
11f70 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a  restart")==0 ){.
11f80 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
11f90 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
11fa0 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20 20  T_RESTART;.     
11fb0 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c   }.    }.    sql
11fc0 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
11fd0 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70 50  ls(v, 3);.    pP
11fe0 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a  arse->nMem = 3;.
11ff0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
12000 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
12010 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 62  COLNAME_NAME, "b
12020 75 73 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  usy", SQLITE_STA
12030 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
12040 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
12050 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
12060 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c 49 54  ME, "log", SQLIT
12070 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
12080 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
12090 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
120a0 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63 6b 70  ME_NAME, "checkp
120b0 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49 54 45 5f  ointed", SQLITE_
120c0 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 73 71  STATIC);..    sq
120d0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
120e0 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74  v, OP_Checkpoint
120f0 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29  , iBt, eMode, 1)
12100 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
12110 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
12120 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a  sultRow, 1, 3);.
12130 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
12140 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
12150 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f   wal_autocheckpo
12160 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  int.  **   PRAGM
12170 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  A wal_autocheckp
12180 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  oint = N.  **.  
12190 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20 64  ** Configure a d
121a0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
121b0 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61  on to automatica
121c0 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20 61  lly checkpoint a
121d0 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 61   database.  ** a
121e0 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69 6e  fter accumulatin
121f0 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74 68  g N frames in th
12200 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79 20  e log. Or query 
12210 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
12220 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e  value.  ** of N.
12230 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
12240 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45  gTyp_WAL_AUTOCHE
12250 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69  CKPOINT: {.    i
12260 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
12270 20 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61     sqlite3_wal_a
12280 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64 62  utocheckpoint(db
12290 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52  , sqlite3Atoi(zR
122a0 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20  ight));.    }.  
122b0 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
122c0 74 28 70 50 61 72 73 65 2c 20 22 77 61 6c 5f 61  t(pParse, "wal_a
122d0 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20  utocheckpoint", 
122e0 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61 6c  .       db->xWal
122f0 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65  Callback==sqlite
12300 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20  3WalDefaultHook 
12310 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 53 51  ? .           SQ
12320 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
12330 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20 30  db->pWalArg) : 0
12340 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
12350 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a  #endif..  /*.  *
12360 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e 6b  *  PRAGMA shrink
12370 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a  _memory.  **.  *
12380 2a 20 54 68 69 73 20 70 72 61 67 6d 61 20 61 74  * This pragma at
12390 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 61  tempts to free a
123a0 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61 73  s much memory as
123b0 20 70 6f 73 73 69 62 6c 65 20 66 72 6f 6d 20 74   possible from t
123c0 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74 20  he.  ** current 
123d0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
123e0 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ion..  */.  case
123f0 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f   PragTyp_SHRINK_
12400 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20 20 73 71  MEMORY: {.    sq
12410 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73 65  lite3_db_release
12420 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20 20  _memory(db);.   
12430 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
12440 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
12450 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20 2a  busy_timeout.  *
12460 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f  *   PRAGMA busy_
12470 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a  timeout = N.  **
12480 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74  .  ** Call sqlit
12490 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28  e3_busy_timeout(
124a0 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e 20  db, N).  Return 
124b0 74 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d 65  the current time
124c0 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 69  out value.  ** i
124d0 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20 20 49  f one is set.  I
124e0 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c 65  f no busy handle
124f0 72 20 6f 72 20 61 20 64 69 66 66 65 72 65 6e 74  r or a different
12500 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 69 73   busy handler is
12510 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20 30   set.  ** then 0
12520 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20 53   is returned.  S
12530 65 74 74 69 6e 67 20 74 68 65 20 62 75 73 79 5f  etting the busy_
12540 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72 20  timeout to 0 or 
12550 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20 64 69  negative.  ** di
12560 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d 65 6f  sables the timeo
12570 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61 73  ut..  */.  /*cas
12580 65 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54  e PragTyp_BUSY_T
12590 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61 75 6c 74  IMEOUT*/ default
125a0 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  : {.    assert( 
125b0 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64  aPragmaNames[mid
125c0 5d 2e 65 50 72 61 67 54 79 70 3d 3d 50 72 61 67  ].ePragTyp==Prag
125d0 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54  Typ_BUSY_TIMEOUT
125e0 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67   );.    if( zRig
125f0 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
12600 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
12610 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  (db, sqlite3Atoi
12620 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d  (zRight));.    }
12630 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
12640 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 69  eInt(pParse, "ti
12650 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75 73  meout",  db->bus
12660 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62  yTimeout);.    b
12670 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
12680 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f    **   PRAGMA so
12690 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20  ft_heap_limit.  
126a0 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74  **   PRAGMA soft
126b0 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a  _heap_limit = N.
126c0 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73    **.  ** Call s
126d0 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70  qlite3_soft_heap
126e0 5f 6c 69 6d 69 74 36 34 28 4e 29 2e 20 20 52 65  _limit64(N).  Re
126f0 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74 2e  turn the result.
12700 20 20 49 66 20 4e 20 69 73 20 6f 6d 69 74 74 65    If N is omitte
12710 64 2c 0a 20 20 2a 2a 20 75 73 65 20 2d 31 2e 0a  d,.  ** use -1..
12720 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
12730 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49  Typ_SOFT_HEAP_LI
12740 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  MIT: {.    sqlit
12750 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20  e3_int64 N;.    
12760 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 73 71  if( zRight && sq
12770 6c 69 74 65 33 41 74 6f 69 36 34 28 7a 52 69 67  lite3Atoi64(zRig
12780 68 74 2c 20 26 4e 2c 20 31 30 30 30 30 30 30 2c  ht, &N, 1000000,
12790 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3d 3d 53   SQLITE_UTF8)==S
127a0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
127b0 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68    sqlite3_soft_h
127c0 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a  eap_limit64(N);.
127d0 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
127e0 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
127f0 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  , "soft_heap_lim
12800 69 74 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f  it",  sqlite3_so
12810 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28  ft_heap_limit64(
12820 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  -1));.    break;
12830 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65  .  }..#if define
12840 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
12850 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
12860 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a  E_TEST).  /*.  *
12870 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63 75 72  * Report the cur
12880 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69  rent state of fi
12890 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20  le logs for all 
128a0 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20  databases.  */. 
128b0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
128c0 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20 20  CK_STATUS: {.   
128d0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
128e0 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b  ar *const azLock
128f0 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Name[] = {.     
12900 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68   "unlocked", "sh
12910 61 72 65 64 22 2c 20 22 72 65 73 65 72 76 65 64  ared", "reserved
12920 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65  ", "pending", "e
12930 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b  xclusive".    };
12940 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
12950 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
12960 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20  mCols(v, 2);.   
12970 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
12980 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  2;.    sqlite3Vd
12990 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
129a0 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
129b0 20 22 64 61 74 61 62 61 73 65 22 2c 20 53 51 4c   "database", SQL
129c0 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
129d0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
129e0 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
129f0 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74 61 74  NAME_NAME, "stat
12a00 75 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  us", SQLITE_STAT
12a10 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  IC);.    for(i=0
12a20 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
12a30 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a  ){.      Btree *
12a40 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74  pBt;.      const
12a50 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20   char *zState = 
12a60 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20  "unknown";.     
12a70 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66   int j;.      if
12a80 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ( db->aDb[i].zNa
12a90 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  me==0 ) continue
12aa0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
12ab0 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
12ac0 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
12ad0 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
12ae0 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a  me, P4_STATIC);.
12af0 20 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e        pBt = db->
12b00 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20  aDb[i].pBt;.    
12b10 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20    if( pBt==0 || 
12b20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
12b30 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20  r(pBt)==0 ){.   
12b40 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22 63       zState = "c
12b50 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d 65  losed";.      }e
12b60 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f  lse if( sqlite3_
12b70 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
12b80 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   i ? db->aDb[i].
12b90 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20  zName : 0, .    
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bc0 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f   SQLITE_FCNTL_LO
12bd0 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51  CKSTATE, &j)==SQ
12be0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
12bf0 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c      zState = azL
12c00 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20  ockName[j];.    
12c10 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
12c20 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
12c30 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
12c40 20 30 2c 20 7a 53 74 61 74 65 2c 20 50 34 5f 53   0, zState, P4_S
12c50 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
12c60 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
12c70 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
12c80 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20   1, 2);.    }.  
12c90 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
12ca0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
12cb0 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 63  TE_HAS_CODEC.  c
12cc0 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59 3a  ase PragTyp_KEY:
12cd0 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
12ce0 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f  t ) sqlite3_key_
12cf0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67  v2(db, zDb, zRig
12d00 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
12d10 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
12d20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63    break;.  }.  c
12d30 61 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45  ase PragTyp_REKE
12d40 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
12d50 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72 65  ght ) sqlite3_re
12d60 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
12d70 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53  zRight, sqlite3S
12d80 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29  trlen30(zRight))
12d90 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
12da0 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
12db0 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66  HEXKEY: {.    if
12dc0 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
12dd0 20 20 69 6e 74 20 69 2c 20 68 31 2c 20 68 32 3b    int i, h1, h2;
12de0 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4b 65 79  .      char zKey
12df0 5b 34 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28  [40];.      for(
12e00 69 3d 30 3b 20 28 68 31 20 3d 20 7a 52 69 67 68  i=0; (h1 = zRigh
12e10 74 5b 69 5d 29 21 3d 30 20 26 26 20 28 68 32 20  t[i])!=0 && (h2 
12e20 3d 20 7a 52 69 67 68 74 5b 69 2b 31 5d 29 21 3d  = zRight[i+1])!=
12e30 30 3b 20 69 2b 3d 32 29 7b 0a 20 20 20 20 20 20  0; i+=2){.      
12e40 20 20 68 31 20 2b 3d 20 39 2a 28 31 26 28 68 31    h1 += 9*(1&(h1
12e50 3e 3e 36 29 29 3b 0a 20 20 20 20 20 20 20 20 68  >>6));.        h
12e60 32 20 2b 3d 20 39 2a 28 31 26 28 68 32 3e 3e 36  2 += 9*(1&(h2>>6
12e70 29 29 3b 0a 20 20 20 20 20 20 20 20 7a 4b 65 79  ));.        zKey
12e80 5b 69 2f 32 5d 20 3d 20 28 68 32 20 26 20 30 78  [i/2] = (h2 & 0x
12e90 30 66 29 20 7c 20 28 28 68 31 20 26 20 30 78 66  0f) | ((h1 & 0xf
12ea0 29 3c 3c 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20  )<<4);.      }. 
12eb0 20 20 20 20 20 69 66 28 20 28 7a 4c 65 66 74 5b       if( (zLeft[
12ec0 33 5d 20 26 20 30 78 66 29 3d 3d 30 78 62 20 29  3] & 0xf)==0xb )
12ed0 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
12ee0 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  3_key_v2(db, zDb
12ef0 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20  , zKey, i/2);.  
12f00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
12f10 20 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79     sqlite3_rekey
12f20 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65  _v2(db, zDb, zKe
12f30 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d  y, i/2);.      }
12f40 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
12f50 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66  ;.  }.#endif.#if
12f60 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
12f70 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65  HAS_CODEC) || de
12f80 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
12f90 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20 63 61 73  BLE_CEROD).  cas
12fa0 65 20 50 72 61 67 54 79 70 5f 41 43 54 49 56 41  e PragTyp_ACTIVA
12fb0 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 3a 20 69  TE_EXTENSIONS: i
12fc0 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 23 69 66  f( zRight ){.#if
12fd0 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43  def SQLITE_HAS_C
12fe0 4f 44 45 43 0a 20 20 20 20 69 66 28 20 73 71 6c  ODEC.    if( sql
12ff0 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69  ite3StrNICmp(zRi
13000 67 68 74 2c 20 22 73 65 65 2d 22 2c 20 34 29 3d  ght, "see-", 4)=
13010 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
13020 74 65 33 5f 61 63 74 69 76 61 74 65 5f 73 65 65  te3_activate_see
13030 28 26 7a 52 69 67 68 74 5b 34 5d 29 3b 0a 20 20  (&zRight[4]);.  
13040 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65    }.#endif.#ifde
13050 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
13060 43 45 52 4f 44 0a 20 20 20 20 69 66 28 20 73 71  CEROD.    if( sq
13070 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52  lite3StrNICmp(zR
13080 69 67 68 74 2c 20 22 63 65 72 6f 64 2d 22 2c 20  ight, "cerod-", 
13090 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  6)==0 ){.      s
130a0 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f  qlite3_activate_
130b0 63 65 72 6f 64 28 26 7a 52 69 67 68 74 5b 36 5d  cerod(&zRight[6]
130c0 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
130d0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
130e0 64 69 66 0a 0a 20 20 7d 20 2f 2a 20 45 6e 64 20  dif..  } /* End 
130f0 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 73 77  of the PRAGMA sw
13100 69 74 63 68 20 2a 2f 0a 0a 70 72 61 67 6d 61 5f  itch */..pragma_
13110 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65 33 44 62  out:.  sqlite3Db
13120 46 72 65 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b  Free(db, zLeft);
13130 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
13140 28 64 62 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a  (db, zRight);.}.
13150 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
13160 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
13170 0a                                               .